From c55a9eace6f556b402cf8375dbd325fcf72a2b78 Mon Sep 17 00:00:00 2001 From: Julian Kropff Date: Sun, 26 Apr 2026 16:16:28 +0200 Subject: [PATCH] Add: Block file downloads in Casono Browser --- .../CasinoBrowserController.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/CasinoBrowserController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/CasinoBrowserController.java index b6f7fb2..e945d45 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/CasinoBrowserController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/ui/gameui/gameuicomponents/CasinoBrowserController.java @@ -192,6 +192,13 @@ public class CasinoBrowserController { WebView webView = new WebView(); WebEngine engine = webView.getEngine(); + engine.locationProperty().addListener((obs, oldUrl, newUrl) -> { + if (isDownloadUrl(newUrl)) { + LOGGER.warn("Download navigation blocked: " + newUrl); + engine.getLoadWorker().cancel(); + } + }); + engine.setJavaScriptEnabled(false); configurePopupBlocker(engine); @@ -633,6 +640,15 @@ public class CasinoBrowserController { URI uri = new URI(url); String scheme = uri.getScheme(); + String fullUrl = uri.toString(); + + if (isDownloadUrl(fullUrl)) { + securityLabel.setText("BLOCKED DOWNLOAD"); + + LOGGER.warn("Download blocked: " + fullUrl); + return; + } + if ("file".equalsIgnoreCase(scheme)) { Path allowed = Paths.get( @@ -725,4 +741,16 @@ public class CasinoBrowserController { return true; } + + /** + * Checks if a given URL points to a downloadable file based on its extension. + * + * @param url the URL to check + * @return true if the URL is likely a download link, false otherwise + */ + private static boolean isDownloadUrl(String url) { + if (url == null) return false; + + return url.matches(".*\\.(exe|zip|dmg|msi|apk|jar|pdf)(\\?.*)?$"); + } }