From 8c3a22aa5c2b9098b5d9bbb68441f43ce5fe6c97 Mon Sep 17 00:00:00 2001 From: CalDescent Date: Thu, 1 Jul 2021 11:21:40 +0100 Subject: [PATCH] Improved link replacement criteria. --- .../qortal/api/resource/WebsiteResource.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/qortal/api/resource/WebsiteResource.java b/src/main/java/org/qortal/api/resource/WebsiteResource.java index 72d3166d..f504e09b 100644 --- a/src/main/java/org/qortal/api/resource/WebsiteResource.java +++ b/src/main/java/org/qortal/api/resource/WebsiteResource.java @@ -298,7 +298,7 @@ public class WebsiteResource { Elements href = document.select("[href]"); for (Element element : href) { String elementHtml = element.attr("href"); - if (this.isRelativeLink(elementHtml)) { + if (this.shouldReplaceLink(elementHtml)) { String slash = (elementHtml.startsWith("/") ? "" : File.separator); element.attr("href", "/site/" +resourceId + slash + element.attr("href")); } @@ -306,7 +306,7 @@ public class WebsiteResource { Elements src = document.select("[src]"); for (Element element : src) { String elementHtml = element.attr("src"); - if (this.isRelativeLink(elementHtml)) { + if (this.shouldReplaceLink(elementHtml)) { String slash = (elementHtml.startsWith("/") ? "" : File.separator); element.attr("src", "/site/" +resourceId + slash + element.attr("src")); } @@ -314,7 +314,7 @@ public class WebsiteResource { Elements srcset = document.select("[srcset]"); for (Element element : srcset) { String elementHtml = element.attr("srcset").trim(); - if (this.isRelativeLink(elementHtml)) { + if (this.shouldReplaceLink(elementHtml)) { String[] parts = element.attr("srcset").split(","); ArrayList newParts = new ArrayList<>(); for (String part : parts) { @@ -336,7 +336,7 @@ public class WebsiteResource { String link = parts2[0]; if (link != null) { link = this.removeQuotes(link); - if (this.isRelativeLink(link)) { + if (this.shouldReplaceLink(link)) { String slash = (link.startsWith("/") ? "" : "/"); String modifiedLink = "url('" + "/site/" + resourceId + slash + link + "')"; element.attr("style", parts[0] + modifiedLink + parts2[1]); @@ -349,11 +349,12 @@ public class WebsiteResource { return data; } - private boolean isRelativeLink(String elementHtml) { + private boolean shouldReplaceLink(String elementHtml) { List prefixes = new ArrayList<>(); - prefixes.add("http"); - prefixes.add("//"); - prefixes.add("javascript:"); + prefixes.add("http"); // Don't modify absolute links + prefixes.add("//"); // Don't modify absolute links + prefixes.add("javascript:"); // Don't modify javascript + prefixes.add("../"); // Don't modify valid relative links for (String prefix : prefixes) { if (elementHtml.startsWith(prefix)) { return false;