1const { db } = require("./db");
2
3const validateInviteToken = async (req, res, next) => {
4 const isFirstUser = db.query("SELECT 1 FROM users LIMIT 1").get() === null;
5
6 if (isFirstUser) {
7 req.isFirstUser = true;
8 next();
9 return;
10 }
11
12 const token = req.query.token;
13
14 if (!token) {
15 return res.render("register", {
16 message: "this instance requires an invite",
17 isDisabled: true,
18 });
19 }
20
21 const invite = db
22 .query("SELECT * FROM invites WHERE token = $token")
23 .get({ token });
24
25 if (!invite) {
26 return res.render("register", {
27 message: "this invite token is invalid",
28 isDisabled: true,
29 });
30 }
31
32 if (invite.usedAt) {
33 return res.render("register", {
34 message: "this invite has been claimed",
35 isDisabled: true,
36 });
37 }
38
39 req.invite = invite;
40 next();
41};
42
43module.exports = {
44 validateInviteToken,
45};