Example #1
0
        public AuthenticateResponse AuthenticateGoogle(AuthenticateRequestGoogle request)
        {
            if (request == null)
            {
                return(null);
            }

            if (request.Token == null)
            {
                return(null);
            }

            var httpClient = new HttpClient();
            var requestUri = new Uri(string.Format(Constants.GoogleApiTokenInfoUrl, request.Token));

            GoogleTokenInfo tokenInfo;

            try
            {
                HttpResponseMessage httpResponseMessage = httpClient.GetAsync(requestUri).Result;
                if (httpResponseMessage.StatusCode != HttpStatusCode.OK)
                {
                    return(null);
                }

                tokenInfo = JsonConvert.DeserializeObject <GoogleTokenInfo>(httpResponseMessage.Content.ReadAsStringAsync().Result);
            }
            catch (Exception ex)
            {
                return(null);
            }

            if (tokenInfo.aud != Constants.GoogleClientId)
            {
                return(null);
            }

            User user = _context.Users.FirstOrDefault(u => u.Login == tokenInfo.email && u.UserType == UserType.Google);

            if (user == null) //login not found! Create user
            {
                user = new User()
                {
                    Login = tokenInfo.email, UserType = UserType.Google, Email = tokenInfo.email
                };
                _context.Users.Add(user);
                _context.SaveChanges();
            }

            string token = generateJwtToken(user);

            return(new AuthenticateResponse()
            {
                Token = token
            });
        }
        public IActionResult AuthenticateGoogle(AuthenticateRequestGoogle request)
        {
            AuthenticateResponse response = _userService.AuthenticateGoogle(request);

            if (response == null)
            {
                return(BadRequest(new { message = "Bad token!" }));
            }

            return(Ok(response));
        }