Skip to content

Commit 95d440a

Browse files
committed
Use DOMPurify to sanitize documentation html
Also add a max number of retries to the docs fetcher
1 parent 5f36fef commit 95d440a

File tree

2 files changed

+41
-30
lines changed

2 files changed

+41
-30
lines changed

src/ui/components/newDocs/docsDialog.svelte

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
1818
let manifest: IDocsManifest
1919
let openPageUrl: Writable<string> = writable('/home')
20+
const maxAttempts = 10
2021
2122
async function load(attemptCount: number = 0) {
2223
manifest = await fetch(API)
@@ -30,6 +31,10 @@
3031
`Failed to fetch docs manifest. (Attempt ${attemptCount + 1})\n` + err.stack
3132
)
3233
// retry
34+
if (attemptCount >= maxAttempts) {
35+
throw new Error(`Failed to fetch docs manifest after ${maxAttempts} attempts.`)
36+
return
37+
}
3338
void load(attemptCount + 1)
3439
})
3540
compilePages()
@@ -44,6 +49,9 @@
4449
4550
function compilePages() {
4651
for (const page of manifest.pages) {
52+
// Sanitize page content
53+
// @ts-ignore
54+
page.content = DOMPurify.sanitize(page.content)
4755
page.content = page.content.replace(
4856
/<h([1-6])>(.+?)<\/h[1-6]>/gm,
4957
(match, p1, p2) =>
@@ -54,9 +62,10 @@
5462
`<a class="animated-java-anchor" onclick="AnimatedJava.docClick('$1')">$2</a>`
5563
)
5664
page.content = page.content.replace(
57-
/<img src="(.+?)" alt="(.+?)">/gm,
58-
(match, p1, p2) => `<img src="${URL + p1}" alt="${p2}">`
65+
/<img alt="(.+?)" src="(.+?)">/gm,
66+
(match, p1, p2) => `<img alt="${p1}" src="${URL + p2}">`
5967
)
68+
console.log(page.content)
6069
}
6170
}
6271
@@ -68,10 +77,6 @@
6877
//
6978
</script>
7079

