Move RemoteConfigResponse.

This commit is contained in:
Greyson Parrelli
2026-05-13 14:34:50 -04:00
committed by Michelle Tang
parent 1ce41edc7f
commit 6339b38dee
3 changed files with 7 additions and 32 deletions
@@ -1,12 +0,0 @@
package org.whispersystems.signalservice.api.remoteconfig
import com.fasterxml.jackson.annotation.JsonProperty
/**
* Response class used in /v2/config. [serverEpochTime] should only be used in REST calls.
*/
data class RemoteConfigResponse(
@JsonProperty
val config: Map<String, String> = emptyMap(),
var serverEpochTime: Long = 0
)
@@ -67,7 +67,6 @@ import org.whispersystems.signalservice.api.push.exceptions.SubmitVerificationCo
import org.whispersystems.signalservice.api.push.exceptions.TokenNotAcceptedException;
import org.whispersystems.signalservice.api.push.exceptions.UnregisteredUserException;
import org.whispersystems.signalservice.api.registration.RestoreMethodBody;
import org.whispersystems.signalservice.api.remoteconfig.RemoteConfigResponse;
import org.whispersystems.signalservice.api.svr.Svr3Credentials;
import org.whispersystems.signalservice.api.util.CredentialsProvider;
import org.whispersystems.signalservice.api.util.Tls12SocketFactory;
@@ -629,14 +628,6 @@ public class PushServiceSocket {
}
}
public RemoteConfigResponse getRemoteConfig() throws IOException {
try (Response response = makeServiceRequest(REMOTE_CONFIG, "GET", jsonRequestBody(null), NO_HEADERS, NO_HANDLER, SealedSenderAccess.NONE, false)) {
RemoteConfigResponse remoteConfigResponse = JsonUtil.fromJson(readBodyString(response), RemoteConfigResponse.class);
remoteConfigResponse.setServerEpochTime(response.headers().get("X-Signal-Timestamp") != null ? Long.parseLong(response.headers().get("X-Signal-Timestamp")) : System.currentTimeMillis());
return remoteConfigResponse;
}
}
public void cancelInFlightRequests() {
synchronized (connections) {
Log.w(TAG, "Canceling: " + connections.size());
@@ -5,8 +5,8 @@
package org.signal.network.api
import com.fasterxml.jackson.annotation.JsonProperty
import org.whispersystems.signalservice.api.NetworkResult
import org.whispersystems.signalservice.api.remoteconfig.RemoteConfigResponse
import org.whispersystems.signalservice.api.remoteconfig.RemoteConfigResult
import org.whispersystems.signalservice.api.websocket.SignalWebSocket
import org.whispersystems.signalservice.internal.get
@@ -35,16 +35,6 @@ class RemoteConfigApi(val authWebSocket: SignalWebSocket.AuthenticatedWebSocket,
val headers = if (eTag.isNotEmpty()) mapOf("If-None-Match" to eTag) else mapOf()
val request = WebSocketRequestMessage.get("/v2/config", headers = headers)
return NetworkResult.fromWebSocketRequest(signalWebSocket = authWebSocket, request = request, webSocketResponseConverter = RemoteConfigResultWebSocketResponseConverter())
.fallback(predicate = { it is NetworkResult.StatusCodeError && it.code != 304 }) {
NetworkResult.fromFetch {
val response = pushServiceSocket.getRemoteConfig()
val transformed = response.config.map { it.key to (it.value.lowercase(Locale.getDefault()).toBooleanStrictOrNull() ?: it.value) }.toMap()
RemoteConfigResult(
config = transformed,
serverEpochTimeMilliseconds = response.serverEpochTime
)
}
}
}
/**
@@ -70,3 +60,9 @@ class RemoteConfigApi(val authWebSocket: SignalWebSocket.AuthenticatedWebSocket,
}
}
}
private data class RemoteConfigResponse(
@JsonProperty
val config: Map<String, String> = emptyMap(),
var serverEpochTime: Long = 0
)