Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

RefreshCommand.cs 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using BlackRock.Reporting.API.Authentication;
  2. using BlackRock.Reporting.API.Core.Models;
  3. using BlackRock.Reporting.API.Mediator.AuthenticationMediator.Models;
  4. using BlackRock.Reporting.API.Mediator.UserMediator.Model;
  5. using MediatR;
  6. using Microsoft.AspNetCore.Identity;
  7. namespace BlackRock.Reporting.API.Mediator.AuthenticationMediator.Commands
  8. {
  9. public class RefreshCommand : CredentialsCommand, IRequest<Result<CredentialsCommand>>
  10. {
  11. }
  12. public class RefreshCommandHandlers : IRequestHandler<RefreshCommand, Result<CredentialsCommand>>
  13. {
  14. private readonly ILogger<RefreshCommand> logger;
  15. private readonly JwtManager jwtManager;
  16. private readonly RefreshTokenManager refreshTokenManager;
  17. private readonly UserManager<ApplicationUser> userManager;
  18. public RefreshCommandHandlers(ILogger<RefreshCommand> logger, JwtManager jwtManager, RefreshTokenManager refreshTokenManager, UserManager<ApplicationUser> userManager)
  19. {
  20. this.logger = logger;
  21. this.jwtManager = jwtManager;
  22. this.refreshTokenManager = refreshTokenManager;
  23. this.userManager = userManager;
  24. }
  25. public async Task<Result<CredentialsCommand>> Handle(RefreshCommand command, CancellationToken cancellationToken)
  26. {
  27. if (command is null)
  28. throw new ArgumentException($"Parameter {nameof(command)} must not be null");
  29. try
  30. {
  31. var userName = jwtManager.GetUserName(command.JwtToken);
  32. var user = await userManager.FindByNameAsync(userName);
  33. if (!(await refreshTokenManager.ValidateRefreshToken(user, command.RefreshToken)))
  34. throw new UnauthorizedAccessException("Invalid token");
  35. var token = jwtManager.GenerateToken(userName);
  36. if (token == null)
  37. throw new UnauthorizedAccessException("Token is not valid");
  38. return new Result<CredentialsCommand>
  39. {
  40. Data = new CredentialsCommand
  41. {
  42. JwtToken = token,
  43. RefreshToken = command.RefreshToken
  44. }
  45. };
  46. }
  47. catch (Exception ex)
  48. {
  49. logger.LogError(ex, "Faild to add data to DB.");
  50. return new Result<CredentialsCommand> { IsSuccess = false, Error = "Faild to add data to DB." };
  51. }
  52. }
  53. }
  54. }