diff options
| author | Bobby <[email protected]> | 2022-05-01 01:02:38 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-05-01 01:02:38 -0400 |
| commit | b0b1938f0e2ae2d159f0a616f8043d0b7f24f2eb (patch) | |
| tree | 71ed919b888e83fb49d619d1ba338dcba43b245c /interface/routes/api | |
| parent | fd8acf8d1b04368763a97d1452565aa71dcc118a (diff) | |
| parent | d527bddaeb3083d2a5ec787626e512eb45d3a967 (diff) | |
| download | Welfare-Schemes-DMQL-b0b1938f0e2ae2d159f0a616f8043d0b7f24f2eb.tar.xz Welfare-Schemes-DMQL-b0b1938f0e2ae2d159f0a616f8043d0b7f24f2eb.zip | |
Merge pull request #4 from luciferreeves/main
Main page changes
Diffstat (limited to 'interface/routes/api')
| -rw-r--r-- | interface/routes/api/index.js | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/interface/routes/api/index.js b/interface/routes/api/index.js new file mode 100644 index 0000000..f21720b --- /dev/null +++ b/interface/routes/api/index.js @@ -0,0 +1,80 @@ +// API for logging in +const express = require("express"); +const router = express.Router(); +const jwt = require("jsonwebtoken"); +const bcyrpt = require("bcryptjs"); +const userController = require("../../controllers/users.controller"); +const { verifyJWT } = require("../../functions"); +require("dotenv").config(); + +router.post("/verify", (req, res) => { + // get token from auth header + const token = req.headers.authorization; + // verify token + const decoded = verifyJWT(token.replace("Bearer ", "")); + if (decoded) { + res.status(200).json({ + message: "Token is valid", + decoded: decoded, + }); + } else { + res.status(401).json({ + message: "Token is invalid", + }); + } +}); + +router.post("/create", (req, res) => { + const { username, password } = req.body; + const saltRounds = 10; + const hash = bcyrpt.hashSync(password, saltRounds); + userController.create(username, hash).then((user) => { + const token = jwt.sign({ id: user.id }, process.env.JWT_SECRET, { + expiresIn: "1h", + }); + res.json({ + token, + user, + }); + }); +}); + +router.post("/login", (req, res) => { + const { username, password } = req.body; + // get user by username + userController.findByUsername(username).then((user) => { + if (!user) { + return res.status(400).json({ + message: "User not found", + }); + } + // check if password is correct + bcyrpt.compare(password, user.password).then((isMatch) => { + if (!isMatch) { + return res.status(400).json({ + message: "Invalid credentials", + }); + } + // generate jwt + const payload = { + id: user.id, + username: user.username, + }; + jwt.sign( + payload, + process.env.JWT_SECRET, + { + expiresIn: 3600, + }, + (err, token) => { + if (err) throw err; + res.json({ + token, + }); + } + ); + }); + }); +}); + +module.exports = router; |
