summaryrefslogtreecommitdiff
path: root/src/routes/frontend.ts
diff options
context:
space:
mode:
authorRaphael Kabo <raphaelkabo@hey.com>2024-02-25 17:56:25 +0000
committerRaphael Kabo <raphaelkabo@hey.com>2024-02-25 17:56:25 +0000
commitcd0f291eb1a608589fcc2c1875fa7099ed8e2c51 (patch)
tree05b1d8b1d63baed174883cc96807051e530969a2 /src/routes/frontend.ts
parentb17238eb2840553c69fc2dae168be557afbcee9c (diff)
feat: optionally restrict event creation to specific emails
Diffstat (limited to 'src/routes/frontend.ts')
-rw-r--r--src/routes/frontend.ts32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/routes/frontend.ts b/src/routes/frontend.ts
index 8ddfbf6..0d8793a 100644
--- a/src/routes/frontend.ts
+++ b/src/routes/frontend.ts
@@ -10,6 +10,7 @@ import {
acceptsActivityPub,
activityPubContentType,
} from "../lib/activitypub.js";
+import MagicLink from "../models/MagicLink.js";
const config = getConfig();
@@ -19,9 +20,40 @@ router.get("/", (_: Request, res: Response) => {
});
router.get("/new", (_: Request, res: Response) => {
+ if (config.general.creator_email_addresses?.length) {
+ return res.render("createEventMagicLink", frontendConfig());
+ }
+ return res.render("newevent", {
+ title: "New event",
+ ...frontendConfig(),
+ });
+});
+
+router.get("/new/:magicLinkToken", async (req: Request, res: Response) => {
+ // If we don't have any creator email addresses, we don't need to check the magic link
+ // so we can just redirect to the new event page
+ if (!config.general.creator_email_addresses?.length) {
+ return res.redirect("/new");
+ }
+ const magicLink = await MagicLink.findOne({
+ token: req.params.magicLinkToken,
+ expiryTime: { $gt: new Date() },
+ permittedActions: "createEvent",
+ });
+ if (!magicLink) {
+ return res.render("createEventMagicLink", {
+ ...frontendConfig(),
+ message: {
+ type: "danger",
+ text: "This magic link is invalid or has expired. Please request a new one here.",
+ },
+ });
+ }
res.render("newevent", {
title: "New event",
...frontendConfig(),
+ magicLinkToken: req.params.magicLinkToken,
+ creatorEmail: magicLink.email,
});
});