Files
fiscalos/src/FiscalOS.API/Login/Endpoint.cs
T

45 lines
1.2 KiB
C#
Raw Normal View History

2026-02-01 04:27:06 -06:00
namespace FiscalOS.API.Login;
internal static class Endpoint
{
private const string Route = "/login";
public static RouteHandlerBuilder MapLoginEndpoint(this WebApplication app)
{
return app.MapPost(Route, HandleAsync);
}
2026-02-01 08:07:23 -06:00
private static async Task<IResult> HandleAsync(
HttpContext httpContext,
2026-02-12 13:15:49 -06:00
[FromBody] Request loginRequest,
[FromServices] AppDbContext appDbContext,
[FromServices] IPasswordHasher passwordHasher,
[FromServices] ITokenGenerator tokenService
2026-02-01 08:07:23 -06:00
)
2026-02-01 04:27:06 -06:00
{
2026-02-01 08:07:23 -06:00
var user = await appDbContext.Users.SingleOrDefaultAsync(u => u.Username == loginRequest.Username);
if (user is null)
{
return Results.Unauthorized();
}
var isCorrectPassword = passwordHasher.Verify(loginRequest.Password, user.HashedPassword);
if (isCorrectPassword is false)
{
return Results.Unauthorized();
}
var accessToken = tokenService.GenerateAccessToken(user);
var refreshToken = tokenService.GenerateRefreshToken(user);
user.AddRefreshToken(refreshToken);
await appDbContext.SaveChangesAsync();
httpContext.SetRefreshTokenCookie(refreshToken);
return Results.Ok(Response.From(accessToken));
2026-02-01 04:27:06 -06:00
}
}