public async Task <IActionResult> GoogleExternalLogin([FromBody] ExternalAuthenticationRequestModel externalAuth)
        {
            var payload = await _jwtHandler.VerifyGoogleToken(externalAuth);

            if (payload == null)
            {
                return(Unauthorized("Invalid External Authentication."));
            }

            var user = await signUserWithExternal(payload.Subject, payload.Name, payload.Email, externalAuth.Provider);

            if (user == null)
            {
                return(StatusCode(401, new AuthenticationResponseModel {
                    ErrorMessage = "Authentication error"
                }));
            }
            if (user.IsBanned)
            {
                return(StatusCode(401, new AuthenticationResponseModel {
                    ErrorMessage = "User is banned"
                }));
            }

            var tokens = await _jwtHandler.GenerateTokensForUser(user);

            return(Ok(new AuthenticationResponseModel {
                IsAuthSuccessful = true, Tokens = tokens
            }));
        }
        public async Task <GoogleJsonWebSignature.Payload> VerifyGoogleToken(ExternalAuthenticationRequestModel externalAuth)
        {
            try
            {
                var settings = new GoogleJsonWebSignature.ValidationSettings()
                {
                    Audience = new List <string>()
                    {
                        _goolgeSettings.GetSection("clientId").Value
                    }
                };
                var payload = await GoogleJsonWebSignature.ValidateAsync(externalAuth.IdToken, settings);

                return(payload);
            }
            catch
            {
                return(null);
            }
        }