25 lines
849 B
C#
25 lines
849 B
C#
using Distribution.Features.User;
|
|
using Distribution.Infra.Auth;
|
|
using Microsoft.AspNetCore.Identity;
|
|
|
|
namespace Distribution.Features.Auth;
|
|
|
|
public class AuthService(IUserRepository userRepo, IJwtTokenService tokenService)
|
|
{
|
|
private readonly PasswordHasher<Models.User> _hasher = new();
|
|
|
|
public async Task<LoginResponse?> LoginAsync(LoginRequest request)
|
|
{
|
|
var user = await userRepo.GetByUsernameAsync(request.Username);
|
|
if (user is null || !user.IsActive)
|
|
return null;
|
|
|
|
var result = _hasher.VerifyHashedPassword(user, user.PasswordHash, request.Password);
|
|
if (result == PasswordVerificationResult.Failed)
|
|
return null;
|
|
|
|
var token = tokenService.GenerateToken(user);
|
|
return new LoginResponse(token, user.Id, user.Username, user.Role?.Name ?? string.Empty);
|
|
}
|
|
}
|