diff --git a/app.js b/app.js index 0046875078c7bbb2d4b9cf1f75b7b04302520570..a82e0d468037dd72bfe8e5137b147e5daf4ea5e5 100644 --- a/app.js +++ b/app.js @@ -6,6 +6,7 @@ const auth = require('./controller/AuthController.js'); const bodyParser = require('body-parser'); const cookieParser = require('cookie-parser'); const bcrypt = require('bcrypt'); +const { createHash, randomBytes } = require('crypto'); @@ -40,30 +41,46 @@ app.get("/signup" , (req ,res)=>{ res.render("signup", { title: 'Inscription' }); }); -const saltRounds = 10; +function generateRandomSalt() { + return randomBytes(16).toString('hex'); +} + app.post('/signup', async (req, res) => { try { - // Récupère les données du formulaire - const { username, email, password } = req.body; + const { username, email, password } = req.body; - // hasher le passWord - const hashedPassword = await bcrypt.hash(password, saltRounds); + // Générer un sel aléatoire + const salt = generateRandomSalt(); - // Insère les données dans la base de données - await db.insert('users', { username, email, password:hashedPassword }); + // Concaténer le mot de passe avec le sel et hacher le tout + const passwordToHash = salt + password; + const hashedPassword = createHash('sha256').update(passwordToHash).digest('hex'); - //res.send('Inscription réussie'); - res.redirect("/login"); + // Insérer les données dans la base de données avec le sel et le mot de passe haché + await db.insert('users', { username, email, salt, password: hashedPassword }); + + // Rediriger vers la page de connexion après l'inscription + res.redirect('/login'); } catch (error) { console.error(error); - res.status(500).send('Erreur lors de l\'inscription'); + res.status(500).send("Erreur lors de l'inscription"); } - }); + +// route pour logout +app.post('/logout', function(req, res) { + res.clearCookie('accessToken'); // Assurez-vous que le nom du cookie est correct + res.redirect('/accueil'); +}); + + //route pour document -app.get("/document" , (req ,res)=>{ - res.render("document", { title: 'doc' }); +app.get("/document", (req, res) => { + if (!res.locals.user) { + return res.redirect("/login"); // Redirige vers la page de connexion si l'utilisateur n'est pas connecté + } + res.render("document", { title: 'Créer un Document' }); }); @@ -95,15 +112,25 @@ async function dbAdmin(req, res){ } async function postLogin(req, res){ - let { username, password } = req.body; - let token = await auth.checkLogin(username, password); - if (token == -1) { - res.render("login",{username, password, error: "Il semblerait que le nom d'utilisateur ou le mot de passe soit incorrect."}); - } else { - res.cookie("accessToken", token, {httpOnly: true}); - res.redirect("/accueil"); + const { username, password } = req.body; + + try { + let token = await auth.checkLogin(username, password); + if (token == -1) { + // Si l'authentification échoue + res.render("login", { error: "Il semblerait que le nom d'utilisateur ou le mot de passe soit incorrect." }); + } else { + // Si l'authentification réussit + res.cookie("accessToken", token, { httpOnly: true }); + res.redirect("/accueil"); + } + } catch (error) { + console.error(error); + res.status(500).send('Erreur lors de la connexion'); } } + + module.exports = app; \ No newline at end of file diff --git a/views/index.ejs b/views/index.ejs index b3a1e8a6468a37c45eb7a686115efd0200927b63..8e182f485ea8e9f1fb7c8a510f4615d5da7afe4f 100644 --- a/views/index.ejs +++ b/views/index.ejs @@ -1,24 +1,34 @@ <!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Accueil</title> - <link rel="stylesheet" href="/css/style.css"> - </head> - <body> - <div class="home-container"> - <h1>Bienvenue sur Notre Application de Tableur</h1> - <p>Organisez vos données efficacement et en toute simplicité.</p> +<html lang="fr"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>Accueil</title> + <link rel="stylesheet" href="/css/style.css"> +</head> +<body> + <div class="home-container"> + <h1>Bienvenue sur Notre Application de Tableur</h1> + <p>Organisez vos données efficacement et en toute simplicité.</p> + <% if (locals.user) { %> + <p>Bonjour, <%= locals.user.username %>!</p> + <div class="button-container"> + <a href="/document" class="button">Créer un Document</a> + <form action="/logout" method="post" style="display: inline;"> + <button type="submit" class="button">Se Déconnecter</button> + </form> + </div> + <% } else { %> <div class="button-container"> <a href="/login" class="button">Se Connecter</a> <a href="/signup" class="button">S'inscrire</a> </div> - </div> + <% } %> + </div> - <script> - // JavaScript pour d'autres interactions si nécessaire - </script> - </body> -</html> \ No newline at end of file +<script> +// JavaScript pour d'autres interactions si nécessaire +</script> +</body> +</html> diff --git a/views/login.ejs b/views/login.ejs index afaf4f091cde526fd9ffe8176b9f3e6d3f57025f..8d9d864985af141d41bb43828e6d3480fba45681 100644 --- a/views/login.ejs +++ b/views/login.ejs @@ -10,7 +10,7 @@ <h1>Connexion</h1> <form action="/login" method="post"> <input type="text" name="username" value="<%= locals.username ?? '' %>"> - <input type="password" name="password" value="<%= locals.password ?? '' %>"> + <input type="password" name="password" placeholder="Mot de passe"> <input type="submit" class="button" value="Se connecter"> </form> <% if (locals.error) {%> diff --git a/views/partials/header.ejs b/views/partials/header.ejs index 198f0c617ecfdcfc721126d05b815cc36b51c8af..0a58c8c5815abe346721d276e987a623b4b9ad2f 100644 --- a/views/partials/header.ejs +++ b/views/partials/header.ejs @@ -1,5 +1,15 @@ +<header> + <!-- Contenu de l'en-tête ici --> + - <header> - <!-- Contenu de ton en-tête ici --> - <p>this is header</p> - </header> + <p>this is header</p> + + <% if (locals.user) { %> + <div class="main-content"> + Bonjour, <%= locals.user.username %>! + <form action="/logout" method="post"> + <button type="submit">Se Déconnecter</button> + </form> + </div> + <% } %> +</header>