123456789101112131415161718192021222324252627282930313233343536373839404142 |
- const { JSDOM } = require('jsdom')
- const createDOMPurify = require('dompurify')
- module.exports = {
- async init(input, config) {
- if (config.safeHTML) {
- const window = new JSDOM('').window
- const DOMPurify = createDOMPurify(window)
- const allowedAttrs = ['v-pre', 'v-slot:tabs', 'v-slot:content', 'target']
- const allowedTags = ['tabset', 'template']
- if (config.allowDrawIoUnsafe) {
- allowedTags.push('foreignObject')
- DOMPurify.addHook('uponSanitizeElement', (elm) => {
- if (elm.querySelectorAll) {
- const breaks = elm.querySelectorAll('foreignObject br, foreignObject p')
- if (breaks && breaks.length) {
- for (let i = 0; i < breaks.length; i++) {
- breaks[i].parentNode.replaceChild(
- window.document.createElement('div'),
- breaks[i]
- )
- }
- }
- }
- })
- }
- if (config.allowIFrames) {
- allowedTags.push('iframe')
- allowedAttrs.push('allow')
- }
- input = DOMPurify.sanitize(input, {
- ADD_ATTR: allowedAttrs,
- ADD_TAGS: allowedTags
- })
- }
- return input
- }
- }
|