Skip to content

Commit 20201ab

Browse files
author
Priscila Estevao da Cunha
committed
login route creation and route authentication for administrators
1 parent e1d8985 commit 20201ab

File tree

2 files changed

+54
-35
lines changed

2 files changed

+54
-35
lines changed

src/controllers/projectAdmController.js

+53-13
Original file line numberDiff line numberDiff line change
@@ -4,32 +4,72 @@ const bcrypt = require("bcrypt");
44
const jwt = require("jsonwebtoken");
55
const SECRET = process.env.SECRET;
66

7+
const auth = (req, res) => {
8+
const authHeader = req.get("Authorization");
9+
if (!authHeader) {
10+
return res.status(401).send("You need to include headers.");
11+
}
12+
const token = authHeader.split(" ")[1];
13+
return token;
14+
};
15+
716
const allAdmnistrators = (req, res) => {
8-
projectAdmModel.find((err, administrators) => {
17+
const token = auth(req, res);
18+
jwt.verify(token, SECRET, (err) => {
919
if (err) {
10-
return res.status(424).send({ message: err.message });
20+
return res.status(403).send("Invalid token!");
1121
}
12-
res.status(200).send(administrators);
22+
projectAdmModel.find((err, administrators) => {
23+
if (err) {
24+
return res.status(424).send({ message: err.message });
25+
}
26+
res.status(200).send(administrators);
27+
});
1328
});
1429
};
1530

1631
const createAdministrator = (req, res) => {
17-
const encryptedPassword = bcrypt.hashSync(req.body.password, 10);
18-
req.body.password = encryptedPassword;
19-
const newAdm = new projectAdmModel(req.body);
20-
21-
newAdm.save((err) => {
32+
const token = auth(req, res);
33+
jwt.verify(token, SECRET, (err) => {
2234
if (err) {
23-
return res.status(424).send({ message: err.message });
35+
return res.status(403).send("Invalid token!");
2436
}
25-
res.status(201).send({
26-
message: "Administrator successfully registered!",
27-
administrator: newAdm,
37+
projectAdmModel.findOne({ email: req.body.email }, (email) => {
38+
if (email) {
39+
res.status(409).send("Administrator already registered. Go to login!");
40+
}
41+
const encryptedPassword = bcrypt.hashSync(req.body.password, 10);
42+
req.body.password = encryptedPassword;
43+
const newAdm = new projectAdmModel(req.body);
44+
newAdm.save((err) => {
45+
if (err) {
46+
return res.status(424).send({ message: err.message });
47+
}
48+
res.status(201).send({
49+
message: "Administrator successfully registered!",
50+
administrator: newAdm,
51+
});
52+
});
2853
});
2954
});
3055
};
3156

32-
const login = (req, res) => {};
57+
const login = (req, res) => {
58+
projectAdmModel.findOne({ email: req.body.email }, (err, administrator) => {
59+
if (!administrator) {
60+
return res.status(404).send(`No administrator registered with email ${req.body.email}.`);
61+
}
62+
const validPassword = bcrypt.compareSync(
63+
req.body.password,
64+
administrator.password
65+
);
66+
if (!validPassword) {
67+
return res.status(401).send("Invalid password!");
68+
}
69+
const token = jwt.sign({ email: req.body.email }, SECRET);
70+
return res.status(200).send(token);
71+
});
72+
};
3373

3474
const updateAdministrator = (req, res) => {};
3575

src/routes/projectAdmRoute.js

+1-22
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,8 @@
1-
require("dotenv-safe").config();
21
const express = require("express");
32
const router = express.Router();
43
const controller = require("../controllers/projectAdmController");
54

6-
const authAdm = (req, res, next) => {
7-
const authHeader = req.get("authorization");
8-
if (!authHeader) {
9-
return res.status(401).send("You need to login!");
10-
}
11-
const token = authHeader.split(" ")[1];
12-
jwt.verify(token, SECRET, (err) => {
13-
if (err) {
14-
return res.status(403).send("Invalid token!");
15-
}
16-
projectAdmModel.find((err, administrators) => {
17-
if (err) {
18-
return res.status(424).send({ message: err.message });
19-
}
20-
res.status(200).send(administrators);
21-
});
22-
});
23-
next();
24-
};
25-
26-
router.get("/", authAdm ,controller.allAdmnistrators);
5+
router.get("/",controller.allAdmnistrators);
276
router.post("/", controller.createAdministrator);
287
router.post("/login", controller.login);
298
router.put("/:id", controller.updateAdministrator);

0 commit comments

Comments
 (0)