From cc3cab9c88737c05a60c1a5946d62b6564020f7a Mon Sep 17 00:00:00 2001 From: Ehren Kret Date: Wed, 21 Jun 2023 16:08:46 -0500 Subject: [PATCH] Add server time to remote config fetch Enable clients to very roughly adjust some actions for clock skew by providing current server time in the remote config fetch. --- .../controllers/RemoteConfigController.java | 3 ++- .../entities/UserRemoteConfigList.java | 13 ++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/RemoteConfigController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/RemoteConfigController.java index 8cde735de..d6738e631 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/RemoteConfigController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/RemoteConfigController.java @@ -15,6 +15,7 @@ import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import java.time.Clock; import java.util.List; import java.util.Map; import java.util.Objects; @@ -91,7 +92,7 @@ public class RemoteConfigController { config.getUuids()); return new UserRemoteConfig(config.getName(), inBucket, inBucket ? config.getValue() : config.getDefaultValue()); - }), globalConfigStream).collect(Collectors.toList())); + }), globalConfigStream).collect(Collectors.toList()), Clock.systemUTC().instant()); } catch (NoSuchAlgorithmException e) { throw new AssertionError(e); } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/entities/UserRemoteConfigList.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/UserRemoteConfigList.java index 6fba91364..18a90d57d 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/entities/UserRemoteConfigList.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/entities/UserRemoteConfigList.java @@ -5,8 +5,10 @@ package org.whispersystems.textsecuregcm.entities; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; +import java.time.Instant; import java.util.List; public class UserRemoteConfigList { @@ -14,13 +16,22 @@ public class UserRemoteConfigList { @JsonProperty private List config; + @JsonProperty + @JsonFormat(shape = JsonFormat.Shape.NUMBER_INT) + private Instant serverEpochTime; + public UserRemoteConfigList() {} - public UserRemoteConfigList(List config) { + public UserRemoteConfigList(List config, Instant serverEpochTime) { this.config = config; + this.serverEpochTime = serverEpochTime; } public List getConfig() { return config; } + + public Instant getServerEpochTime() { + return serverEpochTime; + } }