diff --git a/Back-end/src/main/java/com/example/starter/MainVerticle.java b/Back-end/src/main/java/com/example/starter/MainVerticle.java index d4ed9d5..6a8bae1 100644 --- a/Back-end/src/main/java/com/example/starter/MainVerticle.java +++ b/Back-end/src/main/java/com/example/starter/MainVerticle.java @@ -40,7 +40,7 @@ public class MainVerticle extends AbstractVerticle { router.get("/objets").handler(this::getObjects); router.get("/objet").handler(this::getParticularObject); router.post("/signup").handler(this::handleSignup); // Route pour l'inscription - router.post("/signup").handler(this::get) + router.post("/login").handler(this::handleLogin); // Route pour la connexion // Création du serveur HTTP vertx.createHttpServer() @@ -171,6 +171,64 @@ public class MainVerticle extends AbstractVerticle { .setStatusCode(500) .end(new JsonObject().put("error", "Erreur d'inscription").encode()); }); + } + + private void handleLogin(RoutingContext context) { + JsonObject body = context.body().asJsonObject(); + + if (body == null) { + context.response() + .setStatusCode(400) + .end(new JsonObject().put("error", "Requête invalide").encode()); + return; + } + + System.out.println("Received login request: " + body.encodePrettily()); + + String email = body.getString("email"); + String password = body.getString("password"); + + if (email == null || password == null) { + context.response() + .setStatusCode(400) + .end(new JsonObject().put("error", "Email et mot de passe requis").encode()); + return; + } + + databaseService.pool + .preparedQuery("SELECT password FROM users WHERE email = ?") // Requête sql qui evite les injections + .execute(Tuple.of(email)) // Remplace le ? par la valeur de l'email + .onSuccess(result -> { //Si la requête s'exécute bien , on obtient le resultat dans result + if (result.rowCount() == 0) { // Cas : Aucun utilisateur trouvé + context.response() + .setStatusCode(401) + .end(new JsonObject().put("error", "Email ou mot de passe incorrect").encode()); + return; + } + + Row row = result.iterator().next(); + String storedHashedPassword = row.getString("password"); + + // Vérification du mot de passe avec BCrypt + BCrypt.Result verification = BCrypt.verifyer().verify(password.toCharArray(), storedHashedPassword); + + if (verification.verified) { + context.response() + .setStatusCode(200) + .end(new JsonObject().put("message", "Connexion réussie").encode()); + } else { + context.response() + .setStatusCode(401) + .end(new JsonObject().put("error", "Email ou mot de passe incorrect").encode()); + } + }) + .onFailure(err -> { + System.err.println("Erreur de connexion : " + err.getMessage()); + context.response() + .setStatusCode(500) + .end(new JsonObject().put("error", "Erreur serveur").encode()); + }); } + }