Пример #1
0
        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());
        }
Пример #2
0
        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);
        }