From 7680cd6170f5764086af54abad7ab40fb122649f Mon Sep 17 00:00:00 2001 From: Adam Rauch Date: Thu, 10 Jul 2025 13:16:09 -0700 Subject: [PATCH 1/2] Don't turn Jupyter JSON output into HTML --- .../api/reports/report/r/view/HtmlOutput.java | 3 +++ .../api/reports/report/r/view/IpynbOutput.java | 4 +++- api/src/org/labkey/api/util/PageFlowUtil.java | 17 ++++++++++++----- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/api/src/org/labkey/api/reports/report/r/view/HtmlOutput.java b/api/src/org/labkey/api/reports/report/r/view/HtmlOutput.java index 40a23b1a927..61ba89e4e9f 100644 --- a/api/src/org/labkey/api/reports/report/r/view/HtmlOutput.java +++ b/api/src/org/labkey/api/reports/report/r/view/HtmlOutput.java @@ -90,6 +90,9 @@ public HtmlOutputView(ParamReplacement param, String label) setLabel(label); } + /** + * Loads an HTML file and adds nonces to any embedded <script> tags. Don't call this with files that aren't HTML. + */ @Override protected String renderInternalAsString(File file) throws Exception { diff --git a/api/src/org/labkey/api/reports/report/r/view/IpynbOutput.java b/api/src/org/labkey/api/reports/report/r/view/IpynbOutput.java index 2aba12264b5..d0a67f3dbb4 100644 --- a/api/src/org/labkey/api/reports/report/r/view/IpynbOutput.java +++ b/api/src/org/labkey/api/reports/report/r/view/IpynbOutput.java @@ -31,6 +31,7 @@ import org.labkey.api.util.HtmlString; import org.labkey.api.util.HtmlStringBuilder; import org.labkey.api.util.ImageUtil; +import org.labkey.api.util.PageFlowUtil; import org.labkey.api.view.HttpView; import org.labkey.api.view.ViewContext; @@ -149,7 +150,8 @@ String stripAnsiColors(String s) @Override protected String renderInternalAsString(File file) throws Exception { - String result = StringUtils.trimToEmpty(super.renderInternalAsString(file)); + // Don't call super.renderInternalAsString(file) since we expect JSON + String result = file.exists() ? StringUtils.trimToEmpty(PageFlowUtil.getFileContentsAsString(file)) : ""; try { final JSONObject obj = new JSONObject(result); diff --git a/api/src/org/labkey/api/util/PageFlowUtil.java b/api/src/org/labkey/api/util/PageFlowUtil.java index f071aea5a61..9a4538ca586 100644 --- a/api/src/org/labkey/api/util/PageFlowUtil.java +++ b/api/src/org/labkey/api/util/PageFlowUtil.java @@ -3166,14 +3166,21 @@ public static String addScriptNonces(String html) String ret = ""; if (doc != null) { - addScriptNonces(doc); - try + if (addScriptNonces(doc) > 0) { - ret = convertNodeToHtml(doc); + try + { + ret = convertNodeToHtml(doc); + } + catch (TransformerException | IOException e) + { + throw new RuntimeException(e); + } } - catch (TransformerException | IOException e) + else { - throw new RuntimeException(e); + // If there are no script tags, just return the passed in HTML + ret = html; } } From e2578254ad0236c4741b0d99979f369c7f0c0ab1 Mon Sep 17 00:00:00 2001 From: Adam Rauch Date: Fri, 11 Jul 2025 10:31:05 -0700 Subject: [PATCH 2/2] Remove unnecessary null check --- api/src/org/labkey/api/reports/report/r/view/IpynbOutput.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/org/labkey/api/reports/report/r/view/IpynbOutput.java b/api/src/org/labkey/api/reports/report/r/view/IpynbOutput.java index d0a67f3dbb4..6a58911b498 100644 --- a/api/src/org/labkey/api/reports/report/r/view/IpynbOutput.java +++ b/api/src/org/labkey/api/reports/report/r/view/IpynbOutput.java @@ -93,7 +93,7 @@ public HttpView getView(ViewContext context) { String html = view.renderInternalAsString(file); URI baseURI = new URI(AppProps.getInstance().getBaseServerUrl()); - if (html != null && baseURI != null) + if (html != null) thumb = ImageUtil.webThumbnail(context, html, baseURI); } catch(Exception ignore){}// if we can't get a thumbnail then that is okay; LabKey should use a default