mirror of
https://github.com/Chocobozzz/PeerTube.git
synced 2025-10-03 17:59:37 +02:00
render html/markdown for new comment notification email (#3255)
Co-authored-by: kimsible <kimsible@users.noreply.github.com> Co-authored-by: Rigel Kent <sendmemail@rigelk.eu>
This commit is contained in:
parent
a4879b5375
commit
98b9464312
7 changed files with 181 additions and 34 deletions
|
@ -15,6 +15,53 @@ import { MAbuseFull, MAbuseMessage, MAccountDefault, MActorFollowActors, MActorF
|
|||
import { MCommentOwnerVideo, MVideo, MVideoAccountLight } from '../types/models/video'
|
||||
import { JobQueue } from './job-queue'
|
||||
|
||||
const sanitizeHtml = require('sanitize-html')
|
||||
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.use(markdownItEmoji)
|
||||
|
||||
const toSafeHtml = text => {
|
||||
// Restore line feed
|
||||
const textWithLineFeed = text.replace(/<br.?\/?>/g, '\r\n')
|
||||
|
||||
// Convert possible markdown (emojis, emphasis and lists) to html
|
||||
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
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const Email = require('email-templates')
|
||||
|
||||
class Emailer {
|
||||
|
@ -236,6 +283,7 @@ class Emailer {
|
|||
const video = comment.Video
|
||||
const videoUrl = WEBSERVER.URL + comment.Video.getWatchStaticPath()
|
||||
const commentUrl = WEBSERVER.URL + comment.getCommentStaticPath()
|
||||
const commentHtml = toSafeHtml(comment.text)
|
||||
|
||||
const emailPayload: EmailPayload = {
|
||||
template: 'video-comment-new',
|
||||
|
@ -245,6 +293,7 @@ class Emailer {
|
|||
accountName: comment.Account.getDisplayName(),
|
||||
accountUrl: comment.Account.Actor.url,
|
||||
comment,
|
||||
commentHtml,
|
||||
video,
|
||||
videoUrl,
|
||||
action: {
|
||||
|
@ -262,6 +311,7 @@ class Emailer {
|
|||
const video = comment.Video
|
||||
const videoUrl = WEBSERVER.URL + comment.Video.getWatchStaticPath()
|
||||
const commentUrl = WEBSERVER.URL + comment.getCommentStaticPath()
|
||||
const commentHtml = toSafeHtml(comment.text)
|
||||
|
||||
const emailPayload: EmailPayload = {
|
||||
template: 'video-comment-mention',
|
||||
|
@ -269,6 +319,7 @@ class Emailer {
|
|||
subject: 'Mention on video ' + video.name,
|
||||
locals: {
|
||||
comment,
|
||||
commentHtml,
|
||||
video,
|
||||
videoUrl,
|
||||
accountName,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue