moving mail logic into controller

pull/4/head
Adam Black 2021-05-23 15:40:55 +01:00
parent 0ef1b2a940
commit 33b630e893
4 changed files with 59 additions and 31 deletions

View File

@ -13,12 +13,15 @@ var config = {
sslKey: 'certs/retropilot.key',
sslCrt: 'certs/retropilot.crt',
canSendMail: true, // Skips sending mail, all attempted mail is logged under DEBUG
smtpHost: "localhost", // credentials for smtp server to send account registration mails. if not filled in, get the generated tokens from the server.log manually
smtpPort: 25,
smtpUser: "root",
smtpPassword: "",
smtpFrom: "no-reply@retropilot.org",
SENDGRID_API_KEY: '',
baseUrl: 'http://192.168.1.165:3000/', // base url of the retropilot server
baseUploadUrl: 'http://192.168.1.165:3000/backend/post_upload', // base url sent to devices for POSTing drives & logs

View File

@ -7,7 +7,8 @@ module.exports = async (models, logger) => {
return {
authentication: require('./authentication')(models, logger),
helpers: require('./helpers')(models, logger),
storage: require('./storage')(models, logger)
storage: require('./storage')(models, logger),
mailing: require('./mailing')(models, logger)
}
}

View File

@ -0,0 +1,51 @@
const config = require('./../config');
const nodemailer = require('nodemailer');
let models;
let logger;
let transporter = nodemailer.createTransport(
{
host: config.smtpHost,
port: config.smtpPort,
auth: {
user: config.smtpUser,
pass: config.smtpPassword
},
logger: true,
debug: false
},
{from: config.smtpFrom}
);
async function sendEmailVerification(token, email) {
if (!config.canSendMail) return logger.warn(`Mailing disabled. ${email} - ${token}`);
console.log("mail")
let message = {
from: config.smtpFrom,
to: email.trim(),
subject: 'RetroPilot Registration Token',
text: 'Your Email Registration Token Is: "' + token + '"'
};
const {error, info} = await transporter.sendMail(message);
if (error) {
logger.warn(`Email to ${email} FAILED ${error}`);
return false;
}
return info;
}
module.exports = (_models, _logger) => {
models = _models;
logger = _logger;
return {
sendEmailVerification
}
}

View File

@ -1,7 +1,6 @@
const router = require('express').Router();
const bodyParser = require('body-parser');
const crypto = require('crypto');
const nodemailer = require('nodemailer');
const htmlspecialchars = require('htmlspecialchars');
const dirTree = require("directory-tree");
const cookieParser = require('cookie-parser');
@ -99,40 +98,14 @@ router.post('/useradmin/register/token', bodyParser.urlencoded({extended: true})
return;
}
var token = crypto.createHmac('sha256', config.applicationSalt).update(email.trim()).digest('hex');
const token = crypto.createHmac('sha256', config.applicationSalt).update(email.trim()).digest('hex');
var infoText = '';
let infoText = '';
if (req.body.token === undefined) { // email entered, token request
logger.info("USERADMIN REGISTRATION sending token to " + htmlspecialchars(email.trim()) + ": \"" + token + "\"");
infoText = 'Please check your inbox (<b>SPAM</b>) for an email with the registration token.<br>If the token was not delivered, please ask the administrator to check the <i>server.log</i> for the token generated for your email.<br><br>';
let transporter = nodemailer.createTransport(
{
host: config.smtpHost,
port: config.smtpPort,
auth: {
user: config.smtpUser,
pass: config.smtpPassword
},
logger: true,
debug: false
},
{from: config.smtpFrom}
);
let message = {
from: config.smtpFrom,
to: email.trim(),
subject: 'RetroPilot Registration Token',
text: 'Your Email Registration Token Is: "' + token + '"'
};
transporter.sendMail(message, (error, info) => {
if (error) {
logger.error(error.message);
}
});
const emailStatus = await controllers.mailing.sendEmailVerification(token, email);
} else { // final registration form filled
if (req.body.token != token) {