diff --git a/apps/android/app/src/main/java/ai/openclaw/app/ui/GatewayConfigResolver.kt b/apps/android/app/src/main/java/ai/openclaw/app/ui/GatewayConfigResolver.kt index 24142f8054b..f3e42e7ad5e 100644 --- a/apps/android/app/src/main/java/ai/openclaw/app/ui/GatewayConfigResolver.kt +++ b/apps/android/app/src/main/java/ai/openclaw/app/ui/GatewayConfigResolver.kt @@ -125,10 +125,9 @@ internal fun parseGatewayEndpoint(rawInput: String): GatewayEndpointConfig? { return parseGatewayEndpointResult(rawInput).config } -internal fun parseGatewayEndpointResult(rawInput: String): GatewayEndpointParseResult { + internal fun parseGatewayEndpointResult(rawInput: String): GatewayEndpointParseResult { val raw = rawInput.trim() if (raw.isEmpty()) return GatewayEndpointParseResult(error = GatewayEndpointValidationError.INVALID_URL) - if (raw.contains('%')) return GatewayEndpointParseResult(error = GatewayEndpointValidationError.INVALID_URL) val normalized = if (raw.contains("://")) raw else "https://$raw" val uri = diff --git a/apps/android/app/src/test/java/ai/openclaw/app/ui/GatewayConfigResolverTest.kt b/apps/android/app/src/test/java/ai/openclaw/app/ui/GatewayConfigResolverTest.kt index d35aa4316ec..3fea8261ca4 100644 --- a/apps/android/app/src/test/java/ai/openclaw/app/ui/GatewayConfigResolverTest.kt +++ b/apps/android/app/src/test/java/ai/openclaw/app/ui/GatewayConfigResolverTest.kt @@ -163,10 +163,23 @@ class GatewayConfigResolverTest { } @Test - fun parseGatewayEndpointRejectsLinkLocalIpv6ZoneCleartextWsUrls() { + fun parseGatewayEndpointAllowsLinkLocalIpv6ZoneCleartextWsUrls() { val parsed = parseGatewayEndpoint("ws://[fe80::1%25eth0]") - assertNull(parsed) + assertEquals("fe80::1%25eth0", parsed?.host) + assertEquals(18789, parsed?.port) + assertEquals(false, parsed?.tls) + assertEquals("http://[fe80::1%25eth0]:18789", parsed?.displayUrl) + } + + @Test + fun parseGatewayEndpointAllowsSecureIpv6ZoneUrls() { + val parsed = parseGatewayEndpoint("wss://[fe80::1%25wlan0]:443") + + assertEquals("fe80::1%25wlan0", parsed?.host) + assertEquals(443, parsed?.port) + assertEquals(true, parsed?.tls) + assertEquals("https://[fe80::1%25wlan0]", parsed?.displayUrl) } @Test