UNPKG

@xrengine/server-core

Version:

Shared components for XREngine server

157 lines (129 loc) 4.77 kB
import appRootPath from 'app-root-path' import * as path from 'path' import * as pug from 'pug' import { Application } from '../../../declarations' import config from '../../appconfig' import { getLink, sendEmail } from './auth-management.utils' const emailAccountTemplatesPath = path.join(appRootPath.path, 'packages', 'server-core', 'email-templates', 'account') /** * A function which sent an email for authentication * * @param app * @returns {@function} sentEmail with app and email */ export default (app: Application) => { return { service: config.authentication.service, identifyUserProps: ['token', 'type'], sanitizeUserForClient: async (identityProvider: any): Promise<any> => { const authService = app.service('authentication') const accessToken = await (authService as any).createAccessToken({}, { subject: identityProvider.id.toString() }) return { accessToken } }, notifier: async (type: string, identityProvider: any): Promise<void> => { if (identityProvider.type !== 'password') { return } let hashLink let email let templatePath let compiledHTML const mailSender = config.email.from switch (type) { case 'resendVerifySignup': // sending the identityProvider the verification email hashLink = getLink('verify', identityProvider.verifyToken) templatePath = path.join(emailAccountTemplatesPath, 'verify-email.pug') compiledHTML = pug.compileFile(templatePath)({ logo: '', name: identityProvider.token, hashLink }) email = { from: mailSender, to: identityProvider.token, subject: 'Confirm Signup', html: compiledHTML } return await sendEmail(app, email) case 'verifySignup': // confirming verification hashLink = getLink('verify', identityProvider.verifyToken) templatePath = path.join(emailAccountTemplatesPath, 'email-verified.pug') compiledHTML = pug.compileFile(templatePath)({ logo: '', name: identityProvider.token, hashLink }) email = { from: mailSender, to: identityProvider.token, subject: 'Thank you, your email has been verified', html: compiledHTML } return await sendEmail(app, email) case 'sendResetPwd': hashLink = getLink('reset', identityProvider.resetToken) templatePath = path.join(emailAccountTemplatesPath, 'reset-password.pug') compiledHTML = pug.compileFile(templatePath)({ logo: '', name: identityProvider.token, hashLink }) email = { from: mailSender, to: identityProvider.token, subject: 'Reset Password', html: compiledHTML } return await sendEmail(app, email) case 'resetPwd': hashLink = getLink('reset', identityProvider.resetToken) templatePath = path.join(emailAccountTemplatesPath, 'password-was-reset.pug') compiledHTML = pug.compileFile(templatePath)({ logo: '', name: identityProvider.token, hashLink }) email = { from: mailSender, to: identityProvider.token, subject: 'Your password was reset', html: compiledHTML } return await sendEmail(app, email) case 'passwordChange': templatePath = path.join(emailAccountTemplatesPath, 'password-change.pug') compiledHTML = pug.compileFile(templatePath)({ logo: '', name: identityProvider.token }) email = { from: mailSender, to: identityProvider.email, subject: 'Your password was changed', html: compiledHTML } return await sendEmail(app, email) case 'identityChange': hashLink = getLink('verifyChanges', identityProvider.verifyToken) templatePath = path.join(emailAccountTemplatesPath, 'identity-change.pug') compiledHTML = pug.compileFile(templatePath)({ logo: '', name: identityProvider.token, hashLink, changes: identityProvider.verifyChanges }) email = { from: mailSender, to: identityProvider.token, subject: 'Your account was changed. Please verify the changes', html: compiledHTML } return await sendEmail(app, email) default: break } } } }