diff options
| author | Raphael Kabo <raphaelkabo@hey.com> | 2024-04-21 22:44:22 +0100 | 
|---|---|---|
| committer | Raphael Kabo <raphaelkabo@hey.com> | 2024-05-26 15:55:56 +0100 | 
| commit | de518b4d2510980750d9c54eda3b0e0fe8d73ecd (patch) | |
| tree | 69c3fa5464d6f2657bef909c4f9bd057fee3dedb /src/routes | |
| parent | 6f0721686aea7647554ad0f3ee4f6099bff4ef58 (diff) | |
feat: unattend events from RSVP email
Diffstat (limited to 'src/routes')
| -rw-r--r-- | src/routes/event.ts | 42 | ||||
| -rw-r--r-- | src/routes/frontend.ts | 2 | 
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) {  | 
