summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRaphael <mail@raphaelkabo.com>2024-03-04 11:35:37 +0000
committerGitHub <noreply@github.com>2024-03-04 11:35:37 +0000
commit6f0721686aea7647554ad0f3ee4f6099bff4ef58 (patch)
tree50b20e89f067ccaf7121037e889881e1af1f6396 /src
parent724df500a009ec5bebe0911c59892058e74dc4e2 (diff)
parentdd55bdf8fac285d3ade31542c65b57c11f061c93 (diff)
Merge pull request #142 from lowercasename/rk/patches-1
Minor patches
Diffstat (limited to 'src')
-rwxr-xr-xsrc/routes.js77
-rw-r--r--src/routes/event.ts70
-rw-r--r--src/routes/frontend.ts7
3 files changed, 73 insertions, 81 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;
diff --git a/src/routes/frontend.ts b/src/routes/frontend.ts
index 51c207a..58128a0 100644
--- a/src/routes/frontend.ts
+++ b/src/routes/frontend.ts
@@ -527,8 +527,7 @@ router.get(
eventGroup: eventGroup._id,
}).sort("start");
const string = exportICal(events, eventGroup.name);
- res.set("Content-Type", "text/calendar");
- res.send(string);
+ res.set("Content-Type", "text/calendar").send(string);
}
} catch (err) {
addToLog(
@@ -550,7 +549,7 @@ router.get("/export/event/:eventID", async (req: Request, res: Response) => {
if (event) {
const string = exportICal([event], event.name);
- res.send(string);
+ res.set("Content-Type", "text/calendar").send(string);
}
} catch (err) {
addToLog(
@@ -576,7 +575,7 @@ router.get(
eventGroup: eventGroup._id,
}).sort("start");
const string = exportICal(events, eventGroup.name);
- res.send(string);
+ res.set("Content-Type", "text/calendar").send(string);
}
} catch (err) {
addToLog(