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);
}