public async Task <LoginData> LoginWithToken(string clientId, string clientSecret, string code, string redirect, string requestDomain, string apiDomain) { var token = await Client.RequestAccessToken(clientId, clientSecret, code, redirect, requestDomain); var client = Client.BasicOAuth(token.AccessToken, apiDomain); var info = await client.ExecuteAsync(client.AuthenticatedUser.GetInfo()); var username = info.Data.Login; //Does this user exist? var account = _accounts.FirstOrDefault(x => string.Equals(x.Username, username) && string.Equals(x.Domain, apiDomain)); var exists = account != null; account = account ?? new GitHubAccount { Username = username }; account.OAuth = token.AccessToken; account.AvatarUrl = info.Data.AvatarUrl; account.Domain = apiDomain; account.WebDomain = requestDomain; client.Username = username; if (exists) { _accounts.Update(account); } else { _accounts.Insert(account); } return(new LoginData { Client = client, Account = account }); }