diff --git a/internal/template/templates/common/layout.html b/internal/template/templates/common/layout.html index f456c058..19019c1e 100644 --- a/internal/template/templates/common/layout.html +++ b/internal/template/templates/common/layout.html @@ -36,10 +36,10 @@ {{ if and .user .user.Stylesheet }} {{ $stylesheetNonce := nonce }} - + {{ else }} - + {{ end }} diff --git a/internal/ui/static/js/app.js b/internal/ui/static/js/app.js index 00083b20..79ffb4b5 100644 --- a/internal/ui/static/js/app.js +++ b/internal/ui/static/js/app.js @@ -352,7 +352,7 @@ function handleFetchOriginalContent() { response.json().then((data) => { if (data.hasOwnProperty("content") && data.hasOwnProperty("reading_time")) { - document.querySelector(".entry-content").innerHTML = data.content; + document.querySelector(".entry-content").innerHTML = ttpolicy.createHTML(data.content); const entryReadingtimeElement = document.querySelector(".entry-reading-time"); if (entryReadingtimeElement) { entryReadingtimeElement.textContent = data.reading_time; diff --git a/internal/ui/static/js/bootstrap.js b/internal/ui/static/js/bootstrap.js index c83704c3..44d6e716 100644 --- a/internal/ui/static/js/bootstrap.js +++ b/internal/ui/static/js/bootstrap.js @@ -129,7 +129,7 @@ document.addEventListener("DOMContentLoaded", () => { if ("serviceWorker" in navigator) { const scriptElement = document.getElementById("service-worker-script"); if (scriptElement) { - navigator.serviceWorker.register(scriptElement.src); + navigator.serviceWorker.register(ttpolicy.createScriptURL(scriptElement.src)); } } diff --git a/internal/ui/static/js/tt.js b/internal/ui/static/js/tt.js new file mode 100644 index 00000000..f42cc47a --- /dev/null +++ b/internal/ui/static/js/tt.js @@ -0,0 +1,15 @@ +let ttpolicy; +if (window.trustedTypes && trustedTypes.createPolicy) { + //TODO: use an allow-list for `createScriptURL` + if (!ttpolicy) { + ttpolicy = trustedTypes.createPolicy('ttpolicy', { + createScriptURL: src => src, + createHTML: html => html, + }); + } +} else { + ttpolicy = { + createScriptURL: src => src, + createHTML: html => html, + }; +} diff --git a/internal/ui/static/static.go b/internal/ui/static/static.go index fd653b81..3ddff18d 100644 --- a/internal/ui/static/static.go +++ b/internal/ui/static/static.go @@ -113,6 +113,7 @@ func GenerateStylesheetsBundles() error { func GenerateJavascriptBundles() error { var bundles = map[string][]string{ "app": { + "js/tt.js", // has to be first "js/dom_helper.js", "js/touch_handler.js", "js/keyboard_handler.js",