X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Femailer.ts;h=f5c3e474596abf7ec7b8d30eec98a2560378b89a;hb=5f3505ba78bc05fc61aeca44d95f9a954934c0fc;hp=bd10895308e29f213b22df00443fce3206b654c7;hpb=eaaf316fe12266b071069c27c01a827fdafcca41;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/emailer.ts b/server/lib/emailer.ts index bd1089530..f5c3e4745 100644 --- a/server/lib/emailer.ts +++ b/server/lib/emailer.ts @@ -1,15 +1,15 @@ import { readFileSync } from 'fs-extra' -import { isArray, merge } from 'lodash' +import { merge } from 'lodash' import { createTransport, Transporter } from 'nodemailer' import { join } from 'path' -import { root } from '@shared/core-utils' -import { EmailPayload } from '@shared/models' +import { arrayify, root } from '@shared/core-utils' +import { EmailPayload, UserRegistrationState } from '@shared/models' import { SendEmailDefaultOptions } from '../../shared/models/server/emailer.model' import { isTestOrDevInstance } from '../helpers/core-utils' import { bunyanLogger, logger } from '../helpers/logger' import { CONFIG, isEmailEnabled } from '../initializers/config' import { WEBSERVER } from '../initializers/constants' -import { MUser } from '../types/models' +import { MRegistration, MUser } from '../types/models' import { JobQueue } from './job-queue' const Email = require('email-templates') @@ -62,11 +62,13 @@ class Emailer { subject: 'Reset your account password', locals: { username, - resetPasswordUrl + resetPasswordUrl, + + hideNotificationPreferencesLink: true } } - return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload }) + return JobQueue.Instance.createJobAsync({ type: 'email', payload: emailPayload }) } addPasswordCreateEmailJob (username: string, to: string, createPasswordUrl: string) { @@ -76,25 +78,37 @@ class Emailer { subject: 'Create your account password', locals: { username, - createPasswordUrl + createPasswordUrl, + + hideNotificationPreferencesLink: true } } - return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload }) + return JobQueue.Instance.createJobAsync({ type: 'email', payload: emailPayload }) } - addVerifyEmailJob (username: string, to: string, verifyEmailUrl: string) { + addVerifyEmailJob (options: { + username: string + isRegistrationRequest: boolean + to: string + verifyEmailUrl: string + }) { + const { username, isRegistrationRequest, to, verifyEmailUrl } = options + const emailPayload: EmailPayload = { template: 'verify-email', to: [ to ], subject: `Verify your email on ${CONFIG.INSTANCE.NAME}`, locals: { username, - verifyEmailUrl + verifyEmailUrl, + isRegistrationRequest, + + hideNotificationPreferencesLink: true } } - return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload }) + return JobQueue.Instance.createJobAsync({ type: 'email', payload: emailPayload }) } addUserBlockJob (user: MUser, blocked: boolean, reason?: string) { @@ -108,7 +122,7 @@ class Emailer { text: `Your account ${user.username} on ${CONFIG.INSTANCE.NAME} has been ${blockedWord}${reasonString}.` } - return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload }) + return JobQueue.Instance.createJobAsync({ type: 'email', payload: emailPayload }) } addContactFormJob (fromEmail: string, fromName: string, subject: string, body: string) { @@ -123,11 +137,37 @@ class Emailer { body, // There are not notification preferences for the contact form - hideNotificationPreferences: true + hideNotificationPreferencesLink: true + } + } + + return JobQueue.Instance.createJobAsync({ type: 'email', payload: emailPayload }) + } + + addUserRegistrationRequestProcessedJob (registration: MRegistration) { + let template: string + let subject: string + if (registration.state === UserRegistrationState.ACCEPTED) { + template = 'user-registration-request-accepted' + subject = `Your registration request for ${registration.username} has been accepted` + } else { + template = 'user-registration-request-rejected' + subject = `Your registration request for ${registration.username} has been rejected` + } + + const to = registration.email + const emailPayload: EmailPayload = { + to: [ to ], + template, + subject, + locals: { + username: registration.username, + moderationResponse: registration.moderationResponse, + loginLink: WEBSERVER.URL + '/login' } } - return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload }) + return JobQueue.Instance.createJobAsync({ type: 'email', payload: emailPayload }) } async sendMail (options: EmailPayload) { @@ -158,9 +198,7 @@ class Emailer { subjectPrefix: CONFIG.EMAIL.SUBJECT.PREFIX }) - const toEmails = isArray(options.to) - ? options.to - : [ options.to ] + const toEmails = arrayify(options.to) for (const to of toEmails) { const baseOptions: SendEmailDefaultOptions = {