71-
<script lang="ts">
72-
//
73-
</script>
74-
7580
<div class="docs-container">
7681
{#if manifest}
7782
<div class="index-sidebar">

yarn.lock

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@
1313
integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==
1414

1515
"@babel/parser@^7.16.4":
16-
version "7.21.2"
17-
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.2.tgz#dacafadfc6d7654c3051a66d6fe55b6cb2f2a0b3"
18-
integrity sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==
16+
version "7.21.4"
17+
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17"
18+
integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==
1919

2020
"@babel/types@^7.20.7":
21-
version "7.21.2"
22-
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.2.tgz#92246f6e00f91755893c2876ad653db70c8310d1"
23-
integrity sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==
21+
version "7.21.4"
22+
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4"
23+
integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==
2424
dependencies:
2525
"@babel/helper-string-parser" "^7.19.4"
2626
"@babel/helper-validator-identifier" "^7.19.1"
@@ -1000,14 +1000,15 @@ balanced-match@^1.0.0:
10001000
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
10011001

10021002
"blockbench-types@https://github.com/SnaveSutit/blockbench-types.git":
1003-
version "4.6.0"
1004-
resolved "https://github.com/SnaveSutit/blockbench-types.git#1ece05b016223cc76f007a245636cd9f998bbebb"
1003+
version "4.6.5"
1004+
resolved "https://github.com/SnaveSutit/blockbench-types.git#9e715ebbfb95853e392760b5ab7eee888efd3499"
10051005
dependencies:
10061006
"@babel/types" "^7.20.7"
10071007
"@types/jquery" "^3.5.4"
10081008
"@types/prismjs" "^1.26.0"
10091009
"@types/three" "^0.148.1"
10101010
"@types/tinycolor2" "^1.4.3"
1011+
dompurify "^3.0.1"
10111012
prettier "^2.8.3"
10121013
prismjs "^1.29.0"
10131014
typedoc "^0.23.24"
@@ -1160,6 +1161,11 @@ doctrine@^3.0.0:
11601161
dependencies:
11611162
esutils "^2.0.2"
11621163

1164+
dompurify@^3.0.1:
1165+
version "3.0.1"
1166+
resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.0.1.tgz#a0933f38931b3238934dd632043b727e53004289"
1167+
integrity sha512-60tsgvPKwItxZZdfLmamp0MTcecCta3avOhsLgPZ0qcWt96OasFfhkeIRbJ6br5i0fQawT1/RBGB5L58/Jpwuw==
1168+
11631169
emoji-regex@^8.0.0:
11641170
version "8.0.0"
11651171
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
@@ -1726,12 +1732,7 @@ marked-gfm-heading-id@^3.0.0:
17261732
dependencies:
17271733
github-slugger "^2.0.0"
17281734

1729-
marked@^4.2.12:
1730-
version "4.2.12"
1731-
resolved "https://registry.yarnpkg.com/marked/-/marked-4.2.12.tgz#d69a64e21d71b06250da995dcd065c11083bebb5"
1732-
integrity sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==
1733-
1734-
marked@^4.3.0:
1735+
marked@^4.2.12, marked@^4.3.0:
17351736
version "4.3.0"
17361737
resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3"
17371738
integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==
@@ -1771,9 +1772,9 @@ minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
17711772
brace-expansion "^1.1.7"
17721773

17731774
minimatch@^7.1.3:
1774-
version "7.4.2"
1775-
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.2.tgz#157e847d79ca671054253b840656720cb733f10f"
1776-
integrity sha512-xy4q7wou3vUoC9k1xGTXc+awNdGaGVHtFUaey8tiX4H1QRc04DZ/rmDFwNm2EBsuYEhAZ6SgMmYf3InGY6OauA==
1775+
version "7.4.6"
1776+
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb"
1777+
integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==
17771778
dependencies:
17781779
brace-expansion "^2.0.1"
17791780

@@ -1810,9 +1811,9 @@ ms@2.1.2:
18101811
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
18111812

18121813
nanoid@^3.3.4:
1813-
version "3.3.4"
1814-
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
1815-
integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
1814+
version "3.3.6"
1815+
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
1816+
integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
18161817

18171818
natural-compare-lite@^1.4.0:
18181819
version "1.4.0"
@@ -1920,11 +1921,16 @@ prelude-ls@^1.2.1:
19201921
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
19211922
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
19221923

1923-
prettier@^2.5.1, prettier@^2.8.3:
1924+
prettier@^2.5.1:
19241925
version "2.8.4"
19251926
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.4.tgz#34dd2595629bfbb79d344ac4a91ff948694463c3"
19261927
integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==
19271928

1929+
prettier@^2.8.3:
1930+
version "2.8.7"
1931+
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.7.tgz#bb79fc8729308549d28fe3a98fce73d2c0656450"
1932+
integrity sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==
1933+
19281934
prismjs@^1.29.0:
19291935
version "1.29.0"
19301936
resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12"
@@ -2264,9 +2270,9 @@ type-fest@^0.20.2:
22642270
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
22652271

22662272
typedoc@^0.23.24:
2267-
version "0.23.26"
2268-
resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.23.26.tgz#ae082683698bad68757d8fe619242a56d6b5bf36"
2269-
integrity sha512-5m4KwR5tOLnk0OtMaRn9IdbeRM32uPemN9kur7YK9wFqx8U0CYrvO9aVq6ysdZSV1c824BTm+BuQl2Ze/k1HtA==
2273+
version "0.23.28"
2274+
resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.23.28.tgz#3ce9c36ef1c273fa849d2dea18651855100d3ccd"
2275+
integrity sha512-9x1+hZWTHEQcGoP7qFmlo4unUoVJLB0H/8vfO/7wqTnZxg4kPuji9y3uRzEu0ZKez63OJAUmiGhUrtukC6Uj3w==
22702276
dependencies:
22712277
lunr "^2.3.9"
22722278
marked "^4.2.12"

0 commit comments

Comments
 (0)