- Mail profile submission info and approval link

- Stuff
This commit is contained in:
2018-06-03 21:02:16 -04:00
parent 9ed024e86d
commit 947d743715
3 changed files with 93 additions and 33 deletions

View File

@@ -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 ? '<p><b>Question: ' : '<b>Response</b><br>') + message.text + (!message.isUser ? '</b>' : '') + '</p>';
} 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);
ProfileEvents.once('create', (err, result) => {
profileInstance.save((err, result) => {
if (err) {
e.emit('processSubmission', err, null);
reject({ success: false, message: 'Failed to save user submission.', err: err });
}
if (result) {
e.emit('processSubmission', null, 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" <system@appsby.fitz.guru>',
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: '<h2>New Profile Submission<h2><p><b>Name:</b> ' + result.details.name + '(<a href="mailto:' + result.details.email + '">' + result.details.email + '</a>)<br><b>Location:</b> ' + result.details.location + '<p><p>About:<br>' + result.details.about + '</p><p><b>Image:</b><br><img src="' + result.details.pic.detail + '"></p><div>Messages:<br>' + outputMessagesAsText(result.messages, true) + '</div><p>To approve this profile: <a href="' + approveProfileLink + '">click here</a>.</p>',
};
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) => {

32
modules/mailer.js Normal file
View File

@@ -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);
}
};