@progress/kendo-editor-common 1.12.9 → 1.12.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,10 +1,24 @@
1
1
  import { Schema } from 'prosemirror-model';
2
2
  import { tableNodes } from 'prosemirror-tables';
3
+ import { isSafeUrl } from '@progress/kendo-common';
3
4
  import { domToPmDoc, htmlToFragment, pmDocToFragment } from '../source';
4
5
  import { rowTypeAttr, colgroupAttr, resizableAttr } from './constants';
5
6
  const hole = 0;
6
7
  const blockquoteDOM = ['blockquote', hole], hrDOM = ['hr'], preDOM = ['pre', ['code', hole]];
7
8
  const olDOM = ['ol', 0], ulDOM = ['ul', 0], liDOM = ['li', 0];
9
+ const LINK = 'link';
10
+ const IMAGE = 'image';
11
+ const sanitizeUrlAttributes = (attrs, type) => {
12
+ if (type === LINK && attrs.href && !isSafeUrl(attrs.href, LINK)) {
13
+ const { href, ...sanitized } = attrs;
14
+ return sanitized;
15
+ }
16
+ if (type === IMAGE && attrs.src && !isSafeUrl(attrs.src, IMAGE)) {
17
+ const { src, ...sanitized } = attrs;
18
+ return sanitized;
19
+ }
20
+ return attrs;
21
+ };
8
22
  const domAttributes = (dom) => {
9
23
  const result = {};
10
24
  const attributes = dom.attributes;
@@ -62,8 +76,8 @@ const marks = {
62
76
  title: { default: null }
63
77
  },
64
78
  inclusive: false,
65
- parseDOM: [{ tag: 'a', getAttrs: domAttributes }],
66
- toDOM: (node) => ['a', pmAttributes(node.attrs), hole]
79
+ parseDOM: [{ tag: 'a', getAttrs: (node) => sanitizeUrlAttributes(domAttributes(node), LINK) }],
80
+ toDOM: (node) => ['a', sanitizeUrlAttributes(pmAttributes(node.attrs), LINK), hole]
67
81
  },
68
82
  ...tagMark('strong'),
69
83
  ...tagMark('b'),
@@ -310,8 +324,8 @@ const nodes = {
310
324
  },
311
325
  group: 'inline',
312
326
  draggable: true,
313
- parseDOM: [{ tag: 'img', getAttrs: domAttributes }],
314
- toDOM: node => hasAttrs(node.attrs) ? ['img', pmAttributes(node.attrs)] : ['img']
327
+ parseDOM: [{ tag: 'img', getAttrs: (node) => sanitizeUrlAttributes(domAttributes(node), IMAGE) }],
328
+ toDOM: node => hasAttrs(node.attrs) ? ['img', sanitizeUrlAttributes(pmAttributes(node.attrs), IMAGE)] : ['img']
315
329
  },
316
330
  // :: NodeSpec A hard line break represented in the DOM as a `<br>` element.
317
331
  hard_break: {
@@ -3,11 +3,25 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.marks = exports.nodes = exports.parseStrColgroup = void 0;
4
4
  const prosemirror_model_1 = require("prosemirror-model");
5
5
  const prosemirror_tables_1 = require("prosemirror-tables");
6
+ const kendo_common_1 = require("@progress/kendo-common");
6
7
  const source_1 = require("../source");
7
8
  const constants_1 = require("./constants");
8
9
  const hole = 0;
9
10
  const blockquoteDOM = ['blockquote', hole], hrDOM = ['hr'], preDOM = ['pre', ['code', hole]];
10
11
  const olDOM = ['ol', 0], ulDOM = ['ul', 0], liDOM = ['li', 0];
12
+ const LINK = 'link';
13
+ const IMAGE = 'image';
14
+ const sanitizeUrlAttributes = (attrs, type) => {
15
+ if (type === LINK && attrs.href && !(0, kendo_common_1.isSafeUrl)(attrs.href, LINK)) {
16
+ const { href, ...sanitized } = attrs;
17
+ return sanitized;
18
+ }
19
+ if (type === IMAGE && attrs.src && !(0, kendo_common_1.isSafeUrl)(attrs.src, IMAGE)) {
20
+ const { src, ...sanitized } = attrs;
21
+ return sanitized;
22
+ }
23
+ return attrs;
24
+ };
11
25
  const domAttributes = (dom) => {
12
26
  const result = {};
13
27
  const attributes = dom.attributes;
@@ -65,8 +79,8 @@ const marks = {
65
79
  title: { default: null }
66
80
  },
67
81
  inclusive: false,
68
- parseDOM: [{ tag: 'a', getAttrs: domAttributes }],
69
- toDOM: (node) => ['a', pmAttributes(node.attrs), hole]
82
+ parseDOM: [{ tag: 'a', getAttrs: (node) => sanitizeUrlAttributes(domAttributes(node), LINK) }],
83
+ toDOM: (node) => ['a', sanitizeUrlAttributes(pmAttributes(node.attrs), LINK), hole]
70
84
  },
71
85
  ...tagMark('strong'),
72
86
  ...tagMark('b'),
@@ -315,8 +329,8 @@ const nodes = {
315
329
  },
316
330
  group: 'inline',
317
331
  draggable: true,
318
- parseDOM: [{ tag: 'img', getAttrs: domAttributes }],
319
- toDOM: node => hasAttrs(node.attrs) ? ['img', pmAttributes(node.attrs)] : ['img']
332
+ parseDOM: [{ tag: 'img', getAttrs: (node) => sanitizeUrlAttributes(domAttributes(node), IMAGE) }],
333
+ toDOM: node => hasAttrs(node.attrs) ? ['img', sanitizeUrlAttributes(pmAttributes(node.attrs), IMAGE)] : ['img']
320
334
  },
321
335
  // :: NodeSpec A hard line break represented in the DOM as a `<br>` element.
322
336
  hard_break: {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@progress/kendo-editor-common",
3
3
  "description": "Kendo UI TypeScript package exporting functions for Editor component",
4
- "version": "1.12.9",
4
+ "version": "1.12.10",
5
5
  "keywords": [
6
6
  "Kendo UI"
7
7
  ],
@@ -30,7 +30,7 @@
30
30
  "prepublishOnly": "npm pkg delete devDependencies scripts"
31
31
  },
32
32
  "peerDependencies": {
33
- "@progress/kendo-common": "^1.0.2"
33
+ "@progress/kendo-common": "^1.1.3"
34
34
  },
35
35
  "dependencies": {
36
36
  "prosemirror-commands": "1.7.2",
@@ -50,7 +50,7 @@
50
50
  "devDependencies": {
51
51
  "@commitlint/cli": "^17.3.0",
52
52
  "@commitlint/config-conventional": "^17.3.0",
53
- "@progress/kendo-common": "^1.0.2",
53
+ "@progress/kendo-common": "^1.1.3",
54
54
  "@progress/kendo-e2e": "^4.7.0",
55
55
  "@progress/kendo-package-tasks": "dev",
56
56
  "@progress/kendo-typescript-tasks": "dev",