diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/routes.js | 77 | ||||
| -rw-r--r-- | src/routes/event.ts | 70 | 
2 files changed, 70 insertions, 77 deletions
diff --git a/src/routes.js b/src/routes.js index 9eedfb5..3d6902f 100755 --- a/src/routes.js +++ b/src/routes.js @@ -761,83 +761,6 @@ router.post("/attendevent/:eventID", async (req, res) => {          });  }); -router.post("/unattendevent/:eventID", (req, res) => { -    const removalPassword = req.body.removalPassword; -    // Don't allow blank removal passwords! -    if (!removalPassword) { -        return res.sendStatus(500); -    } - -    Event.updateOne( -        { id: req.params.eventID }, -        { $pull: { attendees: { removalPassword } } }, -    ) -        .then((response) => { -            addToLog( -                "unattendEvent", -                "success", -                "Attendee removed self from event " + req.params.eventID, -            ); -            if (sendEmails) { -                if (req.body.attendeeEmail) { -                    req.app.get("hbsInstance").renderView( -                        "./views/emails/unattendEvent/unattendEventHtml.handlebars", -                        { -                            eventID: req.params.eventID, -                            siteName, -                            siteLogo, -                            domain, -                            cache: true, -                            layout: "email.handlebars", -                        }, -                        function (err, html) { -                            const msg = { -                                to: req.body.attendeeEmail, -                                from: { -                                    name: siteName, -                                    email: contactEmail, -                                }, -                                subject: `${siteName}: You have been removed from an event`, -                                html, -                            }; -                            switch (mailService) { -                                case "sendgrid": -                                    sgMail.send(msg).catch((e) => { -                                        console.error(e.toString()); -                                        res.status(500).end(); -                                    }); -                                    break; -                                case "nodemailer": -                                    nodemailerTransporter -                                        .sendMail(msg) -                                        .catch((e) => { -                                            console.error(e.toString()); -                                            res.status(500).end(); -                                        }); -                                    break; -                            } -                        }, -                    ); -                } -            } -            res.writeHead(302, { -                Location: "/" + req.params.eventID, -            }); -            res.end(); -        }) -        .catch((err) => { -            res.send("Database error, please try again :("); -            addToLog( -                "removeEventAttendee", -                "error", -                "Attempt to remove attendee from event " + -                req.params.eventID + -                " failed with error: " + -                err, -            ); -        }); -}); -  // this is a one-click unattend that requires a secret URL that only the person who RSVPed over  // activitypub knows  router.get("/oneclickunattendevent/:eventID/:attendeeID", (req, res) => { diff --git a/src/routes/event.ts b/src/routes/event.ts index ad77052..3595e0a 100644 --- a/src/routes/event.ts +++ b/src/routes/event.ts @@ -642,4 +642,74 @@ router.post(      },  ); +router.delete( +    "/event/attendee/:eventID", +    async (req: Request, res: Response) => { +        const removalPassword = req.query.p; +        if (!removalPassword) { +            return res +                .status(400) +                .json({ error: "Please provide a removal password." }); +        } +        try { +            const response = await Event.findOne({ +                id: req.params.eventID, +                "attendees.removalPassword": removalPassword, +            }); +            if (!response) { +                return res.status(404).json({ +                    error: "No attendee found with that removal password.", +                }); +            } +            const attendee = response?.attendees?.find( +                (a) => a.removalPassword === removalPassword, +            ); +            if (!attendee) { +                return res.status(404).json({ +                    error: "No attendee found with that removal password.", +                }); +            } +            const attendeeEmail = attendee.email; +            const removalResponse = await Event.updateOne( +                { id: req.params.eventID }, +                { $pull: { attendees: { removalPassword } } }, +            ); +            if (removalResponse.nModified === 0) { +                return res.status(404).json({ +                    error: "No attendee found with that removal password.", +                }); +            } +            addToLog( +                "unattendEvent", +                "success", +                `Attendee removed self from event ${req.params.eventID}`, +            ); +            if (attendeeEmail && req.app.locals.sendEmails) { +                await sendEmailFromTemplate( +                    attendeeEmail, +                    "You have been removed from an event", +                    "unattendEvent", +                    { +                        eventID: req.params.eventID, +                        siteName: res.locals.config?.general.site_name, +                        siteLogo: res.locals.config?.general.email_logo_url, +                        domain: res.locals.config?.general.domain, +                    }, +                    req, +                ); +            } +            res.sendStatus(200); +        } catch (e) { +            addToLog( +                "removeEventAttendee", +                "error", +                `Attempt to remove attendee from event ${req.params.eventID} failed with error: ${e}`, +            ); +            return res.status(500).json({ +                error: "There has been an unexpected error. Please try again.", +            }); +        } +    }, +); +  export default router;  | 
