mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-02-26 20:55:10 +00:00
Convert remote config apis to WebSocket.
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user