summaryrefslogtreecommitdiff
path: root/src/routes/event.ts
diff options
context:
space:
mode:
authorRaphael <mail@raphaelkabo.com>2024-05-26 16:04:16 +0100
committerGitHub <noreply@github.com>2024-05-26 16:04:16 +0100
commit53288fa3df3f828e99eaba679d436e65def2deb4 (patch)
tree69c3fa5464d6f2657bef909c4f9bd057fee3dedb /src/routes/event.ts
parent6f0721686aea7647554ad0f3ee4f6099bff4ef58 (diff)
parentde518b4d2510980750d9c54eda3b0e0fe8d73ecd (diff)
Merge pull request #146 from lowercasename/rk/unattend-email-link
Unattend events from RSVP email
Diffstat (limited to 'src/routes/event.ts')
-rw-r--r--src/routes/event.ts42
1 files changed, 42 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;