You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

UserService.cs 2.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. namespace Diligent.WebAPI.Business.Services
  2. {
  3. public class UserService : IUserService
  4. {
  5. private readonly AuthorizationSettings _authSettings;
  6. public UserService(IOptions<AuthorizationSettings> authSettings)
  7. {
  8. _authSettings = authSettings.Value;
  9. }
  10. // User list for testing
  11. private readonly List<User> _users = new List<User>
  12. {
  13. new User { Id = 1, FirstName = "Test", LastName = "User", Username = "test", Password = "test" }
  14. };
  15. public AuthenticateResponseDto? Authenticate(AuthenticateRequestDto model)
  16. {
  17. var user = _users.SingleOrDefault(x => x.Username == model.Username && x.Password == model.Password);
  18. // return null if user not found
  19. if (user == null)
  20. return null;
  21. // authentication successful so generate jwt token
  22. var token = GenerateJwtToken(user);
  23. return new AuthenticateResponseDto
  24. {
  25. Id = user.Id,
  26. Username = user.Username,
  27. FirstName = user.FirstName,
  28. LastName = user.LastName,
  29. Token = token
  30. };
  31. }
  32. public IEnumerable<User> GetAll()
  33. {
  34. return _users;
  35. }
  36. public User? GetById(int id)
  37. {
  38. return _users.FirstOrDefault(x => x.Id == id);
  39. }
  40. private string GenerateJwtToken(User user)
  41. {
  42. // generate token that is valid for 7 days
  43. var tokenHandler = new JwtSecurityTokenHandler();
  44. var key = Encoding.ASCII.GetBytes(_authSettings.Secret);
  45. var tokenDescriptor = new SecurityTokenDescriptor
  46. {
  47. Subject = new ClaimsIdentity(new[] { new Claim("id", user.Id.ToString()) }),
  48. Expires = DateTime.UtcNow.AddMinutes(2),
  49. SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
  50. };
  51. var token = tokenHandler.CreateToken(tokenDescriptor);
  52. return tokenHandler.WriteToken(token);
  53. }
  54. }
  55. }