const server = require('vn-loopback/server/server'); module.exports = Self => { Self.remoteMethod('recoverPassword', { description: 'Send email to the user', accepts: [ { arg: 'user', type: 'string', description: 'The user name or email', required: true }, { arg: 'app', type: 'string', description: 'The directory for mail' } ], http: { path: `/recoverPassword`, verb: 'POST' } }); Self.recoverPassword = async function(user, app) { // const models = Self.app.models; // const usesEmail = user.indexOf('@') !== -1; const usesPhone = new RegExp(/([+]\d{2})?\d{9}/, 'g').test(user); /* if (usesPhone) { const worker = await models.Client.findOne({ fields: ['email', 'phone'], where: {or: [{name: user, phone: user}]} }); if (!worker) return; user = worker.email; } if (!usesEmail) { const account = await models.VnUser.findOne({ fields: ['email', 'phone'], where: {or: [{name: user, phone: user}]} }); if (!account) return; user = account.email; }*/ const account = await Self.app.models.Application.rawSql( `SELECT c.id, c.phone, u.email from account.user u, vn.client c where c.id=u.id and( u.email = ? or u.name = ? or c.phone = ?)`, [user, user, user]); if (!account || account.length > 1) return; const {email, phone} = account[0]; try { // if (usesPhone) { // await models.Sms.send(ctx, user, Self.resetPassword({email: user, usesPhone})); // } else { await Self.resetPassword({email, phone, emailTemplate: 'recover-password', app, usesPhone}); // } } catch (err) { if (err.code === 'EMAIL_NOT_FOUND') return; else throw err; } }; };