Radish alpha
r
Radicle web interface
Radicle
Git (anonymous pull)
Log in to clone via SSH
Sanitize markdown content
Sebastian Martinez committed 4 years ago
commit 547c87d24bef602d7958e89408bd71d5f4c3ef9d
parent e3de337769e7d5a535b4a03f0fb725bc84188ce7
3 files changed +232 -13
modified package-lock.json
@@ -29,6 +29,7 @@
        "multibase": "^4.0.4",
        "multihashes": "^4.0.2",
        "pure-svg-code": "^1.0.6",
+
        "sanitize-html": "^2.6.1",
        "svelte": "^3.44.3",
        "svelte-preprocess": "^4.7.2",
        "svelte-routing": "^1.6.0"
@@ -39,6 +40,7 @@
        "@sveltejs/vite-plugin-svelte": "^1.0.0-next.36",
        "@testing-library/cypress": "^8.0.2",
        "@tsconfig/svelte": "^1.0.13",
+
        "@types/sanitize-html": "^2.6.2",
        "@typescript-eslint/eslint-plugin": "^4.26.1",
        "@typescript-eslint/parser": "^4.26.1",
        "cypress": "^9.3.1",
@@ -3321,6 +3323,15 @@
      "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz",
      "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg=="
    },
+
    "node_modules/@types/sanitize-html": {
+
      "version": "2.6.2",
+
      "resolved": "https://registry.npmjs.org/@types/sanitize-html/-/sanitize-html-2.6.2.tgz",
+
      "integrity": "sha512-7Lu2zMQnmHHQGKXVvCOhSziQMpa+R2hMHFefzbYoYMHeaXR0uXqNeOc3JeQQQ8/6Xa2Br/P1IQTLzV09xxAiUQ==",
+
      "dev": true,
+
      "dependencies": {
+
        "htmlparser2": "^6.0.0"
+
      }
+
    },
    "node_modules/@types/sass": {
      "version": "1.43.1",
      "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.43.1.tgz",
@@ -5366,6 +5377,14 @@
      "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
      "dev": true
    },
+
    "node_modules/deepmerge": {
+
      "version": "4.2.2",
+
      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+
      "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+
      "engines": {
+
        "node": ">=0.10.0"
+
      }
+
    },
    "node_modules/default-require-extensions": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz",
@@ -5558,6 +5577,19 @@
      "integrity": "sha512-7X6GvzjYf4yTdRKuCVScV+aA9Fvh5r8WzWrXBH9w82ZWB/eYDMGCnazoC/YAqAzUJWHzLOnZqr46K3iEyUhUvw==",
      "dev": true
    },
+
    "node_modules/dom-serializer": {
+
      "version": "1.3.2",
+
      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
+
      "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
+
      "dependencies": {
+
        "domelementtype": "^2.0.1",
+
        "domhandler": "^4.2.0",
+
        "entities": "^2.0.0"
+
      },
+
      "funding": {
+
        "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+
      }
+
    },
    "node_modules/domain-browser": {
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
@@ -5568,6 +5600,44 @@
        "npm": ">=1.2"
      }
    },
+
    "node_modules/domelementtype": {
+
      "version": "2.2.0",
+
      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
+
      "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==",
+
      "funding": [
+
        {
+
          "type": "github",
+
          "url": "https://github.com/sponsors/fb55"
+
        }
+
      ]
+
    },
+
    "node_modules/domhandler": {
+
      "version": "4.3.0",
+
      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
+
      "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
+
      "dependencies": {
+
        "domelementtype": "^2.2.0"
+
      },
+
      "engines": {
+
        "node": ">= 4"
+
      },
+
      "funding": {
+
        "url": "https://github.com/fb55/domhandler?sponsor=1"
+
      }
+
    },
+
    "node_modules/domutils": {
+
      "version": "2.8.0",
+
      "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
+
      "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
+
      "dependencies": {
+
        "dom-serializer": "^1.0.1",
+
        "domelementtype": "^2.2.0",
+
        "domhandler": "^4.2.0"
+
      },
+
      "funding": {
+
        "url": "https://github.com/fb55/domutils?sponsor=1"
+
      }
+
    },
    "node_modules/duplexer2": {
      "version": "0.1.4",
      "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
@@ -5642,6 +5712,14 @@
        "node": ">=8.6"
      }
    },
+
    "node_modules/entities": {
+
      "version": "2.2.0",
+
      "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+
      "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+
      "funding": {
+
        "url": "https://github.com/fb55/entities?sponsor=1"
+
      }
+
    },
    "node_modules/err-code": {
      "version": "3.0.1",
      "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz",
@@ -5972,7 +6050,6 @@
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
-
      "dev": true,
      "engines": {
        "node": ">=10"
      },
@@ -7141,6 +7218,24 @@
        "node": ">=0.10"
      }
    },
