From a5871a978322fe9f7e99e81091711a3c3a2bdd65 Mon Sep 17 00:00:00 2001 From: Florian Brede Date: Sun, 23 May 2021 02:18:11 +0200 Subject: [PATCH] TODO: replaced sendmail by nodemailer to allow using a proper & authenticated smtp endpoint. --- config.sample.js | 6 ++++++ package.json | 2 +- routes/useradmin.js | 32 +++++++++++++++++++++++++------- 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/config.sample.js b/config.sample.js index 0e03bdc..d78113a 100644 --- a/config.sample.js +++ b/config.sample.js @@ -13,6 +13,12 @@ var config = { sslKey: 'certs/retropilot.key', sslCrt: 'certs/retropilot.crt', + smtpHost: "localhost", + smtpPort: 25, + smtpUser: "root", + smtpPassword: "", + smtpFrom: "no-reply@retropilot.org", + 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 baseDriveDownloadUrl: 'http://192.168.1.165:3000/realdata/', // base download url for drive & log data diff --git a/package.json b/package.json index 8760c34..bc95aad 100644 --- a/package.json +++ b/package.json @@ -29,8 +29,8 @@ "log4js": "^6.3.0", "mocha": "^8.4.0", "multer": "^1.4.2", + "nodemailer": "^6.6.0", "proper-lockfile": "^4.1.2", - "sendmail": "^1.6.1", "sqlite": "^4.0.22", "sqlite3": "^5.0.2", "supertest": "^6.1.3" diff --git a/routes/useradmin.js b/routes/useradmin.js index 8b9b283..fe12da4 100644 --- a/routes/useradmin.js +++ b/routes/useradmin.js @@ -1,7 +1,7 @@ const router = require('express').Router(); const bodyParser = require('body-parser'); const crypto = require('crypto'); -const sendmail = require('sendmail')({silent: false}); +const nodemailer = require('nodemailer'); const htmlspecialchars = require('htmlspecialchars'); const dirTree = require("directory-tree"); const cookieParser = require('cookie-parser'); @@ -107,15 +107,33 @@ router.post('/useradmin/register/token', bodyParser.urlencoded({extended: true}) logger.info("USERADMIN REGISTRATION sending token to " + htmlspecialchars(email.trim()) + ": \"" + token + "\""); infoText = 'Please check your inbox (SPAM) for an email with the registration token.
If the token was not delivered, please ask the administrator to check the server.log for the token generated for your email.

'; - sendmail({ - from: 'no-reply@retropilot.com', + 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', - html: 'Your Email Registration Token Is: "' + token + '"', - }, function (err, reply) { - if (err) - logger.error("USERADMIN REGISTRATION - failed to send registration token email " + (err && err.stack) + " " + reply); + text: 'Your Email Registration Token Is: "' + token + '"' + }; + + transporter.sendMail(message, (error, info) => { + if (error) { + logger.error(error.message); + } }); + } else { // final registration form filled if (req.body.token != token) { infoText = 'The registration token you entered was incorrect, please try again.

';