mirror of
https://github.com/Ocelot-Social-Community/Ocelot-Social.git
synced 2025-12-13 07:46:06 +00:00
77 lines
2.2 KiB
JavaScript
77 lines
2.2 KiB
JavaScript
import CONFIG from '../../config'
|
|
import nodemailer from 'nodemailer'
|
|
import { htmlToText } from 'nodemailer-html-to-text'
|
|
import {
|
|
signupTemplate,
|
|
resetPasswordTemplate,
|
|
wrongAccountTemplate,
|
|
emailVerificationTemplate,
|
|
} from './templateBuilder'
|
|
|
|
const hasEmailConfig = CONFIG.SMTP_HOST && CONFIG.SMTP_PORT
|
|
const hasAuthData = CONFIG.SMTP_USERNAME && CONFIG.SMTP_PASSWORD
|
|
|
|
let sendMail = () => {}
|
|
if (!hasEmailConfig) {
|
|
if (process.env.NODE_ENV !== 'test') {
|
|
// eslint-disable-next-line no-console
|
|
console.log('Warning: Email middleware will not try to send mails.')
|
|
}
|
|
} else {
|
|
sendMail = async templateArgs => {
|
|
const transporter = nodemailer.createTransport({
|
|
host: CONFIG.SMTP_HOST,
|
|
port: CONFIG.SMTP_PORT,
|
|
ignoreTLS: CONFIG.SMTP_IGNORE_TLS === 'true',
|
|
secure: false, // true for 465, false for other ports
|
|
auth: hasAuthData && {
|
|
user: CONFIG.SMTP_USERNAME,
|
|
pass: CONFIG.SMTP_PASSWORD,
|
|
},
|
|
})
|
|
|
|
transporter.use(
|
|
'compile',
|
|
htmlToText({
|
|
ignoreImage: true,
|
|
wordwrap: false,
|
|
}),
|
|
)
|
|
|
|
await transporter.sendMail(templateArgs)
|
|
}
|
|
}
|
|
|
|
const sendSignupMail = async (resolve, root, args, context, resolveInfo) => {
|
|
const response = await resolve(root, args, context, resolveInfo)
|
|
const { email, nonce } = response
|
|
await sendMail(signupTemplate({ email, nonce }))
|
|
delete response.nonce
|
|
return response
|
|
}
|
|
|
|
const sendPasswordResetMail = async (resolve, root, args, context, resolveInfo) => {
|
|
const { email } = args
|
|
const { email: userFound, nonce, name } = await resolve(root, args, context, resolveInfo)
|
|
const template = userFound ? resetPasswordTemplate : wrongAccountTemplate
|
|
await sendMail(template({ email, nonce, name }))
|
|
return true
|
|
}
|
|
|
|
const sendEmailVerificationMail = async (resolve, root, args, context, resolveInfo) => {
|
|
const response = await resolve(root, args, context, resolveInfo)
|
|
const { email, nonce, name } = response
|
|
await sendMail(emailVerificationTemplate({ email, nonce, name }))
|
|
delete response.nonce
|
|
return response
|
|
}
|
|
|
|
export default {
|
|
Mutation: {
|
|
AddEmailAddress: sendEmailVerificationMail,
|
|
requestPasswordReset: sendPasswordResetMail,
|
|
Signup: sendSignupMail,
|
|
SignupByInvitation: sendSignupMail,
|
|
},
|
|
}
|