public async Task <IActionResult> GithubLogin([FromBody] OAuthLoginData data) { var tokenInfo = await githubService.GetAccessTokenAsync(data.Code).ConfigureAwait(false); if (string.IsNullOrEmpty(tokenInfo.Error)) { var githubUserInfo = await githubService.GetUserInfoAsync(tokenInfo.AccessToken).ConfigureAwait(false); var githubUser = oAuthService.GetGithubUser(githubUserInfo.Id); if (githubUser == null) { var githubRegistrationData = new GithubRegistrationData { GithubToken = tokenInfo.AccessToken }; githubUser = await registrationService.RegisterViaGithub(githubRegistrationData, githubUserInfo); } var loginResponse = authenticationService.GithubOAuthLogin(githubUser, tokenInfo.AccessToken); if (loginResponse.Success) { return(Ok(loginResponse)); } } return(BadRequest()); }
public async Task <OAuthUser> RegisterViaGithub(GithubRegistrationData data, GithubUserInfo githubUserInfo) { var githubUser = new OAuthUser(); if (!oAuthService.IsGithubUserRegistered(githubUserInfo.Id)) { var user = dbContext.Users.FirstOrDefault(u => u.Email == githubUserInfo.Email); if (user == null) { user = dbContext.Users.Add(new User { UserName = githubUserInfo.Login, Email = githubUserInfo.Email, IsActive = true, ActivationToken = null }).Entity; } githubUser = new OAuthUser { User = user, OAuthId = githubUserInfo.Id, Email = githubUserInfo.Email, Login = githubUserInfo.Login }; dbContext.OAuthUsers.Add(githubUser); await dbContext.SaveChangesAsync(); } return(githubUser); }