From 5a630f84019996640500b57c16beb461c91005a2 Mon Sep 17 00:00:00 2001 From: admin Date: Sun, 12 Jul 2026 21:59:46 +0200 Subject: [PATCH] =?UTF-8?q?U=C5=BCyj=20origin=20realtime=20z=20bootstrapu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../firmatpp/kierowca/data/model/DriverModels.kt | 1 + .../kierowca/sync/DriverLiveSyncClient.kt | 14 +++++++++----- .../kierowca/sync/DriverLiveSyncClientTest.kt | 15 ++++++++++++++- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/pl/firmatpp/kierowca/data/model/DriverModels.kt b/app/src/main/java/pl/firmatpp/kierowca/data/model/DriverModels.kt index 18cd4e9..a6d5404 100644 --- a/app/src/main/java/pl/firmatpp/kierowca/data/model/DriverModels.kt +++ b/app/src/main/java/pl/firmatpp/kierowca/data/model/DriverModels.kt @@ -117,6 +117,7 @@ data class RealtimeConfigDto( val reverbEnabled: Boolean = false, val reverbAppKey: String? = null, val reverbWsBaseUrl: String? = null, + val reverbOrigin: String? = null, ) data class RoutesBucketDto( diff --git a/app/src/main/java/pl/firmatpp/kierowca/sync/DriverLiveSyncClient.kt b/app/src/main/java/pl/firmatpp/kierowca/sync/DriverLiveSyncClient.kt index ccd03b4..a3ffe0b 100644 --- a/app/src/main/java/pl/firmatpp/kierowca/sync/DriverLiveSyncClient.kt +++ b/app/src/main/java/pl/firmatpp/kierowca/sync/DriverLiveSyncClient.kt @@ -43,17 +43,17 @@ class DriverRepositoryLiveSyncGateway( } interface LiveWebSocketFactory { - fun newWebSocket(url: String, listener: WebSocketListener): WebSocket + fun newWebSocket(url: String, origin: String?, listener: WebSocketListener): WebSocket } class OkHttpLiveWebSocketFactory( private val client: OkHttpClient, ) : LiveWebSocketFactory { - override fun newWebSocket(url: String, listener: WebSocketListener): WebSocket = + override fun newWebSocket(url: String, origin: String?, listener: WebSocketListener): WebSocket = client.newWebSocket( Request.Builder() .url(url) - .header("Origin", websocketOrigin(url)) + .header("Origin", origin?.takeIf { it.isNotBlank() } ?: websocketOrigin(url)) .build(), listener, ) @@ -248,7 +248,7 @@ class DriverLiveSyncClient( } private fun connectNow(resetAttempt: Boolean = false) { - val wsUrl = synchronized(lock) { + val (wsUrl, origin) = synchronized(lock) { val config = realtimeConfig ?: return val id = driverId ?: return if (!desiredActive || !foregroundActive || !networkAvailable || !isConfigUsable(config)) return @@ -262,11 +262,15 @@ class DriverLiveSyncClient( val appKey = config.reverbAppKey.orEmpty() val wsBaseUrl = config.reverbWsBaseUrl.orEmpty() - wsBaseUrl.trimEnd('/') + "/" + appKey + "?protocol=7&client=android&version=1.0&flash=false" + Pair( + wsBaseUrl.trimEnd('/') + "/" + appKey + "?protocol=7&client=android&version=1.0&flash=false", + config.reverbOrigin, + ) } val socket = webSocketFactory.newWebSocket( wsUrl, + origin, object : WebSocketListener() { override fun onMessage(webSocket: WebSocket, text: String) { handleMessage(webSocket, text) diff --git a/app/src/test/java/pl/firmatpp/kierowca/sync/DriverLiveSyncClientTest.kt b/app/src/test/java/pl/firmatpp/kierowca/sync/DriverLiveSyncClientTest.kt index c4544f0..03947a7 100644 --- a/app/src/test/java/pl/firmatpp/kierowca/sync/DriverLiveSyncClientTest.kt +++ b/app/src/test/java/pl/firmatpp/kierowca/sync/DriverLiveSyncClientTest.kt @@ -23,6 +23,7 @@ class DriverLiveSyncClientTest { reverbEnabled = true, reverbAppKey = "app-key", reverbWsBaseUrl = "wss://example.test/app", + reverbOrigin = "https://bootstrap-origin.test", ) @Test @@ -32,6 +33,16 @@ class DriverLiveSyncClientTest { assertEquals("http://localhost:8080", websocketOrigin("ws://localhost:8080/app/app-key")) } + @Test + fun passesBootstrapOriginToWebSocketFactory() = runTest { + val factory = FakeWebSocketFactory() + val client = liveClient(factory = factory, scope = backgroundScope) + + client.start("driver-1", config) + + assertEquals("https://bootstrap-origin.test", factory.origins.single()) + } + @Test fun reconnectsWithBackoffAfterSocketFailure() = runTest { val factory = FakeWebSocketFactory() @@ -211,10 +222,12 @@ class DriverLiveSyncClientTest { private class FakeWebSocketFactory : LiveWebSocketFactory { val sockets = mutableListOf() + val origins = mutableListOf() - override fun newWebSocket(url: String, listener: WebSocketListener): WebSocket { + override fun newWebSocket(url: String, origin: String?, listener: WebSocketListener): WebSocket { val socket = FakeWebSocket(listener) sockets += socket + origins += origin return socket } }