X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Femailer.ts;h=5243a6029cfcf2699be5e5d00b24d13f7d39288d;hb=77d7e851dccf17dcc89e8fcc2db3f655d1e63f95;hp=708808cf23f75e10f50892889982017ac2af55a7;hpb=b9cf3fb6381f71c976fbe515f728082d90a9c437;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/emailer.ts b/server/lib/emailer.ts index 708808cf2..5243a6029 100644 --- a/server/lib/emailer.ts +++ b/server/lib/emailer.ts @@ -5,6 +5,7 @@ import { join } from 'path' import { VideoChannelModel } from '@server/models/video/video-channel' import { MVideoBlacklistLightVideo, MVideoBlacklistVideo } from '@server/types/models/video/video-blacklist' import { MVideoImport, MVideoImportVideo } from '@server/types/models/video/video-import' +import { SANITIZE_OPTIONS, TEXT_WITH_HTML_RULES } from '@shared/core-utils' import { AbuseState, EmailPayload, UserAbuse } from '@shared/models' import { SendEmailOptions } from '../../shared/models/server/emailer.model' import { isTestInstance, root } from '../helpers/core-utils' @@ -20,14 +21,7 @@ const markdownItEmoji = require('markdown-it-emoji/light') const MarkdownItClass = require('markdown-it') const markdownIt = new MarkdownItClass('default', { linkify: true, breaks: true, html: true }) -markdownIt.enable([ - 'linkify', - 'autolink', - 'emphasis', - 'link', - 'newline', - 'list' -]) +markdownIt.enable(TEXT_WITH_HTML_RULES) markdownIt.use(markdownItEmoji) @@ -39,27 +33,7 @@ const toSafeHtml = text => { const html = markdownIt.render(textWithLineFeed) // Convert to safe Html - return sanitizeHtml(html, { - allowedTags: [ 'a', 'p', 'span', 'br', 'strong', 'em', 'ul', 'ol', 'li' ], - allowedSchemes: [ 'http', 'https' ], - allowedAttributes: { - a: [ 'href', 'class', 'target', 'rel' ] - }, - transformTags: { - a: (tagName, attribs) => { - let rel = 'noopener noreferrer' - if (attribs.rel === 'me') rel += ' me' - - return { - tagName, - attribs: Object.assign(attribs, { - target: '_blank', - rel - }) - } - } - } - }) + return sanitizeHtml(html, SANITIZE_OPTIONS) } const Email = require('email-templates') @@ -133,18 +107,18 @@ class Emailer { } } - async checkConnectionOrDie () { + async checkConnection () { if (!this.transporter || CONFIG.SMTP.TRANSPORT !== 'smtp') return logger.info('Testing SMTP server...') try { const success = await this.transporter.verify() - if (success !== true) this.dieOnConnectionFailure() + if (success !== true) this.warnOnConnectionFailure() logger.info('Successfully connected to SMTP server.') } catch (err) { - this.dieOnConnectionFailure(err) + this.warnOnConnectionFailure(err) } } @@ -256,7 +230,7 @@ class Emailer { } myVideoImportErrorNotification (to: string[], videoImport: MVideoImport) { - const importUrl = WEBSERVER.URL + '/my-account/video-imports' + const importUrl = WEBSERVER.URL + '/my-library/video-imports' const text = `Your video import "${videoImport.getTargetIdentifier()}" encountered an error.` + @@ -498,7 +472,7 @@ class Emailer { const emailPayload: EmailPayload = { template: 'user-registered', to, - subject: `a new user registered on ${WEBSERVER.HOST}: ${user.username}`, + subject: `a new user registered on ${CONFIG.INSTANCE.NAME}: ${user.username}`, locals: { user } @@ -512,7 +486,7 @@ class Emailer { const videoUrl = WEBSERVER.URL + videoBlacklist.Video.getWatchStaticPath() const reasonString = videoBlacklist.reason ? ` for the following reason: ${videoBlacklist.reason}` : '' - const blockedString = `Your video ${videoName} (${videoUrl} on ${WEBSERVER.HOST} has been blacklisted${reasonString}.` + const blockedString = `Your video ${videoName} (${videoUrl} on ${CONFIG.INSTANCE.NAME} has been blacklisted${reasonString}.` const emailPayload: EmailPayload = { to, @@ -532,7 +506,7 @@ class Emailer { const emailPayload: EmailPayload = { to, subject: `Video ${video.name} unblacklisted`, - text: `Your video "${video.name}" (${videoUrl}) on ${WEBSERVER.HOST} has been unblacklisted.`, + text: `Your video "${video.name}" (${videoUrl}) on ${CONFIG.INSTANCE.NAME} has been unblacklisted.`, locals: { title: 'Your video was unblacklisted' } @@ -573,7 +547,7 @@ class Emailer { const emailPayload: EmailPayload = { template: 'verify-email', to: [ to ], - subject: `Verify your email on ${WEBSERVER.HOST}`, + subject: `Verify your email on ${CONFIG.INSTANCE.NAME}`, locals: { username, verifyEmailUrl @@ -591,7 +565,7 @@ class Emailer { const emailPayload: EmailPayload = { to: [ to ], subject: 'Account ' + blockedWord, - text: `Your account ${user.username} on ${WEBSERVER.HOST} has been ${blockedWord}${reasonString}.` + text: `Your account ${user.username} on ${CONFIG.INSTANCE.NAME} has been ${blockedWord}${reasonString}.` } return JobQueue.Instance.createJob({ type: 'email', payload: emailPayload }) @@ -623,7 +597,7 @@ class Emailer { const fromDisplayName = options.from ? options.from - : WEBSERVER.HOST + : CONFIG.INSTANCE.NAME const email = new Email({ send: true, @@ -651,6 +625,7 @@ class Emailer { locals: { // default variables available in all templates WEBSERVER, EMAIL: CONFIG.EMAIL, + instanceName: CONFIG.INSTANCE.NAME, text: options.text, subject: options.subject } @@ -662,9 +637,8 @@ class Emailer { } } - private dieOnConnectionFailure (err?: Error) { + private warnOnConnectionFailure (err?: Error) { logger.error('Failed to connect to SMTP %s:%d.', CONFIG.SMTP.HOSTNAME, CONFIG.SMTP.PORT, { err }) - process.exit(-1) } static get Instance () {