aboutsummaryrefslogtreecommitdiff
path: root/interface/routes/api
diff options
context:
space:
mode:
authorBobby <[email protected]>2022-05-01 01:02:38 -0400
committerGitHub <[email protected]>2022-05-01 01:02:38 -0400
commitb0b1938f0e2ae2d159f0a616f8043d0b7f24f2eb (patch)
tree71ed919b888e83fb49d619d1ba338dcba43b245c /interface/routes/api
parentfd8acf8d1b04368763a97d1452565aa71dcc118a (diff)
parentd527bddaeb3083d2a5ec787626e512eb45d3a967 (diff)
downloadWelfare-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.js80
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;