From cd834d6828064de85b1feae84351ebb66fa41e3d Mon Sep 17 00:00:00 2001 From: Jim Laurie Date: Thu, 16 Nov 2017 18:00:15 +0100 Subject: [PATCH] Change email node module --- .../config/environments/development/smtp.json | 10 ---- .../config/environments/production/smtp.json | 10 ---- packages/strapi-plugin-email/package.json | 8 ++-- .../strapi-plugin-email/services/Email.js | 25 ++-------- .../config/routes.json | 9 ++++ .../controllers/Auth.js | 46 +++++++++++++++++++ 6 files changed, 64 insertions(+), 44 deletions(-) delete mode 100644 packages/strapi-plugin-email/config/environments/development/smtp.json delete mode 100644 packages/strapi-plugin-email/config/environments/production/smtp.json diff --git a/packages/strapi-plugin-email/config/environments/development/smtp.json b/packages/strapi-plugin-email/config/environments/development/smtp.json deleted file mode 100644 index 61192319a2..0000000000 --- a/packages/strapi-plugin-email/config/environments/development/smtp.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "smtp": { - "from": "", - "service": { - "name": "", - "user": "", - "pass": "" - } - } -} diff --git a/packages/strapi-plugin-email/config/environments/production/smtp.json b/packages/strapi-plugin-email/config/environments/production/smtp.json deleted file mode 100644 index 61192319a2..0000000000 --- a/packages/strapi-plugin-email/config/environments/production/smtp.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "smtp": { - "from": "", - "service": { - "name": "", - "user": "", - "pass": "" - } - } -} diff --git a/packages/strapi-plugin-email/package.json b/packages/strapi-plugin-email/package.json index e42f24aa0a..e943b70f15 100644 --- a/packages/strapi-plugin-email/package.json +++ b/packages/strapi-plugin-email/package.json @@ -23,9 +23,6 @@ "prepublish": "npm run build", "postinstall": "node node_modules/strapi-helper-plugin/lib/internals/scripts/postinstall.js" }, - "dependencies": { - "nodemailer": "^4.4.0" - }, "devDependencies": { "cross-env": "^5.1.1", "eslint": "^4.11.0", @@ -60,5 +57,8 @@ "node": ">= 7.0.0", "npm": ">= 3.0.0" }, - "license": "MIT" + "license": "MIT", + "dependencies": { + "sendmail": "^1.2.0" + } } diff --git a/packages/strapi-plugin-email/services/Email.js b/packages/strapi-plugin-email/services/Email.js index d27d94f825..dd1f8d0c25 100644 --- a/packages/strapi-plugin-email/services/Email.js +++ b/packages/strapi-plugin-email/services/Email.js @@ -7,37 +7,22 @@ */ const _ = require('lodash'); -const nodemailer = require('nodemailer'); +const sendmail = require('sendmail')({ + silent: true +}); module.exports = { send: (options, cb) => { return new Promise((resolve, reject) => { try { - const config = strapi.plugins['email'].config[strapi.config.environment]; - - // Format transport config. - let transportConfig; - if (config.smtp && config.smtp.service && config.smtp.service.name) { - transportConfig = { - service: config.smtp.service.name, - auth: { - user: config.smtp.service.user, - pass: config.smtp.service.pass - } - }; - } - - // Init the transporter. - const transporter = nodemailer.createTransport(transportConfig); - // Default values. options = _.isObject(options) ? options : {}; - options.from = config.smtp.from || ''; + options.from = 'admin@strapiapp.com'; options.text = options.text || options.html; options.html = options.html || options.text; // Send the email. - transporter.sendMail({ + sendmail({ from: options.from, to: options.to, subject: options.subject, diff --git a/packages/strapi-plugin-users-permissions/config/routes.json b/packages/strapi-plugin-users-permissions/config/routes.json index b2e058b190..fdd8edb679 100644 --- a/packages/strapi-plugin-users-permissions/config/routes.json +++ b/packages/strapi-plugin-users-permissions/config/routes.json @@ -51,6 +51,15 @@ "prefix": "" } }, + { + "method": "POST", + "path": "/auth/forgot-password", + "handler": "Auth.forgotPassword", + "config": { + "policies": [], + "prefix": "" + } + }, { "method": "GET", diff --git a/packages/strapi-plugin-users-permissions/controllers/Auth.js b/packages/strapi-plugin-users-permissions/controllers/Auth.js index 4705ae80d7..d53997072a 100644 --- a/packages/strapi-plugin-users-permissions/controllers/Auth.js +++ b/packages/strapi-plugin-users-permissions/controllers/Auth.js @@ -7,6 +7,7 @@ */ const _ = require('lodash'); +const crypto = require('crypto'); module.exports = { callback: async (ctx) => { @@ -146,5 +147,50 @@ module.exports = { message: err.message }; } + }, + + forgotPassword: async (ctx) => { + const email = ctx.request.body.email; + const url = ctx.request.body.url; + + // Find the user user thanks to his email. + const user = await strapi.query('user', 'users-permissions').findOne({ email }); + + // User not found. + if (!user) { + ctx.status = 400; + return ctx.body = { + message: 'This email does not exist.' + }; + } + + // Generate random token. + const resetPasswordToken = crypto.randomBytes(64).toString('hex'); + + // Set the property code of the local passport. + user.resetPasswordToken = resetPasswordToken; + + // Update the user. + await strapi.query('user', 'users-permissions').update({ + id: user.id, + values: user + }); + + // Send an email to the user. + try { + await strapi.plugins['email'].services.email.send({ + to: user.email, + subject: 'Reset password', + text: url + '?code=' + resetPasswordToken, + html: url + '?code=' + resetPasswordToken + }); + ctx.status = 200; + ctx.body = {}; + } catch (err) { + ctx.status = 500; + ctx.body = { + message: 'Error sending the email' + }; + } } };