Convert remote config apis to WebSocket.

This commit is contained in:
Cody Henthorne
2025-03-19 11:03:48 -04:00
parent 1e866a1e86
commit 095ae82483
13 changed files with 106 additions and 44 deletions

View File

@@ -57,6 +57,7 @@ import org.whispersystems.signalservice.api.profiles.ProfileApi
import org.whispersystems.signalservice.api.provisioning.ProvisioningApi
import org.whispersystems.signalservice.api.ratelimit.RateLimitChallengeApi
import org.whispersystems.signalservice.api.registration.RegistrationApi
import org.whispersystems.signalservice.api.remoteconfig.RemoteConfigApi
import org.whispersystems.signalservice.api.services.DonationsService
import org.whispersystems.signalservice.api.services.ProfileService
import org.whispersystems.signalservice.api.storage.StorageServiceApi
@@ -346,6 +347,9 @@ object AppDependencies {
val profileApi: ProfileApi
get() = networkModule.profileApi
val remoteConfigApi: RemoteConfigApi
get() = networkModule.remoteConfigApi
@JvmStatic
val okHttpClient: OkHttpClient
get() = networkModule.okHttpClient
@@ -426,5 +430,6 @@ object AppDependencies {
fun provideProvisioningApi(authWebSocket: SignalWebSocket.AuthenticatedWebSocket): ProvisioningApi
fun provideCertificateApi(authWebSocket: SignalWebSocket.AuthenticatedWebSocket): CertificateApi
fun provideProfileApi(authWebSocket: SignalWebSocket.AuthenticatedWebSocket, pushServiceSocket: PushServiceSocket): ProfileApi
fun provideRemoteConfigApi(authWebSocket: SignalWebSocket.AuthenticatedWebSocket): RemoteConfigApi
}
}

View File

