@@ -16,38 +16,41 @@ class ApiClient : IApiClient
1616 private readonly IKeychain keychain ;
1717 private readonly IProcessManager processManager ;
1818 private readonly ITaskManager taskManager ;
19- private readonly NPath nodeJsExecutablePath ;
20- private readonly NPath octorunScriptPath ;
2119 private readonly ILoginManager loginManager ;
20+ private readonly IEnvironment environment ;
2221
23- public ApiClient ( UriString hostUrl , IKeychain keychain , IProcessManager processManager , ITaskManager taskManager , NPath nodeJsExecutablePath , NPath octorunScriptPath )
22+ public ApiClient ( UriString hostUrl , IKeychain keychain , IProcessManager processManager , ITaskManager taskManager , IEnvironment environment )
2423 {
25- Guard . ArgumentNotNull ( hostUrl , nameof ( hostUrl ) ) ;
2624 Guard . ArgumentNotNull ( keychain , nameof ( keychain ) ) ;
2725
28- HostAddress = HostAddress . Create ( hostUrl ) ;
29- OriginalUrl = hostUrl ;
26+ var host = String . IsNullOrEmpty ( hostUrl )
27+ ? UriString . ToUriString ( HostAddress . GitHubDotComHostAddress . WebUri )
28+ : new UriString ( hostUrl . ToRepositoryUri ( )
29+ . GetComponents ( UriComponents . SchemeAndServer , UriFormat . SafeUnescaped ) ) ;
30+
31+ HostAddress = HostAddress . Create ( host ) ;
32+ OriginalUrl = host ;
3033 this . keychain = keychain ;
3134 this . processManager = processManager ;
3235 this . taskManager = taskManager ;
33- this . nodeJsExecutablePath = nodeJsExecutablePath ;
34- this . octorunScriptPath = octorunScriptPath ;
35- loginManager = new LoginManager ( keychain , processManager , taskManager , nodeJsExecutablePath , octorunScriptPath ) ;
36+ this . environment = environment ;
37+ loginManager = new LoginManager ( keychain , processManager , taskManager , environment ) ;
3638 }
3739
3840 public ITask Logout ( UriString host )
3941 {
4042 return loginManager . Logout ( host ) ;
4143 }
4244
43- public void CreateRepository ( string name , string description , bool isPrivate , Action < GitHubRepository , Exception > callback , string organization = null )
45+ public void CreateRepository ( string name , string description , bool isPrivate ,
46+ Action < GitHubRepository , Exception > callback , string organization = null )
4447 {
4548 Guard . ArgumentNotNull ( callback , "callback" ) ;
4649
4750 new FuncTask < GitHubRepository > ( taskManager . Token , ( ) =>
4851 {
49- var user = GetCurrentUser ( ) ;
50- var keychainAdapter = keychain . Connect ( OriginalUrl ) ;
52+ // this validates the user, again
53+ GetCurrentUser ( ) ;
5154
5255 var command = new StringBuilder ( "publish -r \" " ) ;
5356 command . Append ( name ) ;
@@ -72,8 +75,7 @@ public void CreateRepository(string name, string description, bool isPrivate, Ac
7275 command . Append ( " -p" ) ;
7376 }
7477
75- var octorunTask = new OctorunTask ( taskManager . Token , nodeJsExecutablePath , octorunScriptPath , command . ToString ( ) ,
76- user : user . Login , userToken : keychainAdapter . Credential . Token )
78+ var octorunTask = new OctorunTask ( taskManager . Token , keychain , environment , command . ToString ( ) )
7779 . Configure ( processManager ) ;
7880
7981 var ret = octorunTask . RunSynchronously ( ) ;
@@ -106,11 +108,8 @@ public void GetOrganizations(Action<Organization[]> onSuccess, Action<Exception>
106108 Guard . ArgumentNotNull ( onSuccess , nameof ( onSuccess ) ) ;
107109 new FuncTask < Organization [ ] > ( taskManager . Token , ( ) =>
108110 {
109- var user = GetCurrentUser ( ) ;
110- var keychainAdapter = keychain . Connect ( OriginalUrl ) ;
111-
112- var octorunTask = new OctorunTask ( taskManager . Token , nodeJsExecutablePath , octorunScriptPath , "organizations" ,
113- user : user . Login , userToken : keychainAdapter . Credential . Token )
111+ var octorunTask = new OctorunTask ( taskManager . Token , keychain , environment ,
112+ "organizations" )
114113 . Configure ( processManager ) ;
115114
116115 var ret = octorunTask . RunSynchronously ( ) ;
@@ -208,8 +207,7 @@ public void ContinueLogin(LoginResult loginResult, string code)
208207
209208 private GitHubUser GetCurrentUser ( )
210209 {
211- //TODO: ONE_USER_LOGIN This assumes we only support one login
212- var keychainConnection = keychain . Connections . FirstOrDefault ( ) ;
210+ var keychainConnection = keychain . Connections . FirstOrDefault ( x => x . Host == OriginalUrl ) ;
213211 if ( keychainConnection == null )
214212 throw new KeychainEmptyException ( ) ;
215213
@@ -249,8 +247,7 @@ private GitHubUser GetValidatedGitHubUser(Connection keychainConnection, IKeycha
249247 {
250248 try
251249 {
252- var octorunTask = new OctorunTask ( taskManager . Token , nodeJsExecutablePath , octorunScriptPath , "validate" ,
253- user : keychainConnection . Username , userToken : keychainAdapter . Credential . Token )
250+ var octorunTask = new OctorunTask ( taskManager . Token , keychain , environment , "validate" )
254251 . Configure ( processManager ) ;
255252
256253 var ret = octorunTask . RunSynchronously ( ) ;
0 commit comments