| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- 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 LoginCommand : IRequest<Result<CredentialsCommand>>
- {
- public string Username { get; set; }
- public string Password { get; set; }
- }
-
- public class LoginCommandHandlers : IRequestHandler<LoginCommand, Result<CredentialsCommand>>
- {
- private readonly ILogger<LoginCommand> logger;
- private readonly IJwtManager jwtManager;
- private readonly IRefreshTokenManager refreshTokenManager;
- private readonly UserManager<ApplicationUser> userManager;
-
- public LoginCommandHandlers(ILogger<LoginCommand> logger, IJwtManager jwtManager, IRefreshTokenManager refreshTokenManager, UserManager<ApplicationUser> userManager)
- {
- this.logger = logger;
- this.jwtManager = jwtManager;
- this.refreshTokenManager = refreshTokenManager;
- this.userManager = userManager;
- }
- public async Task<Result<CredentialsCommand>> Handle(LoginCommand command, CancellationToken cancellationToken)
- {
- if (command is null)
- throw new ArgumentException($"Parameter {nameof(command)} must not be null");
-
- try
- {
- var user = await userManager.FindByNameAsync(command.Username);
- if (user != null && await userManager.CheckPasswordAsync(user, command.Password))
- {
- var token = jwtManager.GenerateToken(command.Username);
- await refreshTokenManager.RemoveRefreshToken(user);
- var refreshToken = await refreshTokenManager.GenerateRefreshToken(user);
- return new Result<CredentialsCommand>
- {
- Data = new CredentialsCommand
- {
- RefreshToken = refreshToken,
- JwtToken = token
- }
- };
- }
- return new Result<CredentialsCommand>
- {
- IsSuccess = false,
- Error = "Invalid username and password"
- };
- }
- catch (Exception ex)
- {
- logger.LogError(ex, "Faild login");
- return new Result<CredentialsCommand> { IsSuccess = false, Error = "Faild login." };
- }
- }
- }
- }
|