From cd7dc9125fff1af5c023d19ac13d368a8fd4c6e5 Mon Sep 17 00:00:00 2001 From: Tom Parker-Shemilt Date: Sat, 28 Dec 2019 11:37:51 +0000 Subject: Add docker/travis support --- .travis.yml | 9 +++++++++ Dockerfile | 7 +++++++ config/database-docker.js | 3 +++ docker-compose.yml | 10 ++++++++++ 4 files changed, 29 insertions(+) create mode 100644 .travis.yml create mode 100644 Dockerfile create mode 100644 config/database-docker.js create mode 100644 docker-compose.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..6feafff --- /dev/null +++ b/.travis.yml @@ -0,0 +1,9 @@ +language: minimal + +services: + - docker + +script: + - docker-compose up --build + - curl -v http://localhost:3000/ + - curl -v http://localhost:3000/new/event/public \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..65b1725 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,7 @@ +FROM node:13-alpine +WORKDIR /app +ADD package.json package-lock.json /app/ +RUN npm install +COPY . /app/ +RUN cp config/api-example.js config/api.js && cp config/database-docker.js config/database.js +CMD npm start diff --git a/config/database-docker.js b/config/database-docker.js new file mode 100644 index 0000000..78a29a8 --- /dev/null +++ b/config/database-docker.js @@ -0,0 +1,3 @@ +module.exports = { + 'url' : 'mongodb://mongo:27017/gathio' // For local MongoDB connection +}; diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..d16e279 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,10 @@ +version: '3' +services: + gathio: + build: . + links: + - mongo + ports: + - 3000:3000 + mongo: + image: mongo:latest \ No newline at end of file -- cgit v1.2.3 From b81fc16224a400cefe789fcbfb0443e25d74b8b9 Mon Sep 17 00:00:00 2001 From: Tom Parker-Shemilt Date: Sat, 28 Dec 2019 11:42:03 +0000 Subject: Run docker compose in background --- .gitignore | 1 + .travis.yml | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index a31f385..1dc3629 100755 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ config/api.js config/database.js public/events/* !public/events/.gitkeep +wait-for-it.sh # Logs logs diff --git a/.travis.yml b/.travis.yml index 6feafff..4bdce21 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,13 @@ -language: minimal +language: shell +os: linux services: - docker script: - - docker-compose up --build + - docker-compose up --build & + - curl https://raw.githubusercontent.com/vishnubob/wait-for-it/9995b721327eac7a88f0dce314ea074d5169634f/wait-for-it.sh -o wait-for-it.sh + - chmod +x wait-for-it.sh + - ./wait-for-it-sh localhost:3000 --timeout=0 - curl -v http://localhost:3000/ - curl -v http://localhost:3000/new/event/public \ No newline at end of file -- cgit v1.2.3 From a3bbcfe3ebd61694304ef5c085a65dadbfa8e206 Mon Sep 17 00:00:00 2001 From: Tom Parker-Shemilt Date: Sat, 28 Dec 2019 12:07:26 +0000 Subject: Make sure travis dies if a step fails --- .travis.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4bdce21..064325f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,9 +5,9 @@ services: - docker script: - - docker-compose up --build & - - curl https://raw.githubusercontent.com/vishnubob/wait-for-it/9995b721327eac7a88f0dce314ea074d5169634f/wait-for-it.sh -o wait-for-it.sh - - chmod +x wait-for-it.sh - - ./wait-for-it-sh localhost:3000 --timeout=0 - - curl -v http://localhost:3000/ - - curl -v http://localhost:3000/new/event/public \ No newline at end of file + - docker-compose up --build& || travis_terminate 1 + - curl https://raw.githubusercontent.com/vishnubob/wait-for-it/9995b721327eac7a88f0dce314ea074d5169634f/wait-for-it.sh -o wait-for-it.sh || travis_terminate 1 + - chmod +x wait-for-it.sh || travis_terminate 1 + - ./wait-for-it-sh localhost:3000 --timeout=0 || travis_terminate 1 + - curl -v http://localhost:3000/ || travis_terminate 1 + - curl -v http://localhost:3000/new/event/public || travis_terminate 1 \ No newline at end of file -- cgit v1.2.3 From ffb5de97b95be9781a3fb4b70d778993b8c8c1e0 Mon Sep 17 00:00:00 2001 From: Tom Parker-Shemilt Date: Sat, 28 Dec 2019 23:10:51 +0000 Subject: Redo Travis testing in a script --- .travis.yml | 7 +------ test.sh | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 6 deletions(-) create mode 100755 test.sh diff --git a/.travis.yml b/.travis.yml index 064325f..cdf8b48 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,9 +5,4 @@ services: - docker script: - - docker-compose up --build& || travis_terminate 1 - - curl https://raw.githubusercontent.com/vishnubob/wait-for-it/9995b721327eac7a88f0dce314ea074d5169634f/wait-for-it.sh -o wait-for-it.sh || travis_terminate 1 - - chmod +x wait-for-it.sh || travis_terminate 1 - - ./wait-for-it-sh localhost:3000 --timeout=0 || travis_terminate 1 - - curl -v http://localhost:3000/ || travis_terminate 1 - - curl -v http://localhost:3000/new/event/public || travis_terminate 1 \ No newline at end of file + - ./test.sh \ No newline at end of file diff --git a/test.sh b/test.sh new file mode 100755 index 0000000..6626437 --- /dev/null +++ b/test.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +set -eux -o pipefail + +cleanup() { + docker-compose kill +} +trap cleanup 0 + +docker-compose up --build & + +while [[ "$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3000/)" -ne "200" ]]; do sleep 5; done +curl -v http://localhost:3000/new/event/public + +cleanup \ No newline at end of file -- cgit v1.2.3 From 4c72d7706b1294e96cbac1e80dcff7f11be74406 Mon Sep 17 00:00:00 2001 From: Tom Parker-Shemilt Date: Sat, 28 Dec 2019 23:11:04 +0000 Subject: Fix comment in Dockerised config --- config/database-docker.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/database-docker.js b/config/database-docker.js index 78a29a8..7847097 100644 --- a/config/database-docker.js +++ b/config/database-docker.js @@ -1,3 +1,3 @@ module.exports = { - 'url' : 'mongodb://mongo:27017/gathio' // For local MongoDB connection + 'url' : 'mongodb://mongo:27017/gathio' // For dockerised MongoDB connection }; -- cgit v1.2.3 From 9ee5d0f4fb7237797b1f6920f1ecfd5bea659977 Mon Sep 17 00:00:00 2001 From: Tom Parker-Shemilt Date: Sat, 28 Dec 2019 23:13:42 +0000 Subject: Don't need wait-for-it anymore --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 1dc3629..a31f385 100755 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,6 @@ config/api.js config/database.js public/events/* !public/events/.gitkeep -wait-for-it.sh # Logs logs -- cgit v1.2.3 From ae5e25d7d8a1edac542adf5e5510105aca76c0d9 Mon Sep 17 00:00:00 2001 From: Tom Parker-Shemilt Date: Tue, 7 Jan 2020 09:33:35 +0000 Subject: Add Travis badge to readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d40c0f0..cfa53d3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # gathio +[![Build Status](https://travis-ci.com/palfrey/gathio.svg?branch=master)](https://travis-ci.com/palfrey/gathio) Self-destructing, shareable, no-registration event pages. -- cgit v1.2.3 From 452c9f42f3769035cdb73e143283eff814de544d Mon Sep 17 00:00:00 2001 From: Tom Parker-Shemilt Date: Tue, 7 Jan 2020 09:43:45 +0000 Subject: Add new config/domain.js setup --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 65b1725..a436239 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,5 +3,5 @@ WORKDIR /app ADD package.json package-lock.json /app/ RUN npm install COPY . /app/ -RUN cp config/api-example.js config/api.js && cp config/database-docker.js config/database.js +RUN cp config/api-example.js config/api.js && cp config/domain-example.js config/domain.js && cp config/database-docker.js config/database.js CMD npm start -- cgit v1.2.3 From 29d1206fb2d165e3e7ba788225903bd566a982e1 Mon Sep 17 00:00:00 2001 From: lowercasename Date: Fri, 10 Jan 2020 19:17:56 +1100 Subject: Updated Travis badge to this repo --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0d33a84..debd336 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # gathio -[![Build Status](https://travis-ci.com/palfrey/gathio.svg?branch=master)](https://travis-ci.com/palfrey/gathio) + +[![Build Status](https://travis-ci.com/lowercasename/gathio.svg?branch=master)](https://travis-ci.com/lowercasename/gathio) Self-destructing, shareable, no-registration event pages. @@ -7,4 +8,4 @@ You can use the publicly hosted version [here](https://gath.io). # Installation -See [the wiki](https://github.com/lowercasename/gathio/wiki/install) +See [the Wiki](https://github.com/lowercasename/gathio/wiki/install) for installation instructions. -- cgit v1.2.3 From f2765abbee6001759f74f6c9e1161d2f02a58b2f Mon Sep 17 00:00:00 2001 From: lowercasename Date: Fri, 10 Jan 2020 21:53:13 +1100 Subject: Fixed a bug in iCal file import --- .gitignore | 1 + config/domain-example.js | 4 ++- public/images/gathio-email-logo.gif | Bin 0 -> 2198 bytes routes.js | 65 ++++++++++++++++++------------------ views/layouts/email.handlebars | 5 +++ 5 files changed, 41 insertions(+), 34 deletions(-) create mode 100644 public/images/gathio-email-logo.gif diff --git a/.gitignore b/.gitignore index a31f385..16d3fa8 100755 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ config/api.js config/database.js +config/domain.js public/events/* !public/events/.gitkeep diff --git a/config/domain-example.js b/config/domain-example.js index 3b77197..b84e210 100644 --- a/config/domain-example.js +++ b/config/domain-example.js @@ -3,5 +3,7 @@ module.exports = { 'domain' : 'localhost:3000' , 'port': '3000', 'email': 'contact@example.com', - 'sitename': 'gathio' + 'sitename': 'gathio', + // If left blank, this defaults to https://yourdomain.com/images/gathio-email-logo.gif. Set a full URL here to change it to your own logo (or just change the file itself) + 'logo_url': '' }; diff --git a/public/images/gathio-email-logo.gif b/public/images/gathio-email-logo.gif new file mode 100644 index 0000000..7374176 Binary files /dev/null and b/public/images/gathio-email-logo.gif differ diff --git a/routes.js b/routes.js index eb3ac10..840ac00 100755 --- a/routes.js +++ b/routes.js @@ -22,7 +22,8 @@ const marked = require('marked'); const domain = require('./config/domain.js').domain; const contactEmail = require('./config/domain.js').email; -const siteName = require('./config/domain.js').sitename +const siteName = require('./config/domain.js').sitename; +const siteLogo = require('./config/domain.js').logo_url; // Extra marked renderer (used to render plaintext event description for page metadata) // Adapted from https://dustinpfister.github.io/2017/11/19/nodejs-marked/ @@ -528,7 +529,7 @@ router.post('/newevent', async (req, res) => { addToLog("createEvent", "success", "Event " + eventID + "created"); // Send email with edit link if (sendEmails) { - req.app.get('hbsInstance').renderView('./views/emails/createevent.handlebars', {eventID, editToken, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/createevent.handlebars', {eventID, editToken, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: req.body.creatorEmail, from: { @@ -555,12 +556,10 @@ router.post('/newevent', async (req, res) => { router.post('/importevent', (req, res) => { let eventID = shortid.generate(); let editToken = randomstring.generate(); - if (req.files && Object.keys(req.files).length != 0) { - importediCalObject = ical.parseICS(req.files.icsImportControl.data.toString('utf8')); - for (var key in importediCalObject) { - importedEventData = importediCalObject[key]; - } - console.log(importedEventData) + if (req.files && Object.keys(req.files).length !== 0) { + let iCalObject = ical.parseICS(req.files.icsImportControl.data.toString('utf8')); + let importedEventData = iCalObject[Object.keys(iCalObject)]; + let creatorEmail; if (req.body.creatorEmail) { creatorEmail = req.body.creatorEmail @@ -569,7 +568,7 @@ router.post('/importevent', (req, res) => { } else { res.status(500).send("Please supply an email address on the previous page."); } - + const event = new Event({ id: eventID, type: 'public', @@ -596,24 +595,24 @@ router.post('/importevent', (req, res) => { addToLog("createEvent", "success", "Event " + eventID + " created"); // Send email with edit link if (sendEmails) { - req.app.get('hbsInstance').renderView('./views/emails/createevent.handlebars', {eventID, editToken, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { - const msg = { - to: req.body.creatorEmail, - from: { - name: siteName, - email: contactEmail, - }, - subject: `${siteName}: ${req.body.eventName}`, - html, - }; - sgMail.send(msg).catch(e => { - console.error(e.toString()); - res.status(500).end(); - }); - }); + req.app.get('hbsInstance').renderView('./views/emails/createevent.handlebars', {eventID, editToken, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { + const msg = { + to: req.body.creatorEmail, + from: { + name: siteName, + email: contactEmail, + }, + subject: `${siteName}: ${importedEventData.summary}`, + html, + }; + sgMail.send(msg).catch(e => { + console.error(e.toString()); + res.status(500).end(); + }); + }); } res.writeHead(302, { - 'Location': '/' + eventID + '?e=' + editToken + 'Location': '/' + eventID + '?e=' + editToken }); res.end(); }) @@ -656,7 +655,7 @@ router.post('/neweventgroup', (req, res) => { addToLog("createEventGroup", "success", "Event group " + eventGroupID + " created"); // Send email with edit link if (sendEmails) { - req.app.get('hbsInstance').renderView('./views/emails/createeventgroup.handlebars', {eventGroupID, editToken, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/createeventgroup.handlebars', {eventGroupID, editToken, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: req.body.creatorEmail, from: { @@ -746,7 +745,7 @@ router.post('/editevent/:eventID/:editToken', (req, res) => { attendeeEmails = ids; if (!error && attendeeEmails != ""){ console.log("Sending emails to: " + attendeeEmails); - req.app.get('hbsInstance').renderView('./views/emails/editevent.handlebars', {diffText, eventID: req.params.eventID, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/editevent.handlebars', {diffText, eventID: req.params.eventID, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: attendeeEmails, from: { @@ -918,7 +917,7 @@ router.post('/deleteevent/:eventID/:editToken', (req, res) => { attendeeEmails = ids; if (!error){ console.log("Sending emails to: " + attendeeEmails); - req.app.get('hbsInstance').renderView('./views/emails/deleteevent.handlebars', {siteName, domain, eventName: event.name, cache: true, layout: 'email.handlebars'}, function(err, html) { + 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: { @@ -1046,7 +1045,7 @@ router.post('/attendevent/:eventID', (req, res) => { addToLog("addEventAttendee", "success", "Attendee added to event " + req.params.eventID); if (sendEmails) { if (req.body.attendeeEmail){ - req.app.get('hbsInstance').renderView('./views/emails/addeventattendee.handlebars', {eventID: req.params.eventID, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/addeventattendee.handlebars', {eventID: req.params.eventID, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: req.body.attendeeEmail, from: { @@ -1082,7 +1081,7 @@ router.post('/unattendevent/:eventID', (req, res) => { 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.handlebars', {eventID: req.params.eventID, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { + req.app.get('hbsInstance').renderView('./views/emails/unattendevent.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, @@ -1119,7 +1118,7 @@ router.post('/removeattendee/:eventID/:attendeeID', (req, res) => { if (sendEmails) { // currently this is never called because we don't have the email address if (req.body.attendeeEmail){ - req.app.get('hbsInstance').renderView('./views/emails/removeeventattendee.handlebars', {eventName: req.params.eventName, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { + req.app.get('hbsInstance').renderView('./views/emails/removeeventattendee.handlebars', {eventName: req.params.eventName, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: req.body.attendeeEmail, from: { name: siteName, @@ -1166,7 +1165,7 @@ router.post('/post/comment/:eventID', (req, res) => { attendeeEmails = ids; if (!error){ console.log("Sending emails to: " + attendeeEmails); - req.app.get('hbsInstance').renderView('./views/emails/addeventcomment.handlebars', {siteName, domain, eventID: req.params.eventID, commentAuthor: req.body.commentAuthor, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/addeventcomment.handlebars', {siteName, siteLogo, domain, eventID: req.params.eventID, commentAuthor: req.body.commentAuthor, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: attendeeEmails, from: { @@ -1218,7 +1217,7 @@ router.post('/post/reply/:eventID/:commentID', (req, res) => { attendeeEmails = ids; if (!error){ console.log("Sending emails to: " + attendeeEmails); - req.app.get('hbsInstance').renderView('./views/emails/addeventcomment.handlebars', {siteName, domain, eventID: req.params.eventID, commentAuthor: req.body.replyAuthor, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/addeventcomment.handlebars', {siteName, siteLogo, domain, eventID: req.params.eventID, commentAuthor: req.body.replyAuthor, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: attendeeEmails, from: { diff --git a/views/layouts/email.handlebars b/views/layouts/email.handlebars index 6158ddb..2b54d6e 100644 --- a/views/layouts/email.handlebars +++ b/views/layouts/email.handlebars @@ -105,6 +105,11 @@ + + +
+ +
{{{ body }}} -- cgit v1.2.3 From 5dcb3707c095af414f7e5e5b5bfb472f360a4216 Mon Sep 17 00:00:00 2001 From: lowercasename Date: Fri, 10 Jan 2020 21:56:29 +1100 Subject: Revert "Fixed a bug in iCal file import" This reverts commit f2765abbee6001759f74f6c9e1161d2f02a58b2f. --- .gitignore | 1 - config/domain-example.js | 4 +-- public/images/gathio-email-logo.gif | Bin 2198 -> 0 bytes routes.js | 65 ++++++++++++++++++------------------ views/layouts/email.handlebars | 5 --- 5 files changed, 34 insertions(+), 41 deletions(-) delete mode 100644 public/images/gathio-email-logo.gif diff --git a/.gitignore b/.gitignore index 16d3fa8..a31f385 100755 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,6 @@ config/api.js config/database.js -config/domain.js public/events/* !public/events/.gitkeep diff --git a/config/domain-example.js b/config/domain-example.js index b84e210..3b77197 100644 --- a/config/domain-example.js +++ b/config/domain-example.js @@ -3,7 +3,5 @@ module.exports = { 'domain' : 'localhost:3000' , 'port': '3000', 'email': 'contact@example.com', - 'sitename': 'gathio', - // If left blank, this defaults to https://yourdomain.com/images/gathio-email-logo.gif. Set a full URL here to change it to your own logo (or just change the file itself) - 'logo_url': '' + 'sitename': 'gathio' }; diff --git a/public/images/gathio-email-logo.gif b/public/images/gathio-email-logo.gif deleted file mode 100644 index 7374176..0000000 Binary files a/public/images/gathio-email-logo.gif and /dev/null differ diff --git a/routes.js b/routes.js index 840ac00..eb3ac10 100755 --- a/routes.js +++ b/routes.js @@ -22,8 +22,7 @@ const marked = require('marked'); const domain = require('./config/domain.js').domain; const contactEmail = require('./config/domain.js').email; -const siteName = require('./config/domain.js').sitename; -const siteLogo = require('./config/domain.js').logo_url; +const siteName = require('./config/domain.js').sitename // Extra marked renderer (used to render plaintext event description for page metadata) // Adapted from https://dustinpfister.github.io/2017/11/19/nodejs-marked/ @@ -529,7 +528,7 @@ router.post('/newevent', async (req, res) => { addToLog("createEvent", "success", "Event " + eventID + "created"); // Send email with edit link if (sendEmails) { - req.app.get('hbsInstance').renderView('./views/emails/createevent.handlebars', {eventID, editToken, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/createevent.handlebars', {eventID, editToken, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: req.body.creatorEmail, from: { @@ -556,10 +555,12 @@ router.post('/newevent', async (req, res) => { router.post('/importevent', (req, res) => { let eventID = shortid.generate(); let editToken = randomstring.generate(); - if (req.files && Object.keys(req.files).length !== 0) { - let iCalObject = ical.parseICS(req.files.icsImportControl.data.toString('utf8')); - let importedEventData = iCalObject[Object.keys(iCalObject)]; - + if (req.files && Object.keys(req.files).length != 0) { + importediCalObject = ical.parseICS(req.files.icsImportControl.data.toString('utf8')); + for (var key in importediCalObject) { + importedEventData = importediCalObject[key]; + } + console.log(importedEventData) let creatorEmail; if (req.body.creatorEmail) { creatorEmail = req.body.creatorEmail @@ -568,7 +569,7 @@ router.post('/importevent', (req, res) => { } else { res.status(500).send("Please supply an email address on the previous page."); } - + const event = new Event({ id: eventID, type: 'public', @@ -595,24 +596,24 @@ router.post('/importevent', (req, res) => { addToLog("createEvent", "success", "Event " + eventID + " created"); // Send email with edit link if (sendEmails) { - req.app.get('hbsInstance').renderView('./views/emails/createevent.handlebars', {eventID, editToken, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { - const msg = { - to: req.body.creatorEmail, - from: { - name: siteName, - email: contactEmail, - }, - subject: `${siteName}: ${importedEventData.summary}`, - html, - }; - sgMail.send(msg).catch(e => { - console.error(e.toString()); - res.status(500).end(); - }); - }); + req.app.get('hbsInstance').renderView('./views/emails/createevent.handlebars', {eventID, editToken, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { + const msg = { + to: req.body.creatorEmail, + from: { + name: siteName, + email: contactEmail, + }, + subject: `${siteName}: ${req.body.eventName}`, + html, + }; + sgMail.send(msg).catch(e => { + console.error(e.toString()); + res.status(500).end(); + }); + }); } res.writeHead(302, { - 'Location': '/' + eventID + '?e=' + editToken + 'Location': '/' + eventID + '?e=' + editToken }); res.end(); }) @@ -655,7 +656,7 @@ router.post('/neweventgroup', (req, res) => { addToLog("createEventGroup", "success", "Event group " + eventGroupID + " created"); // Send email with edit link if (sendEmails) { - req.app.get('hbsInstance').renderView('./views/emails/createeventgroup.handlebars', {eventGroupID, editToken, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/createeventgroup.handlebars', {eventGroupID, editToken, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: req.body.creatorEmail, from: { @@ -745,7 +746,7 @@ router.post('/editevent/:eventID/:editToken', (req, res) => { attendeeEmails = ids; if (!error && attendeeEmails != ""){ console.log("Sending emails to: " + attendeeEmails); - req.app.get('hbsInstance').renderView('./views/emails/editevent.handlebars', {diffText, eventID: req.params.eventID, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/editevent.handlebars', {diffText, eventID: req.params.eventID, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: attendeeEmails, from: { @@ -917,7 +918,7 @@ router.post('/deleteevent/:eventID/:editToken', (req, res) => { attendeeEmails = ids; if (!error){ 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) { + req.app.get('hbsInstance').renderView('./views/emails/deleteevent.handlebars', {siteName, domain, eventName: event.name, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: attendeeEmails, from: { @@ -1045,7 +1046,7 @@ router.post('/attendevent/:eventID', (req, res) => { addToLog("addEventAttendee", "success", "Attendee added to event " + req.params.eventID); if (sendEmails) { if (req.body.attendeeEmail){ - req.app.get('hbsInstance').renderView('./views/emails/addeventattendee.handlebars', {eventID: req.params.eventID, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/addeventattendee.handlebars', {eventID: req.params.eventID, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: req.body.attendeeEmail, from: { @@ -1081,7 +1082,7 @@ router.post('/unattendevent/:eventID', (req, res) => { 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.handlebars', {eventID: req.params.eventID, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { + req.app.get('hbsInstance').renderView('./views/emails/unattendevent.handlebars', {eventID: req.params.eventID, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: req.body.attendeeEmail, from: { name: siteName, @@ -1118,7 +1119,7 @@ router.post('/removeattendee/:eventID/:attendeeID', (req, res) => { if (sendEmails) { // currently this is never called because we don't have the email address if (req.body.attendeeEmail){ - req.app.get('hbsInstance').renderView('./views/emails/removeeventattendee.handlebars', {eventName: req.params.eventName, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { + req.app.get('hbsInstance').renderView('./views/emails/removeeventattendee.handlebars', {eventName: req.params.eventName, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: req.body.attendeeEmail, from: { name: siteName, @@ -1165,7 +1166,7 @@ router.post('/post/comment/:eventID', (req, res) => { attendeeEmails = ids; if (!error){ console.log("Sending emails to: " + attendeeEmails); - req.app.get('hbsInstance').renderView('./views/emails/addeventcomment.handlebars', {siteName, siteLogo, domain, eventID: req.params.eventID, commentAuthor: req.body.commentAuthor, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/addeventcomment.handlebars', {siteName, domain, eventID: req.params.eventID, commentAuthor: req.body.commentAuthor, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: attendeeEmails, from: { @@ -1217,7 +1218,7 @@ router.post('/post/reply/:eventID/:commentID', (req, res) => { attendeeEmails = ids; if (!error){ console.log("Sending emails to: " + attendeeEmails); - req.app.get('hbsInstance').renderView('./views/emails/addeventcomment.handlebars', {siteName, siteLogo, domain, eventID: req.params.eventID, commentAuthor: req.body.replyAuthor, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/addeventcomment.handlebars', {siteName, domain, eventID: req.params.eventID, commentAuthor: req.body.replyAuthor, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: attendeeEmails, from: { diff --git a/views/layouts/email.handlebars b/views/layouts/email.handlebars index 2b54d6e..6158ddb 100644 --- a/views/layouts/email.handlebars +++ b/views/layouts/email.handlebars @@ -105,11 +105,6 @@
- - -
- -
{{{ body }}} -- cgit v1.2.3 From d34ef7eea742dfc7e2a3fa2480237b7bb3e4cc0c Mon Sep 17 00:00:00 2001 From: lowercasename Date: Fri, 10 Jan 2020 22:03:45 +1100 Subject: Revert "Revert "Fixed a bug in iCal file import"" This reverts commit 5dcb3707c095af414f7e5e5b5bfb472f360a4216. --- .gitignore | 1 + config/domain-example.js | 4 ++- public/images/gathio-email-logo.gif | Bin 0 -> 2198 bytes routes.js | 65 ++++++++++++++++++------------------ views/layouts/email.handlebars | 5 +++ 5 files changed, 41 insertions(+), 34 deletions(-) create mode 100644 public/images/gathio-email-logo.gif diff --git a/.gitignore b/.gitignore index a31f385..16d3fa8 100755 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ config/api.js config/database.js +config/domain.js public/events/* !public/events/.gitkeep diff --git a/config/domain-example.js b/config/domain-example.js index 3b77197..b84e210 100644 --- a/config/domain-example.js +++ b/config/domain-example.js @@ -3,5 +3,7 @@ module.exports = { 'domain' : 'localhost:3000' , 'port': '3000', 'email': 'contact@example.com', - 'sitename': 'gathio' + 'sitename': 'gathio', + // If left blank, this defaults to https://yourdomain.com/images/gathio-email-logo.gif. Set a full URL here to change it to your own logo (or just change the file itself) + 'logo_url': '' }; diff --git a/public/images/gathio-email-logo.gif b/public/images/gathio-email-logo.gif new file mode 100644 index 0000000..7374176 Binary files /dev/null and b/public/images/gathio-email-logo.gif differ diff --git a/routes.js b/routes.js index eb3ac10..840ac00 100755 --- a/routes.js +++ b/routes.js @@ -22,7 +22,8 @@ const marked = require('marked'); const domain = require('./config/domain.js').domain; const contactEmail = require('./config/domain.js').email; -const siteName = require('./config/domain.js').sitename +const siteName = require('./config/domain.js').sitename; +const siteLogo = require('./config/domain.js').logo_url; // Extra marked renderer (used to render plaintext event description for page metadata) // Adapted from https://dustinpfister.github.io/2017/11/19/nodejs-marked/ @@ -528,7 +529,7 @@ router.post('/newevent', async (req, res) => { addToLog("createEvent", "success", "Event " + eventID + "created"); // Send email with edit link if (sendEmails) { - req.app.get('hbsInstance').renderView('./views/emails/createevent.handlebars', {eventID, editToken, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/createevent.handlebars', {eventID, editToken, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: req.body.creatorEmail, from: { @@ -555,12 +556,10 @@ router.post('/newevent', async (req, res) => { router.post('/importevent', (req, res) => { let eventID = shortid.generate(); let editToken = randomstring.generate(); - if (req.files && Object.keys(req.files).length != 0) { - importediCalObject = ical.parseICS(req.files.icsImportControl.data.toString('utf8')); - for (var key in importediCalObject) { - importedEventData = importediCalObject[key]; - } - console.log(importedEventData) + if (req.files && Object.keys(req.files).length !== 0) { + let iCalObject = ical.parseICS(req.files.icsImportControl.data.toString('utf8')); + let importedEventData = iCalObject[Object.keys(iCalObject)]; + let creatorEmail; if (req.body.creatorEmail) { creatorEmail = req.body.creatorEmail @@ -569,7 +568,7 @@ router.post('/importevent', (req, res) => { } else { res.status(500).send("Please supply an email address on the previous page."); } - + const event = new Event({ id: eventID, type: 'public', @@ -596,24 +595,24 @@ router.post('/importevent', (req, res) => { addToLog("createEvent", "success", "Event " + eventID + " created"); // Send email with edit link if (sendEmails) { - req.app.get('hbsInstance').renderView('./views/emails/createevent.handlebars', {eventID, editToken, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { - const msg = { - to: req.body.creatorEmail, - from: { - name: siteName, - email: contactEmail, - }, - subject: `${siteName}: ${req.body.eventName}`, - html, - }; - sgMail.send(msg).catch(e => { - console.error(e.toString()); - res.status(500).end(); - }); - }); + req.app.get('hbsInstance').renderView('./views/emails/createevent.handlebars', {eventID, editToken, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { + const msg = { + to: req.body.creatorEmail, + from: { + name: siteName, + email: contactEmail, + }, + subject: `${siteName}: ${importedEventData.summary}`, + html, + }; + sgMail.send(msg).catch(e => { + console.error(e.toString()); + res.status(500).end(); + }); + }); } res.writeHead(302, { - 'Location': '/' + eventID + '?e=' + editToken + 'Location': '/' + eventID + '?e=' + editToken }); res.end(); }) @@ -656,7 +655,7 @@ router.post('/neweventgroup', (req, res) => { addToLog("createEventGroup", "success", "Event group " + eventGroupID + " created"); // Send email with edit link if (sendEmails) { - req.app.get('hbsInstance').renderView('./views/emails/createeventgroup.handlebars', {eventGroupID, editToken, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/createeventgroup.handlebars', {eventGroupID, editToken, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: req.body.creatorEmail, from: { @@ -746,7 +745,7 @@ router.post('/editevent/:eventID/:editToken', (req, res) => { attendeeEmails = ids; if (!error && attendeeEmails != ""){ console.log("Sending emails to: " + attendeeEmails); - req.app.get('hbsInstance').renderView('./views/emails/editevent.handlebars', {diffText, eventID: req.params.eventID, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/editevent.handlebars', {diffText, eventID: req.params.eventID, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: attendeeEmails, from: { @@ -918,7 +917,7 @@ router.post('/deleteevent/:eventID/:editToken', (req, res) => { attendeeEmails = ids; if (!error){ console.log("Sending emails to: " + attendeeEmails); - req.app.get('hbsInstance').renderView('./views/emails/deleteevent.handlebars', {siteName, domain, eventName: event.name, cache: true, layout: 'email.handlebars'}, function(err, html) { + 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: { @@ -1046,7 +1045,7 @@ router.post('/attendevent/:eventID', (req, res) => { addToLog("addEventAttendee", "success", "Attendee added to event " + req.params.eventID); if (sendEmails) { if (req.body.attendeeEmail){ - req.app.get('hbsInstance').renderView('./views/emails/addeventattendee.handlebars', {eventID: req.params.eventID, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/addeventattendee.handlebars', {eventID: req.params.eventID, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: req.body.attendeeEmail, from: { @@ -1082,7 +1081,7 @@ router.post('/unattendevent/:eventID', (req, res) => { 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.handlebars', {eventID: req.params.eventID, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { + req.app.get('hbsInstance').renderView('./views/emails/unattendevent.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, @@ -1119,7 +1118,7 @@ router.post('/removeattendee/:eventID/:attendeeID', (req, res) => { if (sendEmails) { // currently this is never called because we don't have the email address if (req.body.attendeeEmail){ - req.app.get('hbsInstance').renderView('./views/emails/removeeventattendee.handlebars', {eventName: req.params.eventName, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { + req.app.get('hbsInstance').renderView('./views/emails/removeeventattendee.handlebars', {eventName: req.params.eventName, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: req.body.attendeeEmail, from: { name: siteName, @@ -1166,7 +1165,7 @@ router.post('/post/comment/:eventID', (req, res) => { attendeeEmails = ids; if (!error){ console.log("Sending emails to: " + attendeeEmails); - req.app.get('hbsInstance').renderView('./views/emails/addeventcomment.handlebars', {siteName, domain, eventID: req.params.eventID, commentAuthor: req.body.commentAuthor, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/addeventcomment.handlebars', {siteName, siteLogo, domain, eventID: req.params.eventID, commentAuthor: req.body.commentAuthor, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: attendeeEmails, from: { @@ -1218,7 +1217,7 @@ router.post('/post/reply/:eventID/:commentID', (req, res) => { attendeeEmails = ids; if (!error){ console.log("Sending emails to: " + attendeeEmails); - req.app.get('hbsInstance').renderView('./views/emails/addeventcomment.handlebars', {siteName, domain, eventID: req.params.eventID, commentAuthor: req.body.replyAuthor, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/addeventcomment.handlebars', {siteName, siteLogo, domain, eventID: req.params.eventID, commentAuthor: req.body.replyAuthor, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: attendeeEmails, from: { diff --git a/views/layouts/email.handlebars b/views/layouts/email.handlebars index 6158ddb..2b54d6e 100644 --- a/views/layouts/email.handlebars +++ b/views/layouts/email.handlebars @@ -105,6 +105,11 @@
+ + +
+ +
{{{ body }}} -- cgit v1.2.3 From 7877e73537a0ce0650cc6bb073c9a81432bd35e1 Mon Sep 17 00:00:00 2001 From: lowercasename Date: Fri, 10 Jan 2020 22:03:45 +1100 Subject: Fixed a bug in iCal file import; added logo to emails --- .gitignore | 1 + config/domain-example.js | 4 ++- public/images/gathio-email-logo.gif | Bin 0 -> 2198 bytes routes.js | 65 ++++++++++++++++++------------------ views/layouts/email.handlebars | 5 +++ 5 files changed, 41 insertions(+), 34 deletions(-) create mode 100644 public/images/gathio-email-logo.gif diff --git a/.gitignore b/.gitignore index a31f385..16d3fa8 100755 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ config/api.js config/database.js +config/domain.js public/events/* !public/events/.gitkeep diff --git a/config/domain-example.js b/config/domain-example.js index 3b77197..b84e210 100644 --- a/config/domain-example.js +++ b/config/domain-example.js @@ -3,5 +3,7 @@ module.exports = { 'domain' : 'localhost:3000' , 'port': '3000', 'email': 'contact@example.com', - 'sitename': 'gathio' + 'sitename': 'gathio', + // If left blank, this defaults to https://yourdomain.com/images/gathio-email-logo.gif. Set a full URL here to change it to your own logo (or just change the file itself) + 'logo_url': '' }; diff --git a/public/images/gathio-email-logo.gif b/public/images/gathio-email-logo.gif new file mode 100644 index 0000000..7374176 Binary files /dev/null and b/public/images/gathio-email-logo.gif differ diff --git a/routes.js b/routes.js index eb3ac10..840ac00 100755 --- a/routes.js +++ b/routes.js @@ -22,7 +22,8 @@ const marked = require('marked'); const domain = require('./config/domain.js').domain; const contactEmail = require('./config/domain.js').email; -const siteName = require('./config/domain.js').sitename +const siteName = require('./config/domain.js').sitename; +const siteLogo = require('./config/domain.js').logo_url; // Extra marked renderer (used to render plaintext event description for page metadata) // Adapted from https://dustinpfister.github.io/2017/11/19/nodejs-marked/ @@ -528,7 +529,7 @@ router.post('/newevent', async (req, res) => { addToLog("createEvent", "success", "Event " + eventID + "created"); // Send email with edit link if (sendEmails) { - req.app.get('hbsInstance').renderView('./views/emails/createevent.handlebars', {eventID, editToken, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/createevent.handlebars', {eventID, editToken, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: req.body.creatorEmail, from: { @@ -555,12 +556,10 @@ router.post('/newevent', async (req, res) => { router.post('/importevent', (req, res) => { let eventID = shortid.generate(); let editToken = randomstring.generate(); - if (req.files && Object.keys(req.files).length != 0) { - importediCalObject = ical.parseICS(req.files.icsImportControl.data.toString('utf8')); - for (var key in importediCalObject) { - importedEventData = importediCalObject[key]; - } - console.log(importedEventData) + if (req.files && Object.keys(req.files).length !== 0) { + let iCalObject = ical.parseICS(req.files.icsImportControl.data.toString('utf8')); + let importedEventData = iCalObject[Object.keys(iCalObject)]; + let creatorEmail; if (req.body.creatorEmail) { creatorEmail = req.body.creatorEmail @@ -569,7 +568,7 @@ router.post('/importevent', (req, res) => { } else { res.status(500).send("Please supply an email address on the previous page."); } - + const event = new Event({ id: eventID, type: 'public', @@ -596,24 +595,24 @@ router.post('/importevent', (req, res) => { addToLog("createEvent", "success", "Event " + eventID + " created"); // Send email with edit link if (sendEmails) { - req.app.get('hbsInstance').renderView('./views/emails/createevent.handlebars', {eventID, editToken, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { - const msg = { - to: req.body.creatorEmail, - from: { - name: siteName, - email: contactEmail, - }, - subject: `${siteName}: ${req.body.eventName}`, - html, - }; - sgMail.send(msg).catch(e => { - console.error(e.toString()); - res.status(500).end(); - }); - }); + req.app.get('hbsInstance').renderView('./views/emails/createevent.handlebars', {eventID, editToken, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { + const msg = { + to: req.body.creatorEmail, + from: { + name: siteName, + email: contactEmail, + }, + subject: `${siteName}: ${importedEventData.summary}`, + html, + }; + sgMail.send(msg).catch(e => { + console.error(e.toString()); + res.status(500).end(); + }); + }); } res.writeHead(302, { - 'Location': '/' + eventID + '?e=' + editToken + 'Location': '/' + eventID + '?e=' + editToken }); res.end(); }) @@ -656,7 +655,7 @@ router.post('/neweventgroup', (req, res) => { addToLog("createEventGroup", "success", "Event group " + eventGroupID + " created"); // Send email with edit link if (sendEmails) { - req.app.get('hbsInstance').renderView('./views/emails/createeventgroup.handlebars', {eventGroupID, editToken, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/createeventgroup.handlebars', {eventGroupID, editToken, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: req.body.creatorEmail, from: { @@ -746,7 +745,7 @@ router.post('/editevent/:eventID/:editToken', (req, res) => { attendeeEmails = ids; if (!error && attendeeEmails != ""){ console.log("Sending emails to: " + attendeeEmails); - req.app.get('hbsInstance').renderView('./views/emails/editevent.handlebars', {diffText, eventID: req.params.eventID, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/editevent.handlebars', {diffText, eventID: req.params.eventID, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: attendeeEmails, from: { @@ -918,7 +917,7 @@ router.post('/deleteevent/:eventID/:editToken', (req, res) => { attendeeEmails = ids; if (!error){ console.log("Sending emails to: " + attendeeEmails); - req.app.get('hbsInstance').renderView('./views/emails/deleteevent.handlebars', {siteName, domain, eventName: event.name, cache: true, layout: 'email.handlebars'}, function(err, html) { + 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: { @@ -1046,7 +1045,7 @@ router.post('/attendevent/:eventID', (req, res) => { addToLog("addEventAttendee", "success", "Attendee added to event " + req.params.eventID); if (sendEmails) { if (req.body.attendeeEmail){ - req.app.get('hbsInstance').renderView('./views/emails/addeventattendee.handlebars', {eventID: req.params.eventID, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/addeventattendee.handlebars', {eventID: req.params.eventID, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: req.body.attendeeEmail, from: { @@ -1082,7 +1081,7 @@ router.post('/unattendevent/:eventID', (req, res) => { 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.handlebars', {eventID: req.params.eventID, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { + req.app.get('hbsInstance').renderView('./views/emails/unattendevent.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, @@ -1119,7 +1118,7 @@ router.post('/removeattendee/:eventID/:attendeeID', (req, res) => { if (sendEmails) { // currently this is never called because we don't have the email address if (req.body.attendeeEmail){ - req.app.get('hbsInstance').renderView('./views/emails/removeeventattendee.handlebars', {eventName: req.params.eventName, siteName, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { + req.app.get('hbsInstance').renderView('./views/emails/removeeventattendee.handlebars', {eventName: req.params.eventName, siteName, siteLogo, domain, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: req.body.attendeeEmail, from: { name: siteName, @@ -1166,7 +1165,7 @@ router.post('/post/comment/:eventID', (req, res) => { attendeeEmails = ids; if (!error){ console.log("Sending emails to: " + attendeeEmails); - req.app.get('hbsInstance').renderView('./views/emails/addeventcomment.handlebars', {siteName, domain, eventID: req.params.eventID, commentAuthor: req.body.commentAuthor, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/addeventcomment.handlebars', {siteName, siteLogo, domain, eventID: req.params.eventID, commentAuthor: req.body.commentAuthor, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: attendeeEmails, from: { @@ -1218,7 +1217,7 @@ router.post('/post/reply/:eventID/:commentID', (req, res) => { attendeeEmails = ids; if (!error){ console.log("Sending emails to: " + attendeeEmails); - req.app.get('hbsInstance').renderView('./views/emails/addeventcomment.handlebars', {siteName, domain, eventID: req.params.eventID, commentAuthor: req.body.replyAuthor, cache: true, layout: 'email.handlebars'}, function(err, html) { + req.app.get('hbsInstance').renderView('./views/emails/addeventcomment.handlebars', {siteName, siteLogo, domain, eventID: req.params.eventID, commentAuthor: req.body.replyAuthor, cache: true, layout: 'email.handlebars'}, function(err, html) { const msg = { to: attendeeEmails, from: { diff --git a/views/layouts/email.handlebars b/views/layouts/email.handlebars index 6158ddb..2b54d6e 100644 --- a/views/layouts/email.handlebars +++ b/views/layouts/email.handlebars @@ -105,6 +105,11 @@
+ + +
+ +
{{{ body }}} -- cgit v1.2.3