@@ -99,6 +99,7 @@ import org.whispersystems.signalservice.api.push.ServiceId.ACI;
import org.whispersystems.signalservice.api.push.ServiceId.PNI;
import org.whispersystems.signalservice.api.ratelimit.RateLimitChallengeApi;
import org.whispersystems.signalservice.api.registration.RegistrationApi;
import org.whispersystems.signalservice.api.remoteconfig.RemoteConfigApi;
import org.whispersystems.signalservice.api.services.DonationsService;
import org.whispersystems.signalservice.api.services.ProfileService;
import org.whispersystems.signalservice.api.storage.StorageServiceApi;
@@ -552,6 +553,11 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider {
return new ProfileApi(authWebSocket, pushServiceSocket);
}
@Override
public @NonNull RemoteConfigApi provideRemoteConfigApi(@NonNull SignalWebSocket.AuthenticatedWebSocket authWebSocket) {
return new RemoteConfigApi(authWebSocket);
}
@VisibleForTesting
static class DynamicCredentialsProvider implements CredentialsProvider {

View File

@@ -43,6 +43,7 @@ import org.whispersystems.signalservice.api.provisioning.ProvisioningApi
import org.whispersystems.signalservice.api.push.TrustStore
import org.whispersystems.signalservice.api.ratelimit.RateLimitChallengeApi
import org.whispersystems.signalservice.api.registration.RegistrationApi
import org.whispersystems.signalservice.api.remoteconfig.RemoteConfigApi
import org.whispersystems.signalservice.api.services.DonationsService
import org.whispersystems.signalservice.api.services.ProfileService
import org.whispersystems.signalservice.api.storage.StorageServiceApi
@@ -208,6 +209,10 @@ class NetworkDependenciesModule(
provider.provideProfileApi(authWebSocket, pushServiceSocket)
}
val remoteConfigApi: RemoteConfigApi by lazy {
provider.provideRemoteConfigApi(authWebSocket)
}
val okHttpClient: OkHttpClient by lazy {
OkHttpClient.Builder()
.addInterceptor(StandardUserAgentInterceptor())

View File

@@ -7,15 +7,14 @@ package org.thoughtcrime.securesms.jobs
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.BuildConfig
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.jobmanager.Job
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.net.SignalNetwork
import org.thoughtcrime.securesms.util.Util
import org.whispersystems.signalservice.api.NetworkResult
import org.whispersystems.signalservice.api.RemoteConfigResult
import org.whispersystems.signalservice.api.remoteconfig.RemoteConfigResult
import kotlin.time.Duration.Companion.days
import kotlin.time.Duration.Companion.seconds
/**
* If we have reason to believe a build is expired, we run this job to double-check by fetching the server time. This prevents false positives from people
@@ -57,13 +56,9 @@ class BuildExpirationConfirmationJob private constructor(params: Parameters) : J
return Result.success()
}
val result: NetworkResult<RemoteConfigResult> = NetworkResult.fromFetch {
AppDependencies.signalServiceAccountManager.remoteConfig
}
return when (result) {
return when (val result: NetworkResult<RemoteConfigResult> = SignalNetwork.remoteConfig.getRemoteConfig()) {
is NetworkResult.Success -> {
val serverTimeMs = result.result.serverEpochTimeSeconds.seconds.inWholeMilliseconds
val serverTimeMs = result.result.serverEpochTimeMilliseconds
SignalStore.misc.setLastKnownServerTime(serverTimeMs, System.currentTimeMillis())
if (Util.getTimeUntilBuildExpiry(serverTimeMs) <= 0) {

View File

@@ -8,8 +8,11 @@ import org.thoughtcrime.securesms.dependencies.AppDependencies;
import org.thoughtcrime.securesms.jobmanager.Job;
import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.net.SignalNetwork;
import org.thoughtcrime.securesms.util.ExceptionHelper;
import org.thoughtcrime.securesms.util.RemoteConfig;
import org.whispersystems.signalservice.api.RemoteConfigResult;
import org.whispersystems.signalservice.api.NetworkResultUtil;
import org.whispersystems.signalservice.api.remoteconfig.RemoteConfigResult;
import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException;
import java.util.concurrent.TimeUnit;
@@ -51,14 +54,14 @@ public class RemoteConfigRefreshJob extends BaseJob {
return;
}
RemoteConfigResult result = AppDependencies.getSignalServiceAccountManager().getRemoteConfig();
RemoteConfigResult result = NetworkResultUtil.toBasicLegacy(SignalNetwork.remoteConfig().getRemoteConfig());
RemoteConfig.update(result.getConfig());
SignalStore.misc().setLastKnownServerTime(TimeUnit.SECONDS.toMillis(result.getServerEpochTimeSeconds()), System.currentTimeMillis());
SignalStore.misc().setLastKnownServerTime(result.getServerEpochTimeMilliseconds(), System.currentTimeMillis());
}
@Override
protected boolean onShouldRetry(@NonNull Exception e) {
return e instanceof PushNetworkException;
return ExceptionHelper.isRetryableIOException(e);
}
@Override

View File

@@ -19,6 +19,7 @@ import org.whispersystems.signalservice.api.payments.PaymentsApi
import org.whispersystems.signalservice.api.profiles.ProfileApi
import org.whispersystems.signalservice.api.provisioning.ProvisioningApi
import org.whispersystems.signalservice.api.ratelimit.RateLimitChallengeApi
import org.whispersystems.signalservice.api.remoteconfig.RemoteConfigApi
import org.whispersystems.signalservice.api.storage.StorageServiceApi
import org.whispersystems.signalservice.api.username.UsernameApi
@@ -81,6 +82,11 @@ object SignalNetwork {
val rateLimitChallenge: RateLimitChallengeApi
get() = AppDependencies.rateLimitChallengeApi
@JvmStatic
@get:JvmName("remoteConfig")
val remoteConfig: RemoteConfigApi
get() = AppDependencies.remoteConfigApi
val storageService: StorageServiceApi
get() = AppDependencies.storageServiceApi

View File

@@ -15,9 +15,11 @@ import org.thoughtcrime.securesms.jobs.RemoteConfigRefreshJob
import org.thoughtcrime.securesms.jobs.Svr3MirrorJob
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.messageprocessingalarm.RoutineMessageFetchReceiver
import org.thoughtcrime.securesms.net.SignalNetwork
import org.thoughtcrime.securesms.util.RemoteConfig.Config
import org.thoughtcrime.securesms.util.RemoteConfig.remoteBoolean
import org.thoughtcrime.securesms.util.RemoteConfig.remoteValue
import org.whispersystems.signalservice.api.NetworkResultUtil
import java.io.IOException
import java.util.TreeMap
import java.util.concurrent.locks.ReentrantLock
@@ -90,7 +92,7 @@ object RemoteConfig {
@WorkerThread
@Throws(IOException::class)
fun refreshSync() {
val result = AppDependencies.signalServiceAccountManager.getRemoteConfig()
val result = NetworkResultUtil.toBasicLegacy(SignalNetwork.remoteConfig.getRemoteConfig())
update(result.config)
}