aboutsummaryrefslogtreecommitdiff
path: root/src/auth.js
blob: f040a0873c62c183f65e80e99baf835c10774a11 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
const jwt = require("jsonwebtoken");
const { db } = require("./db");
const { JWT_KEY } = require("./");

function authenticateToken(req, res, next) {
	if (!req.cookies || !req.cookies.auth_token) {
		return res.redirect("/login");
	}

	const token = req.cookies.auth_token;

	// If no token, deny access
	if (!token) {
		return res.redirect(
			`/login?redirect=${encodeURIComponent(req.originalUrl)}`,
		);
	}

	try {
		const user = jwt.verify(token, JWT_KEY);
		req.user = user;
		next();
	} catch (error) {
		res.redirect(`/login?redirect=${encodeURIComponent(req.originalUrl)}`);
	}
}

function authenticateAdmin(req, res, next) {
	if (!req.cookies || !req.cookies.auth_token) {
		return res.redirect(
			`/login?redirect=${encodeURIComponent(req.originalUrl)}`,
		);
	}

	const token = req.cookies.auth_token;

	// If no token, deny access
	if (!token) {
		return res.redirect(
			`/login?redirect=${encodeURIComponent(req.originalUrl)}`,
		);
	}

	try {
		const user = jwt.verify(token, JWT_KEY);
		req.user = user;
		const isAdmin = db
			.query("SELECT isAdmin FROM users WHERE id = $id and isAdmin = 1")
			.get({
				id: req.user.id,
			});
		if (isAdmin) {
			next();
		} else {
			res.status(400).send("only admins can invite");
		}
	} catch (error) {
		res.send(`failed to authenticate as admin: ${error}`);
	}
}

module.exports = { authenticateToken, authenticateAdmin };