Exemplo n.º 1
0
        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");
        }
Exemplo n.º 2
0
        public async Task <AuthTokenResponse> Handle(string channalId, UserNamePayload responseUser)
        {
            return(await CreateUser(channalId, responseUser));



            throw new ValidationException("invalid token");
        }
Exemplo n.º 3
0
        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);
            }
        }