+
    "node_modules/htmlparser2": {
+
      "version": "6.1.0",
+
      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
+
      "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==",
+
      "funding": [
+
        "https://github.com/fb55/htmlparser2?sponsor=1",
+
        {
+
          "type": "github",
+
          "url": "https://github.com/sponsors/fb55"
+
        }
+
      ],
+
      "dependencies": {
+
        "domelementtype": "^2.0.1",
+
        "domhandler": "^4.0.0",
+
        "domutils": "^2.5.2",
+
        "entities": "^2.0.0"
+
      }
+
    },
    "node_modules/http-signature": {
      "version": "1.3.6",
      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz",
@@ -7541,6 +7636,14 @@
        "node": ">=8"
      }
    },
+
    "node_modules/is-plain-object": {
+
      "version": "5.0.0",
+
      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+
      "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+
      "engines": {
+
        "node": ">=0.10.0"
+
      }
+
    },
    "node_modules/is-regex": {
      "version": "1.1.4",
      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
@@ -8932,6 +9035,11 @@
        "safe-buffer": "^5.1.1"
      }
    },
+
    "node_modules/parse-srcset": {
+
      "version": "1.0.2",
+
      "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz",
+
      "integrity": "sha1-8r0iH2zJcKk42IVWq8WJyqqiveE="
+
    },
    "node_modules/pascal-case": {
      "version": "3.1.2",
      "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz",
@@ -9027,8 +9135,7 @@
    "node_modules/picocolors": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
-
      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
-
      "devOptional": true
+
      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
    },
    "node_modules/picomatch": {
      "version": "2.3.1",
@@ -9075,7 +9182,6 @@
      "version": "8.4.6",
      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz",
      "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==",
-
      "devOptional": true,
      "dependencies": {
        "nanoid": "^3.2.0",
        "picocolors": "^1.0.0",
@@ -9937,6 +10043,19 @@
        "rimraf": "bin.js"
      }
    },
+
    "node_modules/sanitize-html": {
+
      "version": "2.6.1",
+
      "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.6.1.tgz",
+
      "integrity": "sha512-DzjSz3H5qDntD7s1TcWCSoRPmNR8UmA+y+xZQOvWgjATe2Br9ZW73+vD3Pj6Snrg0RuEuJdXgrKvnYuiuixRkA==",
+
      "dependencies": {
+
        "deepmerge": "^4.2.2",
+
        "escape-string-regexp": "^4.0.0",
+
        "htmlparser2": "^6.0.0",
+
        "is-plain-object": "^5.0.0",
+
        "parse-srcset": "^1.0.2",
+
        "postcss": "^8.3.11"
+
      }
+
    },
    "node_modules/scrypt-js": {
      "version": "3.0.1",
      "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz",
@@ -10123,7 +10242,6 @@
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
-
      "devOptional": true,
      "engines": {
        "node": ">=0.10.0"
      }
@@ -13778,6 +13896,15 @@
      "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz",
      "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg=="
    },
+
    "@types/sanitize-html": {
+
      "version": "2.6.2",
+
      "resolved": "https://registry.npmjs.org/@types/sanitize-html/-/sanitize-html-2.6.2.tgz",
+
      "integrity": "sha512-7Lu2zMQnmHHQGKXVvCOhSziQMpa+R2hMHFefzbYoYMHeaXR0uXqNeOc3JeQQQ8/6Xa2Br/P1IQTLzV09xxAiUQ==",
+
      "dev": true,
+
      "requires": {
+
        "htmlparser2": "^6.0.0"
+
      }
+
    },
    "@types/sass": {
      "version": "1.43.1",
      "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.43.1.tgz",
@@ -15420,6 +15547,11 @@
      "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
      "dev": true
    },
+
    "deepmerge": {
+
      "version": "4.2.2",
+
      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+
      "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
+
    },
    "default-require-extensions": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz",
@@ -15587,12 +15719,45 @@
      "integrity": "sha512-7X6GvzjYf4yTdRKuCVScV+aA9Fvh5r8WzWrXBH9w82ZWB/eYDMGCnazoC/YAqAzUJWHzLOnZqr46K3iEyUhUvw==",
      "dev": true
    },
+
    "dom-serializer": {
+
      "version": "1.3.2",
+
      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
+
      "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
+
      "requires": {
+
        "domelementtype": "^2.0.1",
+
        "domhandler": "^4.2.0",
+
        "entities": "^2.0.0"
+
      }
+
    },
    "domain-browser": {
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
      "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
      "dev": true
    },
+
    "domelementtype": {
+
      "version": "2.2.0",
+
      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
+
      "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A=="
+
    },
+
    "domhandler": {
+
      "version": "4.3.0",
+
      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz",
+
      "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==",
+
      "requires": {
+
        "domelementtype": "^2.2.0"
+
      }
+
    },
+
    "domutils": {
+
      "version": "2.8.0",
+
      "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
+
      "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
+
      "requires": {
+
        "dom-serializer": "^1.0.1",
+
        "domelementtype": "^2.2.0",
+
        "domhandler": "^4.2.0"
+
      }
+
    },
    "duplexer2": {
      "version": "0.1.4",
      "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
@@ -15664,6 +15829,11 @@
        "ansi-colors": "^4.1.1"
      }
    },
