From e400eefee11072a0fe1710e3352a5b59b0a75ae3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81d=C3=A1m=20Kov=C3=A1cs?= <43071496+adam-kov@users.noreply.github.com> Date: Thu, 26 Jan 2023 18:03:25 +0100 Subject: [PATCH] feat(frontend): Add HTML result rendering (#1160) * feat(frontend): Add HTML result rendering * fix(frontend): Add reference for XSS * fix(frontend): Require approval only in apps * fix(frontend): Require approval in public apps --- .../src/lib/components/DisplayResult.svelte | 34 +++++++++++++++++++ .../apps/components/DisplayComponent.svelte | 5 ++- frontend/src/lib/components/apps/types.ts | 2 ++ .../[workspace]/[...secret]/+page.svelte | 5 ++- 4 files changed, 44 insertions(+), 2 deletions(-) diff --git a/frontend/src/lib/components/DisplayResult.svelte b/frontend/src/lib/components/DisplayResult.svelte index 7099ba9a43..7b6ca3f2fe 100644 --- a/frontend/src/lib/components/DisplayResult.svelte +++ b/frontend/src/lib/components/DisplayResult.svelte @@ -7,11 +7,13 @@ import autosize from 'svelte-autosize' export let result: any + export let requireHtmlApproval = false let resultKind: | 'json' | 'table-col' | 'table-row' + | 'html' | 'png' | 'file' | 'jpeg' @@ -19,9 +21,11 @@ | 'error' | 'approval' | undefined + $: resultKind = inferResultKind(result) let forceJson = false + let enableHtml = false function isRectangularArray(obj: any) { if (!Array.isArray(obj) || obj.length == 0) { @@ -53,6 +57,8 @@ return 'table-row' } else if (keys.map((k) => Array.isArray(result[k])).reduce((a, b) => a && b)) { return 'table-col' + } else if (keys.length == 1 && keys[0] == 'html') { + return 'html' } else if (keys.length == 1 && keys[0] == 'png') { return 'png' } else if (keys.length == 1 && keys[0] == 'jpeg') { @@ -119,6 +125,34 @@ + {:else if !forceJson && resultKind == 'html'} +
Rendering HTML can expose you to XSS attacks. +Only enable it if you trust the author of the script. +
+
diff --git a/frontend/src/lib/components/apps/components/DisplayComponent.svelte b/frontend/src/lib/components/apps/components/DisplayComponent.svelte
index 35757b9bf5..544f8c80ab 100644
--- a/frontend/src/lib/components/apps/components/DisplayComponent.svelte
+++ b/frontend/src/lib/components/apps/components/DisplayComponent.svelte
@@ -1,11 +1,14 @@