]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - client/src/app/core/renderer/html-renderer.service.ts
Fix HTML in account/channel description
[github/Chocobozzz/PeerTube.git] / client / src / app / core / renderer / html-renderer.service.ts
index 302d92ed961a7e2da2a4439947f535b888353fc6..d158519f8f973f07749b288c9f55c37e8dd7c0d8 100644 (file)
@@ -1,4 +1,5 @@
 import { Injectable } from '@angular/core'
+import { getCustomMarkupSanitizeOptions, getDefaultSanitizeOptions } from '@shared/core-utils/renderer/html'
 import { LinkifierService } from './linkifier.service'
 
 @Injectable()
@@ -19,33 +20,19 @@ export class HtmlRendererService {
     })
   }
 
-  async toSafeHtml (text: string) {
-    await this.loadSanitizeHtml()
+  async toSafeHtml (text: string, additionalAllowedTags: string[] = []) {
+    const [ html ] = await Promise.all([
+      // Convert possible markdown to html
+      this.linkifier.linkify(text),
 
-    // Convert possible markdown to html
-    const html = this.linkifier.linkify(text)
+      this.loadSanitizeHtml()
+    ])
 
-    return this.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 options = additionalAllowedTags.length !== 0
+      ? getCustomMarkupSanitizeOptions(additionalAllowedTags)
+      : getDefaultSanitizeOptions()
+
+    return this.sanitizeHtml(html, options)
   }
 
   private async loadSanitizeHtml () {