using PyroFetes.DTO.Login.Request; using PyroFetes.DTO.Login.Response; using PasswordGenerator; namespace PyroFetes.Endpoints.Login; using FastEndpoints; public class CreateLoginEndpoint(PyroFetesDbContext database) : Endpoint //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 } }