From 38842eec69be504a59ce60adfe01a6c015c8f9b7 Mon Sep 17 00:00:00 2001 From: sanchezvem Date: Mon, 13 Oct 2025 15:24:17 +0200 Subject: [PATCH] Creating login connect dto --- .../DTO/Login/Response/GetLoginConnectDto.cs | 6 +++ .../Endpoints/Login/UserLoginEndpoint.cs | 43 +++++++++++++------ 2 files changed, 36 insertions(+), 13 deletions(-) create mode 100644 ApiEfCoreLibrary/DTO/Login/Response/GetLoginConnectDto.cs diff --git a/ApiEfCoreLibrary/DTO/Login/Response/GetLoginConnectDto.cs b/ApiEfCoreLibrary/DTO/Login/Response/GetLoginConnectDto.cs new file mode 100644 index 0000000..de62af9 --- /dev/null +++ b/ApiEfCoreLibrary/DTO/Login/Response/GetLoginConnectDto.cs @@ -0,0 +1,6 @@ +namespace ApiEfCoreLibrary.DTO.Login.Response; + +public class GetLoginConnectDto +{ + public string? Token { get; set; } +} \ No newline at end of file diff --git a/ApiEfCoreLibrary/Endpoints/Login/UserLoginEndpoint.cs b/ApiEfCoreLibrary/Endpoints/Login/UserLoginEndpoint.cs index 7cb95ee..d282690 100644 --- a/ApiEfCoreLibrary/Endpoints/Login/UserLoginEndpoint.cs +++ b/ApiEfCoreLibrary/Endpoints/Login/UserLoginEndpoint.cs @@ -1,8 +1,14 @@ using ApiEfCoreLibrary.DTO.Login.Request; +using FastEndpoints.Security; +using ApiEfCoreLibrary.DTO.Login.Response; +using FastEndpoints; +using Microsoft.EntityFrameworkCore; namespace ApiEfCoreLibrary.Endpoints.Login; -public class UserLoginEndpoint + + +public class UserLoginEndpoint(LibraryDbContext database) : Endpoint { public override void Configure() { @@ -12,26 +18,37 @@ public class UserLoginEndpoint public override async Task HandleAsync(ConnectLoginDto req, CancellationToken ct) { - if (await myAuthService.CredentialsAreValid(req.Username, req.Password, ct)) + var login = await database.Logins.SingleOrDefaultAsync(x => x.Username == req.Username, ct); + + if (login == null) + { + await Send.UnauthorizedAsync(ct); + return; + } + + string? password = req.Password + login.Salt; + + if (BCrypt.Net.BCrypt.Verify(password, login.Password)) { var jwtToken = JwtBearer.CreateToken( o => { o.SigningKey = "A secret token signing key"; - o.ExpireAt = DateTime.UtcNow.AddDays(1); - o.User.Roles.Add("Manager", "Auditor"); - o.User.Claims.Add(("UserName", req.Username)); - o.User["UserId"] = "001"; //indexer based claim setting + o.ExpireAt = DateTime.UtcNow.AddMinutes(15); + o.User.Roles.Add("User", "Admin"); + o.User.Claims.Add(("Username", login.Username)); + o.User.Claims.Add(("FullName", login.FullName)); + o.User["UserId"] = "001"; }); - await Send.OkAsync( - new - { - req.Username, - Token = jwtToken - }); + GetLoginConnectDto responseDto = new() + { + Token = jwtToken + }; + + await Send.OkAsync(responseDto, ct); } else - ThrowError("The supplied credentials are invalid!"); + await Send.UnauthorizedAsync(ct); } } \ No newline at end of file