From 84782a1bbba3170e5dad70b37f59e6a4b40a0705 Mon Sep 17 00:00:00 2001 From: tonircabello Date: Mon, 3 Jun 2024 22:29:34 +0200 Subject: [PATCH] mid-done --- package.json | 2 ++ routes/index.js | 56 +++++++++++++++++++++++++++++++++++++++++++++- views/loged-in.hbs | 2 ++ views/login.hbs | 14 ++++++++++++ views/private.hbs | 1 + views/signup.hbs | 14 ++++++++++++ 6 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 views/loged-in.hbs create mode 100644 views/login.hbs create mode 100644 views/private.hbs create mode 100644 views/signup.hbs diff --git a/package.json b/package.json index 19489d9695..c38a6658dc 100644 --- a/package.json +++ b/package.json @@ -7,10 +7,12 @@ "dev": "nodemon server.js" }, "dependencies": { + "bcrypt": "^5.1.1", "cookie-parser": "^1.4.5", "dotenv": "^8.2.0", "express": "^4.17.1", "hbs": "^4.1.1", + "js": "^0.1.0", "mongoose": "^6.1.2", "morgan": "^1.10.0", "serve-favicon": "^2.5.0" diff --git a/routes/index.js b/routes/index.js index 81c2396ceb..bc92ae007c 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,8 +1,62 @@ const router = require("express").Router(); +const saltRounds = 10 +const bcrypt = require('bcrypt'); /* GET home page */ +const express = require("express"); +const User = require("../models/User.model"); + router.get("/", (req, res, next) => { - res.render("index"); + res.render("../views/index.hbs"); +}); + +router.get("/signup", (req, res, next) => { + res.render("../views/signup.hbs"); }); +router.post("/signup", async (req, res, next) => { + const { username, password } = req.body; + + if (username === "" || password === "") { + return res.status(400).render("../views/signup.hbs", { errorMessage: "All fields are mandatory" }); + } + + try { + const salt = await bcrypt.genSalt(saltRounds); + const hashedPassword = await bcrypt.hash(password, salt); + + await User.create({ username, password: hashedPassword }); + + res.redirect("/login"); + } catch (error) { + next(error); + } +}); + +router.get("/login", (req, res, next) => { + res.render("../views/login"); +}); +router.post("/login", (req, res, next) => { + const { username, password } = req.body; + + User.findOne({ username }) + .then(user => { + bcrypt.compare(password, user.password) + .then(match => { + if (match) { + res.redirect("/loged-in") + } else { + res.status(401).send('Invalid credentials'); + } + }) + .catch(err => next(err)); + }) + .catch(err => next(err)); +}); +router.get("/loged-in", (req, res, next) => { + res.render("../views/loged-in"); +}); +router.get("/private", (req, res, next) => { + res.render("../views/private"); +}); module.exports = router; diff --git a/views/loged-in.hbs b/views/loged-in.hbs new file mode 100644 index 0000000000..88b144ba65 --- /dev/null +++ b/views/loged-in.hbs @@ -0,0 +1,2 @@ +

You are logged in

+ diff --git a/views/login.hbs b/views/login.hbs new file mode 100644 index 0000000000..f9395a8a65 --- /dev/null +++ b/views/login.hbs @@ -0,0 +1,14 @@ +

Login page

+
+
+ + +
+
+ + +
+
+ +
+
\ No newline at end of file diff --git a/views/private.hbs b/views/private.hbs new file mode 100644 index 0000000000..355b8ce116 --- /dev/null +++ b/views/private.hbs @@ -0,0 +1 @@ +

This is private

\ No newline at end of file diff --git a/views/signup.hbs b/views/signup.hbs new file mode 100644 index 0000000000..be84636d05 --- /dev/null +++ b/views/signup.hbs @@ -0,0 +1,14 @@ +

signup page

+
+
+ + +
+
+ + +
+
+ +
+
\ No newline at end of file