Skip to content

Commit a234d7d

Browse files
authored
Merge pull request #230 from Aggie-Web-Developers/develop
Develop
2 parents 8b8a520 + 681db6d commit a234d7d

File tree

32 files changed

+3477
-2624
lines changed

32 files changed

+3477
-2624
lines changed

app.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,16 @@ const portalRoutes = require('./routes/portal/index');
1616
const emailRoutes = require('./routes/portal/emails');
1717
const sponsorRoutes = require('./routes/portal/sponsors');
1818
const projectRoutes = require('./routes/portal/projects');
19+
const recordingRoutes = require('./routes/portal/recordings');
20+
const profileRoutes = require('./routes/portal/profile');
1921
const middleware = require('./middleware');
2022

23+
// overload console.error to send error emails when an error occurs
24+
console.error = async (err) => {
25+
console.log(err.stack); // print error to console
26+
await email.sendErrorEmail(err.stack.toString()); // send error email
27+
};
28+
2129
initPassport(passport);
2230

2331
app.use(bodyParser.urlencoded({ extended: true }));
@@ -66,7 +74,7 @@ sql
6674
})
6775
.catch(function (err) {
6876
console.log('Connecting to database: [FAILED]');
69-
console.log(err);
77+
console.error(err);
7078
});
7179

7280
app.use(function (err, req, res, next) {
@@ -96,6 +104,8 @@ app.use('/portal/events', eventRoutes);
96104
app.use('/portal/emails', emailRoutes);
97105
app.use('/portal/sponsors', sponsorRoutes);
98106
app.use('/portal/projects', projectRoutes);
107+
app.use('/portal/recordings', recordingRoutes);
108+
app.use('/portal/profile', profileRoutes);
99109

100110
app.get('/*', function (req, res) {
101111
res.render('404');

email/email.js

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,46 @@ aws.config.region = process.env.region;
1010

1111
const ses = new aws.SES();
1212

13+
// sends an email to the org email when an error occurs
14+
mailerObj.sendErrorEmail = async function (err) {
15+
const siteType = process.env.NODE_ENV == 'prod' ? 'Production' : 'Dev';
16+
17+
let content = '<p><b>Error:</b> ' + err + '</p>';
18+
content = content.replace(/"/g, "'").replace(/(?:\r\n|\r|\n)/g, '<br>'); // make content string safe for template data
19+
content = content.replace(/\\/g, '/');
20+
21+
const params = {
22+
Destination: {
23+
BccAddresses: [],
24+
ToAddresses: ['[email protected]'],
25+
},
26+
Source: 'Aggie Web Developers <[email protected]>',
27+
Template: 'AWD-Error-Email',
28+
TemplateData:
29+
'{ "Subject": "ERROR: AWD SITE - ' +
30+
siteType +
31+
'", "content": "' +
32+
content +
33+
'"}',
34+
ReplyToAddresses: ['[email protected]'],
35+
};
36+
37+
const sendPromise = new aws.SES({ apiVersion: '2010-12-01' })
38+
.sendTemplatedEmail(params)
39+
.promise();
40+
41+
return new Promise((resolve, reject) => {
42+
sendPromise
43+
.then(async function (data) {
44+
resolve('Success');
45+
})
46+
.catch(function (err) {
47+
console.log(err);
48+
resolve('Error');
49+
});
50+
});
51+
};
52+
1353
mailerObj.sendContactUsEmailGen = async function (formData) {
1454
let content = '<p><b>Name:</b> ' + formData.txtNameGen + '</p>';
1555
content += '<p><b>Email:</b> ' + formData.txtEmailGen + '</p>';
@@ -42,6 +82,7 @@ mailerObj.sendContactUsEmailGen = async function (formData) {
4282
resolve('Success');
4383
})
4484
.catch(function (err) {
85+
console.error(err);
4586
resolve('Error');
4687
});
4788
});
@@ -80,6 +121,7 @@ mailerObj.sendContactUsEmailCorp = async function (formData) {
80121
resolve('Success');
81122
})
82123
.catch(function (err) {
124+
console.error(err);
83125
resolve('Error');
84126
});
85127
});
@@ -240,6 +282,7 @@ async function attemptSend(email, sendList) {
240282
resolve(true);
241283
})
242284
.catch((err) => {
285+
console.error(err);
243286
resolve(false);
244287
});
245288
});
@@ -270,7 +313,7 @@ async function sendBulkMail(email, recips) {
270313
else resolve('Success');
271314
})
272315
.catch(function (err) {
273-
console.log(err);
316+
console.error(err);
274317
reject(new Error(err));
275318
});
276319
});
@@ -293,6 +336,7 @@ mailerObj.listenForScheduledEmails = function () {
293336
});
294337
})
295338
.catch((err) => {
339+
console.error(err);
296340
console.log('Error sending scheduled emails.');
297341
});
298342
});
@@ -310,6 +354,7 @@ function getEmailById(id) {
310354
resolve(result.recordset[0]);
311355
})
312356
.catch((err) => {
357+
console.error(err);
313358
resolve('Error');
314359
});
315360
});
@@ -325,7 +370,7 @@ function getGeneralRecipeints() {
325370
resolve(result.recordset);
326371
})
327372
.catch((err) => {
328-
console.log(err);
373+
console.error(err);
329374
resolve('Error');
330375
});
331376
});
@@ -341,6 +386,7 @@ function getCorporateRecipeints() {
341386
resolve(result.recordset);
342387
})
343388
.catch((err) => {
389+
console.error(err);
344390
resolve('Error');
345391
});
346392
});
@@ -355,6 +401,7 @@ function markEmailSent(id) {
355401
resolve(true);
356402
})
357403
.catch((err) => {
404+
console.error(err);
358405
resolve(false);
359406
});
360407
});

middleware/index.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,14 @@ mwObject.checkNotAuthenticated = function (req, res, next) {
1616
}
1717
};
1818

19+
mwObject.checkIsOfficer = function (req, res, next) {
20+
if (!req.isAuthenticated()) {
21+
res.redirect('/portal/login');
22+
} else if (req.user.officer_id == null || req.user.officer_id <= 0) {
23+
res.redirect('/portal/member');
24+
} else {
25+
return next();
26+
}
27+
};
28+
1929
module.exports = mwObject;

0 commit comments

Comments
 (0)