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 })); }
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)); }
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 })); }