Files
PyroFetes-Sujet1/PyroFetes/Endpoints/Login/CreateLoginEndpoint.cs
2025-11-05 22:38:55 +01:00

44 lines
1.7 KiB
C#

using PyroFetes.DTO.Login.Request;
using PyroFetes.DTO.Login.Response;
using PasswordGenerator;
namespace PyroFetes.Endpoints.Login;
using FastEndpoints;
public class CreateLoginEndpoint(PyroFetesDbContext database) : Endpoint<CreateLoginDto, GetLoginDto> //Instanciation d'une connexion à la bdd dans un endpoint, utilise l'élément de requête CreateLoginDto et l'élement de réponse GetLoginDto
{
public override void Configure() //Configuration de l'endpoint
{
Post("/api/logins"); //Créer un login
AllowAnonymous(); //Autorise l'accès sans authentification
}
public override async Task HandleAsync(CreateLoginDto req, CancellationToken ct)
{
string? salt = new Password().IncludeLowercase().IncludeUppercase().IncludeNumeric().LengthRequired(24).Next();
var login = new Models.Login() //Création d'un nom, prénom, mot de passe et un salt rentré par l'utilisateur
{
Username = req.Username,
FullName = req.FullName,
Password = BCrypt.Net.BCrypt.HashPassword(req.Password + salt),
Salt = salt
};
database.Logins.Add(login); //Ajout du login à la bdd
await database.SaveChangesAsync(ct); //Sauvegarde du login dans la bdd
// Pour renvoyer une erreur : Send.StringAsync("Le message d'erreur", 400);
GetLoginDto responseDto = new() //renvoie l'id, nom, prénom, mot de passe et un salt
{
Id = login.Id,
Username = login.Username,
FullName = login.FullName,
Password = login.Password,
Salt = login.Salt
};
await Send.OkAsync(responseDto, ct); //Réponse au client
}
}