From 947d7437154bd2a60c0a23f04597207a601c48dd Mon Sep 17 00:00:00 2001 From: Mike Fitzpatrick Date: Sun, 3 Jun 2018 21:02:16 -0400 Subject: [PATCH] - Mail profile submission info and approval link - Stuff --- models/profile.js | 72 ++++++++++++++++++++++++++++++++-------------- modules/mailer.js | 32 +++++++++++++++++++++ routes/profiles.js | 22 +++++++------- 3 files changed, 93 insertions(+), 33 deletions(-) create mode 100644 modules/mailer.js diff --git a/models/profile.js b/models/profile.js index 2140dfc..48cc176 100644 --- a/models/profile.js +++ b/models/profile.js @@ -1,9 +1,21 @@ -const EventEmitter = require('events'); const Images = require('../modules/images'); const Logger = require('../modules/logger'); +const Mailer = require('../modules/mailer'); const Messages = require('../models/message'); const Mongoose = require('mongoose'); +function outputMessagesAsText (messages, asHtml = false) { + var output = ''; + for (let i = 0; i < messages.length; i++) { + if (asHtml) { + output += (!message.isUser ? '

Question: ' : 'Response
') + message.text + (!message.isUser ? '
' : '') + '

'; + } else { + output += (!message.isUser ? 'Question: ' : 'Response\r\r') + message.text + '\r\r\r\r'; + } + } + return output; +} + const ProfileSchema = new Mongoose.Schema({ "order" : { type: Number, default: 0 }, "details": { @@ -333,9 +345,7 @@ module.exports = { } } }); - } - }); promise.then((result) => { @@ -483,28 +493,46 @@ module.exports = { }, processSubmission: (e, profile) => { - var ProfileEvents = new EventEmitter(); - var temp = JSON.parse(profile.profile); - var insert = { - details: temp.details, - messages: temp.messages, - submitted: true, - approved: false - }; + var profileModel = {}; + profileModel.details = profile.details; + profileModel.details.pic = { detail: profile.image }; + profileModel.messages = profile.messages; + profileModel.submitted = true; + profileModel.approved = false; - insert.details.pic = { detail: profile.image }; + const promise = new Promise((resolve, reject) => { + var profileInstance = new ProfileModel(profileData); + + profileInstance.save((err, result) => { + if (err) { + reject({ success: false, message: 'Failed to save user submission.', err: err }); + } + + if (result) { + let approveProfileLink = 'https://api.fitz.guru/urnings/profiles/approve/' + encodeURIComponent(result._id); + + // setup email data with unicode symbols + let mail = { + from: '"Urnings|looking App" ', + to: 'mike@fitz.guru', + subject: 'New Profile Submission', + text: 'New Profile Submission\r\r\r\rName: ' + result.details.name + '(' + result.details.email + ')\r\rLocation: ' + result.details.location + '\r\rAbout: ' + result.details.about + '\r\rImage: ' + result.details.pic.detail + '\r\rMessages:\r' + outputMessagesAsText(result.messages) + '\r\r\r\rTo approve this profile: ' + approveProfileLink + '\r\r', + html: '

New Profile Submission

Name: ' + result.details.name + '(' + result.details.email + ')
Location: ' + result.details.location + '

About:
' + result.details.about + '

Image:

Messages:
' + outputMessagesAsText(result.messages, true) + '

To approve this profile: click here.

', + }; - ProfileEvents.once('create', (err, result) => { - if (err) { - e.emit('processSubmission', err, null); - } - - if (result) { - e.emit('processSubmission', null, result); - } + Mailer.send(mail, (err, result) => { + resolve({ success: true, mailer: { err: err, result: result } }); + }); + } + }); }); - - module.exports.create(ProfileEvents, insert); + + promise.then((result) => { + e.emit('processSubmission', null, result); + }) + .catch((err) => { + e.emit('processSubmission', err, null); + }); }, update: (e, profileId, profile) => { diff --git a/modules/mailer.js b/modules/mailer.js new file mode 100644 index 0000000..e81eb55 --- /dev/null +++ b/modules/mailer.js @@ -0,0 +1,32 @@ +const Mailer = require('nodemailer'); + +function sendMail (options, callback) { + // create reusable transporter object using the default SMTP transport + let transporter = Mailer.createTransport({ + host: 'mail.fitz.guru', + port: 587, + secure: false, // secure:true for port 465, secure:false for port 587 + auth: { + user: 'support@fitz.guru', + pass: 'NotSt@ff3d!' + } + }); + + callback = typeof callback === 'function' ? callback : (error, info) => { + if (error) { + return console.error(error); + } + + console.debug('Message %s sent: %s', info.messageId, info.response); + }; + + // send mail with defined transport object + transporter.sendMail(options, callback); +} + +module.exports = { + + send: (email, callback) => { + sendMail(mail, callback); + } +}; \ No newline at end of file diff --git a/routes/profiles.js b/routes/profiles.js index 529486e..cc00a18 100644 --- a/routes/profiles.js +++ b/routes/profiles.js @@ -178,20 +178,20 @@ Router.route('/list' + ParamStr) Router.route('/submission') .post((req, res) => { - var ProfileEvents = new EventEmitter(); - var profile = req.body; + var ProfileEvents = new EventEmitter(); + var profile = req.body; - ProfileEvents.once('processSubmission', (err, result) => { - if (err) { - res.status(500).json({ message: 'Could not process user profile submission', err: err, profile: profile }); - } + ProfileEvents.once('processSubmission', (err, result) => { + if (err) { + res.status(500).json({ message: 'Could not process user profile submission', err: err, profile: profile }); + } - if (result) { - res.status(200).json(result); - } - }); + if (result) { + res.status(200).json(result); + } + }); - Profiles.processSubmission(ProfileEvents, profile); + Profiles.processSubmission(ProfileEvents, profile); }); Router.route('/submitted')