summaryrefslogtreecommitdiff
path: root/src/routes
diff options
context:
space:
mode:
Diffstat (limited to 'src/routes')
-rw-r--r--src/routes/event.ts42
-rw-r--r--src/routes/frontend.ts2
2 files changed, 44 insertions, 0 deletions
diff --git a/src/routes/event.ts b/src/routes/event.ts
index 3595e0a..1b79f12 100644
--- a/src/routes/event.ts
+++ b/src/routes/event.ts
@@ -6,6 +6,7 @@ import {
generateEditToken,
generateEventID,
generateRSAKeypair,
+ hashString,
} from "../util/generator.js";
import { validateEventData } from "../util/validation.js";
import { addToLog } from "../helpers.js";
@@ -712,4 +713,45 @@ router.delete(
},
);
+// Used to one-click unattend an event from an email.
+router.get(
+ "/event/:eventID/unattend/:removalPasswordHash",
+ async (req: Request, res: Response) => {
+ // Find the attendee by the unattendPasswordHash
+ const event = await Event.findOne({ id: req.params.eventID });
+ if (!event) {
+ return res.redirect("/404");
+ }
+ const attendee = event.attendees?.find(
+ (o) =>
+ hashString(o.removalPassword || "") ===
+ req.params.removalPasswordHash,
+ );
+ if (!attendee) {
+ return res.redirect(`/${req.params.eventID}`);
+ }
+ // Remove the attendee from the event
+ event.attendees = event.attendees?.filter(
+ (o) => o.removalPassword !== attendee.removalPassword,
+ );
+ await event.save();
+ // Send email to the attendee
+ if (req.app.locals.sendEmails && attendee.email) {
+ sendEmailFromTemplate(
+ attendee.email,
+ `You have been removed from ${event.name}`,
+ "unattendEvent",
+ {
+ event,
+ siteName: res.locals.config?.general.site_name,
+ siteLogo: res.locals.config?.general.email_logo_url,
+ domain: res.locals.config?.general.domain,
+ },
+ req,
+ );
+ }
+ return res.redirect(`/${req.params.eventID}?m=unattend`);
+ },
+);
+
export default router;
diff --git a/src/routes/frontend.ts b/src/routes/frontend.ts
index 58128a0..4d977d7 100644
--- a/src/routes/frontend.ts
+++ b/src/routes/frontend.ts
@@ -12,6 +12,7 @@ import {
} from "../lib/activitypub.js";
import MagicLink from "../models/MagicLink.js";
import { getConfigMiddleware } from "../lib/middleware.js";
+import { getMessage } from "../util/messages.js";
const router = Router();
@@ -377,6 +378,7 @@ router.get("/:eventID", async (req: Request, res: Response) => {
image: event.image,
editToken: editingEnabled ? eventEditToken : null,
},
+ message: getMessage(req.query.m as string),
});
}
} catch (err) {