Użyj origin realtime z bootstrapu
This commit is contained in:
@@ -117,6 +117,7 @@ data class RealtimeConfigDto(
|
|||||||
val reverbEnabled: Boolean = false,
|
val reverbEnabled: Boolean = false,
|
||||||
val reverbAppKey: String? = null,
|
val reverbAppKey: String? = null,
|
||||||
val reverbWsBaseUrl: String? = null,
|
val reverbWsBaseUrl: String? = null,
|
||||||
|
val reverbOrigin: String? = null,
|
||||||
)
|
)
|
||||||
|
|
||||||
data class RoutesBucketDto(
|
data class RoutesBucketDto(
|
||||||
|
|||||||
@@ -43,17 +43,17 @@ class DriverRepositoryLiveSyncGateway(
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface LiveWebSocketFactory {
|
interface LiveWebSocketFactory {
|
||||||
fun newWebSocket(url: String, listener: WebSocketListener): WebSocket
|
fun newWebSocket(url: String, origin: String?, listener: WebSocketListener): WebSocket
|
||||||
}
|
}
|
||||||
|
|
||||||
class OkHttpLiveWebSocketFactory(
|
class OkHttpLiveWebSocketFactory(
|
||||||
private val client: OkHttpClient,
|
private val client: OkHttpClient,
|
||||||
) : LiveWebSocketFactory {
|
) : LiveWebSocketFactory {
|
||||||
override fun newWebSocket(url: String, listener: WebSocketListener): WebSocket =
|
override fun newWebSocket(url: String, origin: String?, listener: WebSocketListener): WebSocket =
|
||||||
client.newWebSocket(
|
client.newWebSocket(
|
||||||
Request.Builder()
|
Request.Builder()
|
||||||
.url(url)
|
.url(url)
|
||||||
.header("Origin", websocketOrigin(url))
|
.header("Origin", origin?.takeIf { it.isNotBlank() } ?: websocketOrigin(url))
|
||||||
.build(),
|
.build(),
|
||||||
listener,
|
listener,
|
||||||
)
|
)
|
||||||
@@ -248,7 +248,7 @@ class DriverLiveSyncClient(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun connectNow(resetAttempt: Boolean = false) {
|
private fun connectNow(resetAttempt: Boolean = false) {
|
||||||
val wsUrl = synchronized(lock) {
|
val (wsUrl, origin) = synchronized(lock) {
|
||||||
val config = realtimeConfig ?: return
|
val config = realtimeConfig ?: return
|
||||||
val id = driverId ?: return
|
val id = driverId ?: return
|
||||||
if (!desiredActive || !foregroundActive || !networkAvailable || !isConfigUsable(config)) return
|
if (!desiredActive || !foregroundActive || !networkAvailable || !isConfigUsable(config)) return
|
||||||
@@ -262,11 +262,15 @@ class DriverLiveSyncClient(
|
|||||||
|
|
||||||
val appKey = config.reverbAppKey.orEmpty()
|
val appKey = config.reverbAppKey.orEmpty()
|
||||||
val wsBaseUrl = config.reverbWsBaseUrl.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(
|
val socket = webSocketFactory.newWebSocket(
|
||||||
wsUrl,
|
wsUrl,
|
||||||
|
origin,
|
||||||
object : WebSocketListener() {
|
object : WebSocketListener() {
|
||||||
override fun onMessage(webSocket: WebSocket, text: String) {
|
override fun onMessage(webSocket: WebSocket, text: String) {
|
||||||
handleMessage(webSocket, text)
|
handleMessage(webSocket, text)
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ class DriverLiveSyncClientTest {
|
|||||||
reverbEnabled = true,
|
reverbEnabled = true,
|
||||||
reverbAppKey = "app-key",
|
reverbAppKey = "app-key",
|
||||||
reverbWsBaseUrl = "wss://example.test/app",
|
reverbWsBaseUrl = "wss://example.test/app",
|
||||||
|
reverbOrigin = "https://bootstrap-origin.test",
|
||||||
)
|
)
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -32,6 +33,16 @@ class DriverLiveSyncClientTest {
|
|||||||
assertEquals("http://localhost:8080", websocketOrigin("ws://localhost:8080/app/app-key"))
|
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
|
@Test
|
||||||
fun reconnectsWithBackoffAfterSocketFailure() = runTest {
|
fun reconnectsWithBackoffAfterSocketFailure() = runTest {
|
||||||
val factory = FakeWebSocketFactory()
|
val factory = FakeWebSocketFactory()
|
||||||
@@ -211,10 +222,12 @@ class DriverLiveSyncClientTest {
|
|||||||
|
|
||||||
private class FakeWebSocketFactory : LiveWebSocketFactory {
|
private class FakeWebSocketFactory : LiveWebSocketFactory {
|
||||||
val sockets = mutableListOf<FakeWebSocket>()
|
val sockets = mutableListOf<FakeWebSocket>()
|
||||||
|
val origins = mutableListOf<String?>()
|
||||||
|
|
||||||
override fun newWebSocket(url: String, listener: WebSocketListener): WebSocket {
|
override fun newWebSocket(url: String, origin: String?, listener: WebSocketListener): WebSocket {
|
||||||
val socket = FakeWebSocket(listener)
|
val socket = FakeWebSocket(listener)
|
||||||
sockets += socket
|
sockets += socket
|
||||||
|
origins += origin
|
||||||
return socket
|
return socket
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user