diff --git a/Back-end/keystore.jceks b/Back-end/keystore.jceks new file mode 100644 index 0000000..1f4ee58 Binary files /dev/null and b/Back-end/keystore.jceks differ diff --git a/Back-end/keystore.jceks.old b/Back-end/keystore.jceks.old new file mode 100644 index 0000000..f00730b Binary files /dev/null and b/Back-end/keystore.jceks.old differ diff --git a/Back-end/pom.xml b/Back-end/pom.xml index af8af27..2b51981 100644 --- a/Back-end/pom.xml +++ b/Back-end/pom.xml @@ -87,6 +87,12 @@ bcrypt 0.9.0 + + io.vertx + vertx-auth-jwt + 4.5.13 + + 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 6a8bae1..50b00d3 100644 --- a/Back-end/src/main/java/com/example/starter/MainVerticle.java +++ b/Back-end/src/main/java/com/example/starter/MainVerticle.java @@ -13,15 +13,31 @@ import io.vertx.core.Promise; import io.vertx.ext.web.Router; import io.vertx.ext.web.RoutingContext; import at.favre.lib.crypto.bcrypt.BCrypt; +import io.vertx.ext.auth.jwt.JWTAuth; +import io.vertx.ext.auth.jwt.JWTAuthOptions; +import io.vertx.ext.auth.KeyStoreOptions; +import io.vertx.ext.auth.authentication.TokenCredentials; +import io.vertx.ext.web.handler.JWTAuthHandler; + public class MainVerticle extends AbstractVerticle { private DatabaseService databaseService; private Router router; // Déclaration du router en variable de classe + private JWTAuth jwtAuth; // Déclaration au niveau de la classe + @Override public void start(Promise startPromise) throws Exception { databaseService = new DatabaseService(vertx); + + this.jwtAuth = JWTAuth.create(vertx, new JWTAuthOptions() + .setKeyStore(new KeyStoreOptions() + .setPath("keystore.jceks") + .setPassword("secret"))); + + + // Initialisation du router router = Router.router(vertx); @@ -41,6 +57,8 @@ public class MainVerticle extends AbstractVerticle { router.get("/objet").handler(this::getParticularObject); router.post("/signup").handler(this::handleSignup); // Route pour l'inscription router.post("/login").handler(this::handleLogin); // Route pour la connexion + // Protéger toutes les routes commençant par "/api/" + router.route("/api/*").handler(JWTAuthHandler.create(jwtAuth)); // Création du serveur HTTP vertx.createHttpServer() @@ -54,6 +72,8 @@ public class MainVerticle extends AbstractVerticle { throwable.printStackTrace(); startPromise.fail(throwable); }); + + } // Récupération des objets @@ -173,6 +193,7 @@ public class MainVerticle extends AbstractVerticle { }); } + //Méthode de ocnnexion private void handleLogin(RoutingContext context) { JsonObject body = context.body().asJsonObject(); @@ -213,9 +234,15 @@ public class MainVerticle extends AbstractVerticle { BCrypt.Result verification = BCrypt.verifyer().verify(password.toCharArray(), storedHashedPassword); if (verification.verified) { - context.response() + System.out.println("Connexion réussi"); + //Génération du token JWT + JsonObject claims = new JsonObject().put("sub",email).put("role", "user"); + String token = jwtAuth.generateToken(claims); + + context.response() .setStatusCode(200) - .end(new JsonObject().put("message", "Connexion réussie").encode()); + .end(new JsonObject().put("token", token).encode()); + } else { context.response() .setStatusCode(401) diff --git a/Front-end/src/pages/Login.jsx b/Front-end/src/pages/Login.jsx index 5c2d30b..ebc3102 100644 --- a/Front-end/src/pages/Login.jsx +++ b/Front-end/src/pages/Login.jsx @@ -35,10 +35,9 @@ function Login() { throw new Error(data.error || "Erreur lors de la connexion"); } - alert("Connexion réussie !"); + localStorage.setItem("token", data.token); + navigate("/"); - // Redirection vers la page d'accueil après une connexion réussie - navigate("/home"); // Remplace "/home" par l'URL de ta page d'accueil } catch (error) { alert(error.message); }