| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- using BlackRock.Reporting.API.Authentication;
- using BlackRock.Reporting.API.Core.Models;
- using BlackRock.Reporting.API.Mediator.AuthenticationMediator.Models;
- using BlackRock.Reporting.API.Mediator.UserMediator.Model;
- using MediatR;
- using Microsoft.AspNetCore.Identity;
-
- namespace BlackRock.Reporting.API.Mediator.AuthenticationMediator.Commands
- {
- public class RefreshCommand : CredentialsCommand, IRequest<Result<CredentialsCommand>>
- {
- }
-
- public class RefreshCommandHandlers : IRequestHandler<RefreshCommand, Result<CredentialsCommand>>
- {
- private readonly ILogger<RefreshCommand> logger;
- private readonly JwtManager jwtManager;
- private readonly RefreshTokenManager refreshTokenManager;
- private readonly UserManager<ApplicationUser> userManager;
-
- public RefreshCommandHandlers(ILogger<RefreshCommand> logger, JwtManager jwtManager, RefreshTokenManager refreshTokenManager, UserManager<ApplicationUser> userManager)
- {
- this.logger = logger;
- this.jwtManager = jwtManager;
- this.refreshTokenManager = refreshTokenManager;
- this.userManager = userManager;
- }
- public async Task<Result<CredentialsCommand>> Handle(RefreshCommand command, CancellationToken cancellationToken)
- {
- if (command is null)
- throw new ArgumentException($"Parameter {nameof(command)} must not be null");
-
- try
- {
- var userName = jwtManager.GetUserName(command.JwtToken);
-
- var user = await userManager.FindByNameAsync(userName);
-
- if (!(await refreshTokenManager.ValidateRefreshToken(user, command.RefreshToken)))
- throw new UnauthorizedAccessException("Invalid token");
-
- var token = jwtManager.GenerateToken(userName);
-
- if (token == null)
- throw new UnauthorizedAccessException("Token is not valid");
-
- return new Result<CredentialsCommand>
- {
- Data = new CredentialsCommand
- {
- JwtToken = token,
- RefreshToken = command.RefreshToken
- }
- };
- }
- catch (Exception ex)
- {
- logger.LogError(ex, "Faild to add data to DB.");
- return new Result<CredentialsCommand> { IsSuccess = false, Error = "Faild to add data to DB." };
- }
- }
- }
- }
|