X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Femailer.ts;h=f5c3e474596abf7ec7b8d30eec98a2560378b89a;hb=6cc8a0dfad49addf620a42e78d6f38003a67b310;hp=edc99057ca9e76f69180e5429f3575f5f42b7b60;hpb=2b621ac0ebe83693bba6354b3482a03ba58143e7;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/emailer.ts b/server/lib/emailer.ts index edc99057c..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 { 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 { isTestInstance } from '../helpers/core-utils' -import { root } from '@shared/core-utils' +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') @@ -29,7 +29,7 @@ class Emailer { this.initialized = true if (!isEmailEnabled()) { - if (!isTestInstance()) { + if (!isTestOrDevInstance()) { logger.error('Cannot use SMTP server because of lack of configuration. PeerTube will not be able to send mails!') } @@ -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,16 +137,43 @@ class Emailer { body, // There are not notification preferences for the contact form - hideNotificationPreferences: true + hideNotificationPreferencesLink: true } } - return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload }) + 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.createJobAsync({ type: 'email', payload: emailPayload }) } async sendMail (options: EmailPayload) { if (!isEmailEnabled()) { - throw new Error('Cannot send mail because SMTP is not configured.') + logger.info('Cannot send mail because SMTP is not configured.') + return } const fromDisplayName = options.from @@ -157,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 = {