Esempio n. 1
0
        public async Task <IActionResult> Signup([FromBody] User sentUser)
        {
            var user = _context.Users.SingleOrDefault(u => u.Email == sentUser.Email);

            if (user != null)
            {
                return(StatusCode(409, Json(sentUser.Email + " already exists.")));
            }

            var refreshToken = _tokenService.GenerateRefreshToken();
            var pass         = _passwordHasher.GenerateIdentityV3Hash(sentUser.Password);
            var jwtToken     = string.Empty;

            try
            {
                var newUser = new User
                {
                    RefreshToken = refreshToken,
                    Username     = sentUser.Username,
                    Email        = sentUser.Email,
                    Password     = pass
                };

                // add to DB
                _context.Users.Add(newUser);
                await _context.SaveChangesAsync();

                _log.LogInformation($"New user was created {newUser.Id}");

                //access Id of newly inserted entity
                var usersClaims = new[]
                {
                    new Claim(ClaimTypes.Name, newUser.Username),
                    new Claim("UserId", newUser.Id)
                };


                jwtToken = _tokenService.GenerateAccessToken(usersClaims);
            }
            catch (Exception ex)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }

            return(new ObjectResult(new
            {
                token = jwtToken,
                refreshToken
            }));
        }
Esempio n. 2
0
        public async Task <IActionResult> Post([FromBody] List <TestQuestion> answers)
        {
            var scores = new List <TestScore>
            {
                new TestScore
                {
                    Score    = GetCategoryScore(answers, "surgency-or-extraversion"),
                    Category = "surgency-or-extraversion"
                },
                new TestScore
                {
                    Score    = GetCategoryScore(answers, "agreeableness"),
                    Category = "agreeableness"
                },
                new TestScore
                {
                    Score    = GetCategoryScore(answers, "conscientiousness"),
                    Category = "conscientiousness"
                },
                new TestScore
                {
                    Score    = GetCategoryScore(answers, "intellect-or-imagination"),
                    Category = "intellect-or-imagination"
                }
            };

            var highest     = scores.OrderByDescending(o => o.Score).FirstOrDefault();
            var description = GetDescription(highest.Category);

            // save result to db
            _context.TestResults.Add(new TestResults
            {
                DateCreated  = DateTime.Now,
                GamerProfile = description,
            });
            await _context.SaveChangesAsync();

            return(Ok(description));
        }
Esempio n. 3
0
        public async Task <IActionResult> Refresh([FromBody] JObject data)
        {
            var token        = data["token"].ToString();
            var refreshToken = data["refreshToken"].ToString();

            var principal  = _tokenService.GetPrincipalFromExpiredToken(token);
            var handler    = new JwtSecurityTokenHandler();
            var tokenAsJwt = handler.ReadToken(token) as JwtSecurityToken;
            var userId     = tokenAsJwt.Claims.First(claim => claim.Type == "UserId").Value;

            var user = _context.Users.SingleOrDefault(u => u.Id == userId);

            //if the user wasn't found or matched the users refresh token the users needs to re-authenticate
            if (user == null || user.RefreshToken != refreshToken)
            {
                return(BadRequest());
            }

            //if the refresh token has expired the user needs to re-authenticate
            if (!_tokenService.Validate(refreshToken))
            {
                return(BadRequest());
            }

            var newJwtToken     = _tokenService.GenerateAccessToken(principal.Claims);
            var newRefreshToken = _tokenService.GenerateRefreshToken();

            user.RefreshToken = newRefreshToken;
            await _context.SaveChangesAsync();

            _log.LogInformation($"Saved new refreshToken for user {user.Id}");

            return(new ObjectResult(new
            {
                token = newJwtToken,
                refreshToken = newRefreshToken
            }));
        }