| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- 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 LogoutCommand : CredentialsCommand, IRequest<Result<bool>>
- {
- }
-
- public class LogoutCommandHandlers : IRequestHandler<LogoutCommand, Result<bool>>
- {
- private readonly ILogger<LogoutCommand> logger;
- private readonly IJwtManager jwtManager;
- private readonly IRefreshTokenManager refreshTokenManager;
- private readonly UserManager<ApplicationUser> userManager;
-
- public LogoutCommandHandlers(ILogger<LogoutCommand> logger, IJwtManager jwtManager, IRefreshTokenManager refreshTokenManager, UserManager<ApplicationUser> userManager)
- {
- this.logger = logger;
- this.jwtManager = jwtManager;
- this.refreshTokenManager = refreshTokenManager;
- this.userManager = userManager;
- }
- public async Task<Result<bool>> Handle(LogoutCommand command, CancellationToken cancellationToken)
- {
- if (command is null)
- throw new ArgumentException($"Parameter {nameof(command)} must not be null");
-
- try
- {
- // this checks is jwt token correct
- var userName = jwtManager.GetUserName(command.JwtToken);
-
- var user = await userManager.FindByNameAsync(userName);
-
- if (!(await refreshTokenManager.ValidateRefreshToken(user, command.RefreshToken)))
- return new Result<bool>
- {
- IsSuccess = false,
- Error = "Invalid token"
- };
- await refreshTokenManager.RemoveRefreshToken(user);
-
- return new Result<bool>
- {
- Data = true
- };
- }
- catch (Exception ex)
- {
- logger.LogError(ex, "Invalid token");
- return new Result<bool>
- {
- IsSuccess = false,
- Error = "Invalid token"
- };
- }
- }
- }
- }
|