From 07b7c991f0b5fda80a3812962b40fe44c8b21dea Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Wed, 15 Apr 2026 13:21:45 +0100 Subject: [PATCH] desktop mobile QR fixes (#6069) --- .../software/common/util/GeneralUtils.java | 21 +++++++++++++++++++ .../controller/api/misc/ConfigController.java | 12 ++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/app/common/src/main/java/stirling/software/common/util/GeneralUtils.java b/app/common/src/main/java/stirling/software/common/util/GeneralUtils.java index a0086ea346..61ba8670fd 100644 --- a/app/common/src/main/java/stirling/software/common/util/GeneralUtils.java +++ b/app/common/src/main/java/stirling/software/common/util/GeneralUtils.java @@ -1183,4 +1183,25 @@ public class GeneralUtils { } } } + + public String getLocalNetworkIp() { + try { + Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); + if (interfaces == null) return null; + while (interfaces.hasMoreElements()) { + NetworkInterface iface = interfaces.nextElement(); + if (!iface.isUp() || iface.isLoopback() || iface.isVirtual()) continue; + Enumeration addresses = iface.getInetAddresses(); + while (addresses.hasMoreElements()) { + InetAddress addr = addresses.nextElement(); + if (addr instanceof Inet4Address && addr.isSiteLocalAddress()) { + return addr.getHostAddress(); + } + } + } + } catch (Exception e) { + log.warn("Failed to detect local network IP", e); + } + return null; + } } diff --git a/app/core/src/main/java/stirling/software/SPDF/controller/api/misc/ConfigController.java b/app/core/src/main/java/stirling/software/SPDF/controller/api/misc/ConfigController.java index 439436a44c..d4e61f9e81 100644 --- a/app/core/src/main/java/stirling/software/SPDF/controller/api/misc/ConfigController.java +++ b/app/core/src/main/java/stirling/software/SPDF/controller/api/misc/ConfigController.java @@ -20,6 +20,7 @@ import stirling.software.SPDF.config.InitialSetup; import stirling.software.SPDF.controller.api.security.TimestampController; import stirling.software.common.annotations.api.ConfigApi; import stirling.software.common.configuration.AppConfig; +import stirling.software.common.util.GeneralUtils; import stirling.software.common.model.ApplicationProperties; import stirling.software.common.service.ServerCertificateServiceInterface; import stirling.software.common.service.UserServiceInterface; @@ -122,8 +123,16 @@ public class ConfigController { configData.put("contextPath", appConfig.getContextPath()); configData.put("serverPort", appConfig.getServerPort()); - // Add frontendUrl for mobile scanner QR codes String frontendUrl = applicationProperties.getSystem().getFrontendUrl(); + if ((frontendUrl == null || frontendUrl.isBlank()) + && Boolean.parseBoolean( + System.getProperty("STIRLING_PDF_TAURI_MODE", "false"))) { + String localIp = GeneralUtils.getLocalNetworkIp(); + if (localIp != null) { + String scheme = appConfig.getBackendUrl().startsWith("https") ? "https" : "http"; + frontendUrl = scheme + "://" + localIp + ":" + appConfig.getServerPort(); + } + } configData.put("frontendUrl", frontendUrl != null ? frontendUrl : ""); // Add mobile scanner settings @@ -385,4 +394,5 @@ public class ConfigController { boolean enabled = endpointConfiguration.isGroupEnabled(group); return ResponseEntity.ok(enabled); } + }