@@ -16,17 +16,16 @@ public LoginService(IAccountsService accounts)
1616 _accounts = accounts ;
1717 }
1818
19- public async Task < Client > LoginWithToken ( string clientId , string clientSecret , string code , string redirect , string requestDomain , string apiDomain )
19+ public async Task < LoginData > LoginWithToken ( string clientId , string clientSecret , string code , string redirect , string requestDomain , string apiDomain , GitHubAccount account )
2020 {
2121 var token = await Task . Run ( ( ) => Client . RequestAccessToken ( clientId , clientSecret , code , redirect , requestDomain ) ) ;
2222 var client = Client . BasicOAuth ( token . AccessToken , apiDomain ) ;
2323 var info = await client . ExecuteAsync ( client . AuthenticatedUser . GetInfo ( ) ) ;
2424 var username = info . Data . Login ;
2525
2626 //Does this user exist?
27- var account = ( GitHubAccount ) _accounts . Find ( username ) ;
2827 var exists = account != null ;
29- if ( ! exists )
28+ if ( ! exists )
3029 account = new GitHubAccount { Username = username } ;
3130 account . OAuth = token . AccessToken ;
3231 account . AvatarUrl = info . Data . AvatarUrl ;
@@ -38,13 +37,22 @@ public async Task<Client> LoginWithToken(string clientId, string clientSecret, s
3837 _accounts . Update ( account ) ;
3938 else
4039 _accounts . Insert ( account ) ;
41- return client ;
40+ return new LoginData { Client = client , Account = account } ;
4241 }
4342
4443 public async Task < Client > LoginAccount ( GitHubAccount account )
4544 {
4645 //Create the client
47- var client = Client . BasicOAuth ( account . OAuth , account . Domain ?? Client . DefaultApi ) ;
46+ Client client = null ;
47+ if ( ! string . IsNullOrEmpty ( account . OAuth ) )
48+ {
49+ client = Client . BasicOAuth ( account . OAuth , account . Domain ?? Client . DefaultApi ) ;
50+ }
51+ else if ( account . IsEnterprise || ! string . IsNullOrEmpty ( account . Password ) )
52+ {
53+ client = Client . Basic ( account . Username , account . Password , account . Domain ?? Client . DefaultApi ) ;
54+ }
55+
4856 var data = await client . ExecuteAsync ( client . AuthenticatedUser . GetInfo ( ) ) ;
4957 var userInfo = data . Data ;
5058 account . Username = userInfo . Login ;
@@ -54,7 +62,7 @@ public async Task<Client> LoginAccount(GitHubAccount account)
5462 return client ;
5563 }
5664
57- public GitHubAccount Authenticate ( string domain , string user , string pass , string twoFactor )
65+ public LoginData Authenticate ( string domain , string user , string pass , string twoFactor , bool enterprise , GitHubAccount account )
5866 {
5967 //Fill these variables in during the proceeding try/catch
6068 var apiUrl = domain ;
@@ -70,22 +78,30 @@ public GitHubAccount Authenticate(string domain, string user, string pass, strin
7078 throw new ArgumentException ( "Domain is invalid" ) ;
7179
7280 //Does this user exist?
73- var account = ( GitHubAccount ) _accounts . Find ( user ) ;
7481 bool exists = account != null ;
7582 if ( ! exists )
7683 account = new GitHubAccount { Username = user } ;
7784
7885 account . Domain = apiUrl ;
86+ account . IsEnterprise = enterprise ;
7987 var client = twoFactor == null ? Client . Basic ( user , pass , apiUrl ) : Client . BasicTwoFactorAuthentication ( user , pass , twoFactor , apiUrl ) ;
80- var auth = client . Execute ( client . Authorizations . GetOrCreate ( "72f4fb74bdba774b759d" , "9253ab615f8c00738fff5d1c665ca81e581875cb" , new System . Collections . Generic . List < string > ( Scopes ) , "CodeHub" , null ) ) ;
81- account . OAuth = auth . Data . Token ;
88+
89+ if ( enterprise )
90+ {
91+ account . Password = pass ;
92+ }
93+ else
94+ {
95+ var auth = client . Execute ( client . Authorizations . GetOrCreate ( "72f4fb74bdba774b759d" , "9253ab615f8c00738fff5d1c665ca81e581875cb" , new System . Collections . Generic . List < string > ( Scopes ) , "CodeHub" , null ) ) ;
96+ account . OAuth = auth . Data . Token ;
97+ }
8298
8399 if ( exists )
84100 _accounts . Update ( account ) ;
85101 else
86102 _accounts . Insert ( account ) ;
87103
88- return account ;
104+ return new LoginData { Client = client , Account = account } ;
89105 }
90106 catch ( StatusCodeException ex )
91107 {
@@ -96,12 +112,6 @@ public GitHubAccount Authenticate(string domain, string user, string pass, strin
96112 }
97113 }
98114
99- public bool NeedsAuthentication ( GitHubAccount account )
100- {
101- var exists = _accounts . Find ( account . Username ) != null ;
102- return exists == false || string . IsNullOrEmpty ( account . OAuth ) ;
103- }
104-
105115 /// <summary>
106116 /// Goofy exception so we can catch and do two factor auth
107117 /// </summary>
0 commit comments