public async Task <AuthTokenResponse> CheckGoogleAuthToken(string idToken, string channalId) { //var validPayload = await GoogleJsonWebSignature.ValidateAsync(idToken); var youtubeUrl = $"https://www.googleapis.com/youtube/v3/channels?part=snippet&id={channalId}&fields=items%2Fsnippet%2Fthumbnails,items%2Fsnippet%2Ftitle&key={ApiKey}"; var responseUser = await DeserializeOptimizedFromStreamCallAsync <YoutubeThumbResponse>(youtubeUrl); var googleUrl = $"https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token={idToken}"; var responseUserGG = await DeserializeOptimizedFromStreamCallAsync <GoogleUserResponse>(googleUrl); //if (validPayload != null) UserNamePayload userNamePayload = null; if (responseUser.Items.Count > 0) { userNamePayload = new UserNamePayload(responseUser.Items.FirstOrDefault().Snippet.Title, channalId, SocialNetwork.Youtube, responseUser.Items?.Count > 0 ? responseUser.Items[0]?.Snippet?.Thumbnails?.High?.Url : null); } else { userNamePayload = new UserNamePayload(responseUserGG.Name, channalId, SocialNetwork.Youtube, responseUserGG.Picture); } //{ return(await Handle(channalId, userNamePayload)); //} throw new ValidationException("invalid token"); }
public async Task <AuthTokenResponse> Handle(string channalId, UserNamePayload responseUser) { return(await CreateUser(channalId, responseUser)); throw new ValidationException("invalid token"); }
async Task <AuthTokenResponse> CreateUser(string userId, UserNamePayload payload) { // ensure we have a user with the given user name var user = await _userRepository.GetByEmailAsync(userId); // generate refresh token var refreshToken = _authService.GenerateRefreshToken(); //await _userRepository.Update(user); Console.WriteLine($"refreshToken: {refreshToken}"); // generate access token if (user != null) { var token = await _authService.Generate(userId); var authTokenResponse = new AuthTokenResponse { AuthToken = token, RefreshToken = refreshToken, UserDbId = user.Id }; var newToken = new DomainLayer.Entities.AuthToken { Auth = authTokenResponse.AuthToken, Refresh = authTokenResponse.RefreshToken, RefreshExpiredAt = DateTime.UtcNow.AddHours(3) }; user.AuthToken = newToken; await _userRepository.Update(user); if (payload.Thumb != null) { user.AvatarPath = payload.Thumb; user.Name = payload.FirstName; await _userRepository.Update(user); } return(authTokenResponse); } else { var authTokenResponse = new AuthTokenResponse { AuthToken = await _authService.Generate(userId), RefreshToken = refreshToken }; var newToken = new DomainLayer.Entities.AuthToken { Auth = authTokenResponse.AuthToken, Refresh = authTokenResponse.RefreshToken, RefreshExpiredAt = DateTime.UtcNow.AddMinutes(15) }; var networks = new List <NetworkProfile> { new NetworkProfile { Link = payload.Network == SocialNetwork.Vk ? $"https://vk.com/id{userId}" : $"https://youtube.com/channel/{payload.ChannalId}", Title = payload.Network == SocialNetwork.Vk ? "VK" : "Youtube", } }; var newUser = new User { AuthToken = newToken, Email = userId, RegistredAt = DateTime.UtcNow, Name = payload.FirstName, Surname = payload.LastName, SocialNetwork = networks, AvatarPath = payload.Thumb }; await _userRepository.AddAsync(newUser); var savedUser = await _userRepository.GetByEmailAsync(userId); authTokenResponse.UserDbId = savedUser.Id; return(authTokenResponse); } }