+
    "entities": {
+
      "version": "2.2.0",
+
      "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+
      "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="
+
    },
    "err-code": {
      "version": "3.0.1",
      "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz",
@@ -15872,8 +16042,7 @@
    "escape-string-regexp": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
-
      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
-
      "dev": true
+
      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
    },
    "eslint": {
      "version": "7.32.0",
@@ -16743,6 +16912,17 @@
      "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=",
      "dev": true
    },
+
    "htmlparser2": {
+
      "version": "6.1.0",
+
      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
+
      "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==",
+
      "requires": {
+
        "domelementtype": "^2.0.1",
+
        "domhandler": "^4.0.0",
+
        "domutils": "^2.5.2",
+
        "entities": "^2.0.0"
+
      }
+
    },
    "http-signature": {
      "version": "1.3.6",
      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz",
@@ -17019,6 +17199,11 @@
      "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
      "dev": true
    },
+
    "is-plain-object": {
+
      "version": "5.0.0",
+
      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+
      "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
+
    },
    "is-regex": {
      "version": "1.1.4",
      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
@@ -18099,6 +18284,11 @@
        "safe-buffer": "^5.1.1"
      }
    },
+
    "parse-srcset": {
+
      "version": "1.0.2",
+
      "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz",
+
      "integrity": "sha1-8r0iH2zJcKk42IVWq8WJyqqiveE="
+
    },
    "pascal-case": {
      "version": "3.1.2",
      "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz",
@@ -18176,8 +18366,7 @@
    "picocolors": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
-
      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
-
      "devOptional": true
+
      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
    },
    "picomatch": {
      "version": "2.3.1",
@@ -18209,7 +18398,6 @@
      "version": "8.4.6",
      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz",
      "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==",
-
      "devOptional": true,
      "requires": {
        "nanoid": "^3.2.0",
        "picocolors": "^1.0.0",
@@ -18864,6 +19052,19 @@
        }
      }
    },
+
    "sanitize-html": {
+
      "version": "2.6.1",
+
      "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.6.1.tgz",
+
      "integrity": "sha512-DzjSz3H5qDntD7s1TcWCSoRPmNR8UmA+y+xZQOvWgjATe2Br9ZW73+vD3Pj6Snrg0RuEuJdXgrKvnYuiuixRkA==",
+
      "requires": {
+
        "deepmerge": "^4.2.2",
+
        "escape-string-regexp": "^4.0.0",
+
        "htmlparser2": "^6.0.0",
+
        "is-plain-object": "^5.0.0",
+
        "parse-srcset": "^1.0.2",
+
        "postcss": "^8.3.11"
+
      }
+
    },
    "scrypt-js": {
      "version": "3.0.1",
      "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz",
@@ -19004,8 +19205,7 @@
    "source-map-js": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
-
      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
-
      "devOptional": true
+
      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
    },
    "sourcemap-codec": {
      "version": "1.4.8",
modified package.json
@@ -17,6 +17,7 @@
    "@sveltejs/vite-plugin-svelte": "^1.0.0-next.36",
    "@testing-library/cypress": "^8.0.2",
    "@tsconfig/svelte": "^1.0.13",
+
    "@types/sanitize-html": "^2.6.2",
    "@typescript-eslint/eslint-plugin": "^4.26.1",
    "@typescript-eslint/parser": "^4.26.1",
    "cypress": "^9.3.1",
@@ -52,6 +53,7 @@
    "multibase": "^4.0.4",
    "multihashes": "^4.0.2",
    "pure-svg-code": "^1.0.6",
+
    "sanitize-html": "^2.6.1",
    "svelte": "^3.44.3",
    "svelte-preprocess": "^4.7.2",
    "svelte-routing": "^1.6.0"
modified src/Markdown.svelte
@@ -1,11 +1,28 @@
<script lang="ts">
  import { onMount } from "svelte";
  import { marked } from "marked";
+
  import sanitizeHtml from 'sanitize-html';

  export let content: string;

  let container: HTMLElement;

+
  const sanitize = (content: string): string => {
+
    return sanitizeHtml(marked.parse(content), {
+
      allowedTags: sanitizeHtml.defaults.allowedTags.concat([
+
        "img",
+
        "audio",
+
        "video",
+
      ]),
+
      allowedAttributes: {
+
        ...sanitizeHtml.defaults.allowedAttributes,
+
        video: ["src"],
+
        audio: ["src"],
+
      },
+
      disallowedTagsMode: "escape",
+
    });
+
  };
+

  onMount(() => {
    // Don't underline <a> tags that contain images.
    let elems = container.querySelectorAll("a");
@@ -162,6 +179,6 @@

{#if content}
  <div class="markdown" bind:this={container}>
-
    {@html marked(content)}
+
    {@html marked(sanitize(content))}
  </div>
{/if}