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

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