public async Task LoginWithToken(string clientId, string clientSecret, string code, string redirect, string requestDomain, string apiDomain) { var oauthRequest = new Octokit.OauthTokenRequest(clientId, clientSecret, code) { RedirectUri = new Uri(redirect) }; var client = new Octokit.GitHubClient(OctokitClientFactory.UserAgent); var token = await client.Oauth.CreateAccessToken(oauthRequest); var credentials = new Octokit.Credentials(token.AccessToken); client = OctokitClientFactory.Create(new Uri(apiDomain), credentials); var user = await client.User.Current(); var account = await _accountsService.Get(apiDomain, user.Login); account = account ?? new Account { Username = user.Login }; account.OAuth = token.AccessToken; account.AvatarUrl = user.AvatarUrl; account.Domain = apiDomain; account.WebDomain = requestDomain; await _accountsService.Save(account); await _applicationService.LoginAccount(account); }
public async Task LoginAccount(Account account) { var domain = account.Domain ?? Client.DefaultApi; Client client = null; Octokit.Credentials credentials = null; if (!string.IsNullOrEmpty(account.OAuth)) { client = Client.BasicOAuth(account.OAuth, domain); credentials = new Octokit.Credentials(account.OAuth); } else if (account.IsEnterprise || !string.IsNullOrEmpty(account.Password)) { client = Client.Basic(account.Username, account.Password, domain); credentials = new Octokit.Credentials(account.Username, account.Password); } var octoClient = OctokitClientFactory.Create(new Uri(domain), credentials); var user = await octoClient.User.Current(); account.Username = user.Login; account.AvatarUrl = user.AvatarUrl; client.Username = user.Login; await _accountsService.Save(account); await _accountsService.SetActiveAccount(account); Account = account; Client = client; GitHubClient = octoClient; }
public void ActivateUser(Account account, Client client) { _accountsService.SetActiveAccount(account).Wait(); Account = account; Client = client; var domain = account.Domain ?? Client.DefaultApi; var credentials = new Octokit.Credentials(account.OAuth); var oldClient = Client.BasicOAuth(account.OAuth, domain); GitHubClient = OctokitClientFactory.Create(new Uri(domain), credentials); }
public async Task <GitHubAccount> Authenticate(string apiDomain, string webDomain, string user, string pass, string twoFactor, bool enterprise) { try { string token = null; if (enterprise) { var client = twoFactor == null?Client.Basic(user, pass, apiDomain) : Client.BasicTwoFactorAuthentication(user, pass, twoFactor, apiDomain); var name = string.Format("CodeHub (GitHub for iOS) - {0}", DateTime.Now.ToString("s")); var request = client.Authorizations.Create(OctokitClientFactory.Scopes.ToList(), name, "http://codehub-app.com"); var auth = await client.ExecuteAsync(request); token = auth.Data.Token; } else { var scopes = OctokitClientFactory.Scopes; var client = OctokitClientFactory.Create(new Uri(apiDomain), new Credentials(user, pass)); var appAuth = await client.Authorization.GetOrCreateApplicationAuthentication("72f4fb74bdba774b759d", "9253ab615f8c00738fff5d1c665ca81e581875cb", new NewAuthorization("CodeHub", scopes)); if (scopes.Except(appAuth.Scopes).Any()) { await client.Authorization.Update(appAuth.Id, new AuthorizationUpdate { Scopes = scopes }); } token = appAuth.Token; } return(await Authenticate(apiDomain, webDomain, token, enterprise)); } catch (StatusCodeException ex) { //Looks like we need to ask for the key! if (ex.Headers.ContainsKey("X-GitHub-OTP")) { throw new TwoFactorRequiredException(); } throw new Exception("Unable to login as user " + user + ". Please check your credentials and try again."); } }
public async Task SetSessionAccount(GitHubAccount account) { if (account == null) { Account = null; Client = null; GitHubClient = null; return; } try { var domain = account.Domain ?? Client.DefaultApi; var credentials = new Credentials(account.OAuth); var oldClient = Client.BasicOAuth(account.OAuth, domain); var newClient = OctokitClientFactory.Create(new Uri(domain), credentials); var userInfo = await newClient.User.Current(); account.Name = userInfo.Name; account.Email = userInfo.Email; account.AvatarUrl = userInfo.AvatarUrl; await _accountsRepository.Update(account); // Set all the good stuff. Client = oldClient; GitHubClient = newClient; Account = account; // Identify for the analytics service _analyticsService.Identify(Account.Username); _analyticsService.Track("login"); } catch { Account = null; GitHubClient = null; Client = null; throw; } }
public async Task LoginWithBasic(string domain, string user, string pass, string twoFactor = null) { if (string.IsNullOrEmpty(user)) { throw new ArgumentException("Username is invalid"); } if (string.IsNullOrEmpty(pass)) { throw new ArgumentException("Password is invalid"); } if (domain == null || !Uri.IsWellFormedUriString(domain, UriKind.Absolute)) { throw new ArgumentException("Domain is invalid"); } var newAuthorization = new Octokit.NewAuthorization( $"CodeHub: {user}", Scopes, Guid.NewGuid().ToString()); var credentials = new Octokit.Credentials(user, pass); var client = OctokitClientFactory.Create(new Uri(domain), credentials); var authorization = await(twoFactor == null ? client.Authorization.Create(newAuthorization) : client.Authorization.Create(newAuthorization, twoFactor)); var existingAccount = await _accountsService.Get(domain, user); var account = existingAccount ?? new Account { Username = user, IsEnterprise = true, WebDomain = domain, Domain = domain }; account.OAuth = authorization.Token; await _applicationService.LoginAccount(account); }
public async Task LoginWithToken(string apiDomain, string webDomain, string token, bool enterprise) { if (string.IsNullOrEmpty(token)) { throw new ArgumentException("Token is invalid"); } if (apiDomain != null && !Uri.IsWellFormedUriString(apiDomain, UriKind.Absolute)) { throw new ArgumentException("API Domain is invalid"); } if (webDomain != null && !Uri.IsWellFormedUriString(webDomain, UriKind.Absolute)) { throw new ArgumentException("Web Domain is invalid"); } var credentials = new Octokit.Credentials(token); var client = OctokitClientFactory.Create(new Uri(apiDomain), credentials); var userInfo = await client.User.Current(); var scopes = await GetScopes(apiDomain, userInfo.Login, token); CheckScopes(scopes); var account = (await _accountsService.Get(apiDomain, userInfo.Login)) ?? new Account(); account.Username = userInfo.Login; account.Domain = apiDomain; account.WebDomain = webDomain; account.IsEnterprise = enterprise; account.OAuth = token; account.AvatarUrl = userInfo.AvatarUrl; await _accountsService.Save(account); await _applicationService.LoginAccount(account); }