summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorredneckcatholic <redneckcatholic@users.noreply.github.com>2022-11-23 00:02:18 -0500
committerredneckcatholic <redneckcatholic@users.noreply.github.com>2022-11-23 01:22:12 -0500
commitd39734bf3fd84c568c15e90d6edb75e68d74b3e1 (patch)
treebf1820828f450977151bf6dd4cfd12af87a4026c
parente93b23db71df18480b29ed53c1b8247e7f0f83a7 (diff)
Fix event deletion
Append the editToken to the deleteEvent form action to fix the 404 error on event deletion. Refactor broadcastDeleteMessage so that eventDeletion works when federation is disabled. Send deletion emails within the callback, otherwise DB lookup will fail on deleted event id. Fixes #15
-rw-r--r--activitypub.js5
-rwxr-xr-xroutes.js75
-rwxr-xr-xviews/event.handlebars2
3 files changed, 42 insertions, 40 deletions
diff --git a/activitypub.js b/activitypub.js
index 8620e81..442f03c 100644
--- a/activitypub.js
+++ b/activitypub.js
@@ -341,8 +341,11 @@ function broadcastUpdateMessage(apObject, followers, eventID) {
}
function broadcastDeleteMessage(apObject, followers, eventID, callback) {
- if (!isFederated) return;
callback = callback || function () { };
+ if (!isFederated) {
+ callback([]);
+ return;
+ }
// we need to build an array of promises for each message we're sending, run Promise.all(), and then that will resolve when every message has been sent (or failed)
// per spec, each promise will execute *as it is built*, which is fine, we just need the guarantee that they are all done
let promises = [];
diff --git a/routes.js b/routes.js
index 8e0a282..76d20b9 100755
--- a/routes.js
+++ b/routes.js
@@ -1279,47 +1279,46 @@ router.post('/deleteevent/:eventID/:editToken', (req, res) => {
'Location': '/'
});
res.end();
+
+ // Send emails here otherwise they don't exist lol
+ if (sendEmails) {
+ const attendeeEmails = event.attendees.filter(o => o.status === 'attending' && o.email).map(o => o.email);
+ if (attendeeEmails.length) {
+ console.log("Sending emails to: " + attendeeEmails);
+ req.app.get('hbsInstance').renderView('./views/emails/deleteevent.handlebars', { siteName, siteLogo, domain, eventName: event.name, cache: true, layout: 'email.handlebars' }, function (err, html) {
+ const msg = {
+ to: attendeeEmails,
+ from: {
+ name: siteName,
+ email: contactEmail,
+ address: contactEmail
+ },
+ subject: `${siteName}: ${event.name} was deleted`,
+ html,
+ };
+ switch (mailService) {
+ case 'sendgrid':
+ sgMail.sendMultiple(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;
+ }
+ });
+ }
+ else {
+ console.log("Nothing to send!");
+ }
+ }
})
.catch((err) => { res.send('Sorry! Something went wrong (error deleting): ' + err); addToLog("deleteEvent", "error", "Attempt to delete event " + req.params.eventID + " failed with error: " + err); });
});
- // Send emails here otherwise they don't exist lol
- if (sendEmails) {
- Event.findOne({ id: req.params.eventID }).then((event) => {
- const attendeeEmails = event.attendees.filter(o => o.status === 'attending' && o.email).map(o => o.email);
- if (attendeeEmails.length) {
- console.log("Sending emails to: " + attendeeEmails);
- req.app.get('hbsInstance').renderView('./views/emails/deleteevent.handlebars', { siteName, siteLogo, domain, eventName: event.name, cache: true, layout: 'email.handlebars' }, function (err, html) {
- const msg = {
- to: attendeeEmails,
- from: {
- name: siteName,
- email: contactEmail,
- address: contactEmail
- },
- subject: `${siteName}: ${event.name} was deleted`,
- html,
- };
- switch (mailService) {
- case 'sendgrid':
- sgMail.sendMultiple(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;
- }
- });
- }
- else {
- console.log("Nothing to send!");
- }
- });
- }
}
else {
// Token doesn't match
diff --git a/views/event.handlebars b/views/event.handlebars
index ff88ba5..3071b64 100755
--- a/views/event.handlebars
+++ b/views/event.handlebars
@@ -377,7 +377,7 @@
<span aria-hidden="true">&times;</span>
</button>
</div>
- <form id="deleteEventForm" action="/deleteevent/{{eventData.id}}" method="post">
+ <form id="deleteEventForm" action="/deleteevent/{{eventData.id}}/{{eventData.editToken}}" method="post">
<div class="modal-body">
<p>Are you sure you want to delete this event? This action cannot be undone.</p>
</div>