@@ -16,38 +16,41 @@ class ApiClient : IApiClient
16
16
private readonly IKeychain keychain ;
17
17
private readonly IProcessManager processManager ;
18
18
private readonly ITaskManager taskManager ;
19
- private readonly NPath nodeJsExecutablePath ;
20
- private readonly NPath octorunScriptPath ;
21
19
private readonly ILoginManager loginManager ;
20
+ private readonly IEnvironment environment ;
22
21
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 )
24
23
{
25
- Guard . ArgumentNotNull ( hostUrl , nameof ( hostUrl ) ) ;
26
24
Guard . ArgumentNotNull ( keychain , nameof ( keychain ) ) ;
27
25
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 ;
30
33
this . keychain = keychain ;
31
34
this . processManager = processManager ;
32
35
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 ) ;
36
38
}
37
39
38
40
public ITask Logout ( UriString host )
39
41
{
40
42
return loginManager . Logout ( host ) ;
41
43
}
42
44
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 )
44
47
{
45
48
Guard . ArgumentNotNull ( callback , "callback" ) ;
46
49
47
50
new FuncTask < GitHubRepository > ( taskManager . Token , ( ) =>
48
51
{
49
- var user = GetCurrentUser ( ) ;
50
- var keychainAdapter = keychain . Connect ( OriginalUrl ) ;
52
+ // this validates the user, again
53
+ GetCurrentUser ( ) ;
51
54
52
55
var command = new StringBuilder ( "publish -r \" " ) ;
53
56
command . Append ( name ) ;
@@ -72,8 +75,7 @@ public void CreateRepository(string name, string description, bool isPrivate, Ac
72
75
command . Append ( " -p" ) ;
73
76
}
74
77
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 ( ) )
77
79
. Configure ( processManager ) ;
78
80
79
81
var ret = octorunTask . RunSynchronously ( ) ;
@@ -106,11 +108,8 @@ public void GetOrganizations(Action<Organization[]> onSuccess, Action<Exception>
106
108
Guard . ArgumentNotNull ( onSuccess , nameof ( onSuccess ) ) ;
107
109
new FuncTask < Organization [ ] > ( taskManager . Token , ( ) =>
108
110
{
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" )
114
113
. Configure ( processManager ) ;
115
114
116
115
var ret = octorunTask . RunSynchronously ( ) ;
@@ -208,8 +207,7 @@ public void ContinueLogin(LoginResult loginResult, string code)
208
207
209
208
private GitHubUser GetCurrentUser ( )
210
209
{
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 ) ;
213
211
if ( keychainConnection == null )
214
212
throw new KeychainEmptyException ( ) ;
215
213
@@ -249,8 +247,7 @@ private GitHubUser GetValidatedGitHubUser(Connection keychainConnection, IKeycha
249
247
{
250
248
try
251
249
{
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" )
254
251
. Configure ( processManager ) ;
255
252
256
253
var ret = octorunTask . RunSynchronously ( ) ;
0 commit comments