Add versionedExpirationTimer capability

This commit is contained in:
Katherine
2024-08-21 11:39:43 -04:00
committed by GitHub
parent fa51793379
commit 4c0a5ac3b2
20 changed files with 139 additions and 37 deletions

View File

@@ -392,7 +392,10 @@ public class DeviceController {
}
private static boolean isCapabilityDowngrade(Account account, DeviceCapabilities capabilities) {
return account.isDeleteSyncSupported() && !capabilities.deleteSync();
boolean isDowngrade = false;
isDowngrade |= account.isDeleteSyncSupported() && !capabilities.deleteSync();
isDowngrade |= account.isVersionedExpirationTimerSupported() && !capabilities.versionedExpirationTimer();
return isDowngrade;
}
private static String getUsedTokenKey(final String token) {

View File

@@ -8,11 +8,13 @@ package org.whispersystems.textsecuregcm.entities;
import org.whispersystems.textsecuregcm.storage.Account;
public record UserCapabilities(
// TODO: Remove the paymentActivation capability entirely sometime soon after 2024-06-30
// TODO: Remove the paymentActivation capability entirely sometime soon after 2024-10-07
boolean paymentActivation,
boolean deleteSync) {
boolean deleteSync,
boolean versionedExpirationTimer) {
public static UserCapabilities createForAccount(final Account account) {
return new UserCapabilities(true, account.isDeleteSyncSupported());
return new UserCapabilities(true, account.isDeleteSyncSupported(),
account.isVersionedExpirationTimerSupported());
}
}

View File

@@ -198,7 +198,8 @@ public class DevicesGrpcService extends ReactorDevicesGrpc.DevicesImplBase {
request.getStorage(),
request.getTransfer(),
request.getPaymentActivation(),
request.getDeleteSync())))))
request.getDeleteSync(),
request.getVersionedExpirationTimer())))))
.thenReturn(SetCapabilitiesResponse.newBuilder().build());
}
}

View File

@@ -84,6 +84,7 @@ public class ProfileGrpcHelper {
return UserCapabilities.newBuilder()
.setPaymentActivation(capabilities.paymentActivation())
.setDeleteSync(capabilities.deleteSync())
.setVersionedExpirationTimer(capabilities.versionedExpirationTimer())
.build();
}

View File

@@ -296,6 +296,10 @@ public class Account {
return allDevicesHaveCapability(DeviceCapabilities::deleteSync);
}
public boolean isVersionedExpirationTimerSupported() {
return allDevicesHaveCapability(DeviceCapabilities::versionedExpirationTimer);
}
private boolean allDevicesHaveCapability(final Predicate<DeviceCapabilities> predicate) {
requireNotStale();

View File

@@ -232,6 +232,7 @@ public class Device {
return this.userAgent;
}
public record DeviceCapabilities(boolean storage, boolean transfer, boolean paymentActivation, boolean deleteSync) {
public record DeviceCapabilities(boolean storage, boolean transfer, boolean paymentActivation, boolean deleteSync,
boolean versionedExpirationTimer) {
}
}