From b8032378f62d428a8cb83801c9db616d915d689e Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Tue, 25 Mar 2025 09:27:37 -0400 Subject: [PATCH] Only deprecate client on 499s from chat service. --- .../RemoteDeprecationDetectorInterceptor.java | 31 ----------------- .../RemoteDeprecationDetectorInterceptor.kt | 33 +++++++++++++++++++ .../push/SignalServiceNetworkAccess.kt | 2 +- 3 files changed, 34 insertions(+), 32 deletions(-) delete mode 100644 app/src/main/java/org/thoughtcrime/securesms/net/RemoteDeprecationDetectorInterceptor.java create mode 100644 app/src/main/java/org/thoughtcrime/securesms/net/RemoteDeprecationDetectorInterceptor.kt diff --git a/app/src/main/java/org/thoughtcrime/securesms/net/RemoteDeprecationDetectorInterceptor.java b/app/src/main/java/org/thoughtcrime/securesms/net/RemoteDeprecationDetectorInterceptor.java deleted file mode 100644 index f4ed3c9db3..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/net/RemoteDeprecationDetectorInterceptor.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.thoughtcrime.securesms.net; - -import androidx.annotation.NonNull; - -import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.keyvalue.SignalStore; - -import java.io.IOException; - -import okhttp3.Interceptor; -import okhttp3.Response; - -/** - * Marks the client as remotely-deprecated when it receives a 499 response. - */ -public final class RemoteDeprecationDetectorInterceptor implements Interceptor { - - private static final String TAG = Log.tag(RemoteDeprecationDetectorInterceptor.class); - - @Override - public @NonNull Response intercept(@NonNull Chain chain) throws IOException { - Response response = chain.proceed(chain.request()); - - if (response.code() == 499 && !SignalStore.misc().isClientDeprecated()) { - Log.w(TAG, "Received 499. Client version is deprecated.", true); - SignalStore.misc().setClientDeprecated(true); - } - - return response; - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/net/RemoteDeprecationDetectorInterceptor.kt b/app/src/main/java/org/thoughtcrime/securesms/net/RemoteDeprecationDetectorInterceptor.kt new file mode 100644 index 0000000000..f0c31beb11 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/net/RemoteDeprecationDetectorInterceptor.kt @@ -0,0 +1,33 @@ +package org.thoughtcrime.securesms.net + +import okhttp3.Interceptor +import okhttp3.Response +import org.signal.core.util.logging.Log +import org.signal.core.util.logging.Log.tag +import org.signal.core.util.orNull +import org.thoughtcrime.securesms.keyvalue.SignalStore.Companion.misc +import org.whispersystems.signalservice.internal.configuration.SignalServiceConfiguration +import java.io.IOException + +/** + * Marks the client as remotely-deprecated when it receives a 499 response. + */ +class RemoteDeprecationDetectorInterceptor(private val getConfiguration: () -> SignalServiceConfiguration) : Interceptor { + + companion object { + private val TAG = tag(RemoteDeprecationDetectorInterceptor::class.java) + } + + @Throws(IOException::class) + override fun intercept(chain: Interceptor.Chain): Response { + val request = chain.request() + val response = chain.proceed(request) + + if (response.code == 499 && !misc.isClientDeprecated && getConfiguration().signalServiceUrls.any { request.url.toString().startsWith(it.url) && it.hostHeader.orNull() == request.header("host") }) { + Log.w(TAG, "Received 499. Client version is deprecated.", true) + misc.isClientDeprecated = true + } + + return response + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/push/SignalServiceNetworkAccess.kt b/app/src/main/java/org/thoughtcrime/securesms/push/SignalServiceNetworkAccess.kt index ceb4f2871e..6d75dc7348 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/push/SignalServiceNetworkAccess.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/push/SignalServiceNetworkAccess.kt @@ -141,7 +141,7 @@ class SignalServiceNetworkAccess(context: Context) { private val interceptors: List = listOf( StandardUserAgentInterceptor(), - RemoteDeprecationDetectorInterceptor(), + RemoteDeprecationDetectorInterceptor(this::getConfiguration), DeprecatedClientPreventionInterceptor(), DeviceTransferBlockingInterceptor.getInstance() )