Extract device capability enumeration translation to a utility class
This commit is contained in:
parent
44c3b046dd
commit
a8da0f64ac
|
@ -0,0 +1,36 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 Signal Messenger, LLC
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.whispersystems.textsecuregcm.grpc;
|
||||||
|
|
||||||
|
import io.grpc.Status;
|
||||||
|
import org.whispersystems.textsecuregcm.storage.DeviceCapability;
|
||||||
|
|
||||||
|
public class DeviceCapabilityUtil {
|
||||||
|
|
||||||
|
private DeviceCapabilityUtil() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DeviceCapability fromGrpcDeviceCapability(final org.signal.chat.common.DeviceCapability grpcDeviceCapability) {
|
||||||
|
return switch (grpcDeviceCapability) {
|
||||||
|
case DEVICE_CAPABILITY_STORAGE -> DeviceCapability.STORAGE;
|
||||||
|
case DEVICE_CAPABILITY_TRANSFER -> DeviceCapability.TRANSFER;
|
||||||
|
case DEVICE_CAPABILITY_DELETE_SYNC -> DeviceCapability.DELETE_SYNC;
|
||||||
|
case DEVICE_CAPABILITY_VERSIONED_EXPIRATION_TIMER -> DeviceCapability.VERSIONED_EXPIRATION_TIMER;
|
||||||
|
case DEVICE_CAPABILITY_STORAGE_SERVICE_RECORD_KEY_ROTATION -> DeviceCapability.STORAGE_SERVICE_RECORD_KEY_ROTATION;
|
||||||
|
case DEVICE_CAPABILITY_UNSPECIFIED, UNRECOGNIZED -> throw Status.INVALID_ARGUMENT.withDescription("Unrecognized device capability").asRuntimeException();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static org.signal.chat.common.DeviceCapability toGrpcDeviceCapability(final DeviceCapability deviceCapability) {
|
||||||
|
return switch (deviceCapability) {
|
||||||
|
case STORAGE -> org.signal.chat.common.DeviceCapability.DEVICE_CAPABILITY_STORAGE;
|
||||||
|
case TRANSFER -> org.signal.chat.common.DeviceCapability.DEVICE_CAPABILITY_TRANSFER;
|
||||||
|
case DELETE_SYNC -> org.signal.chat.common.DeviceCapability.DEVICE_CAPABILITY_DELETE_SYNC;
|
||||||
|
case VERSIONED_EXPIRATION_TIMER -> org.signal.chat.common.DeviceCapability.DEVICE_CAPABILITY_VERSIONED_EXPIRATION_TIMER;
|
||||||
|
case STORAGE_SERVICE_RECORD_KEY_ROTATION -> org.signal.chat.common.DeviceCapability.DEVICE_CAPABILITY_STORAGE_SERVICE_RECORD_KEY_ROTATION;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -204,13 +204,7 @@ public class DevicesGrpcService extends ReactorDevicesGrpc.DevicesImplBase {
|
||||||
final AuthenticatedDevice authenticatedDevice = AuthenticationUtil.requireAuthenticatedDevice();
|
final AuthenticatedDevice authenticatedDevice = AuthenticationUtil.requireAuthenticatedDevice();
|
||||||
|
|
||||||
final Set<DeviceCapability> capabilities = request.getCapabilitiesList().stream()
|
final Set<DeviceCapability> capabilities = request.getCapabilitiesList().stream()
|
||||||
.map(capability -> switch (capability) {
|
.map(DeviceCapabilityUtil::fromGrpcDeviceCapability)
|
||||||
case DEVICE_CAPABILITY_STORAGE -> DeviceCapability.STORAGE;
|
|
||||||
case DEVICE_CAPABILITY_TRANSFER -> DeviceCapability.TRANSFER;
|
|
||||||
case DEVICE_CAPABILITY_DELETE_SYNC -> DeviceCapability.DELETE_SYNC;
|
|
||||||
case DEVICE_CAPABILITY_VERSIONED_EXPIRATION_TIMER -> DeviceCapability.VERSIONED_EXPIRATION_TIMER;
|
|
||||||
default -> throw Status.INVALID_ARGUMENT.withDescription("Unrecognized device capability").asRuntimeException();
|
|
||||||
})
|
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
return Mono.fromFuture(() -> accountsManager.getByAccountIdentifierAsync(authenticatedDevice.accountIdentifier()))
|
return Mono.fromFuture(() -> accountsManager.getByAccountIdentifierAsync(authenticatedDevice.accountIdentifier()))
|
||||||
|
|
|
@ -87,13 +87,7 @@ public class ProfileGrpcHelper {
|
||||||
Arrays.stream(DeviceCapability.values())
|
Arrays.stream(DeviceCapability.values())
|
||||||
.filter(DeviceCapability::includeInProfile)
|
.filter(DeviceCapability::includeInProfile)
|
||||||
.filter(account::hasCapability)
|
.filter(account::hasCapability)
|
||||||
.map(capability -> switch (capability) {
|
.map(DeviceCapabilityUtil::toGrpcDeviceCapability)
|
||||||
case STORAGE -> org.signal.chat.common.DeviceCapability.DEVICE_CAPABILITY_STORAGE;
|
|
||||||
case TRANSFER -> org.signal.chat.common.DeviceCapability.DEVICE_CAPABILITY_TRANSFER;
|
|
||||||
case DELETE_SYNC -> org.signal.chat.common.DeviceCapability.DEVICE_CAPABILITY_DELETE_SYNC;
|
|
||||||
case VERSIONED_EXPIRATION_TIMER -> org.signal.chat.common.DeviceCapability.DEVICE_CAPABILITY_VERSIONED_EXPIRATION_TIMER;
|
|
||||||
case STORAGE_SERVICE_RECORD_KEY_ROTATION -> org.signal.chat.common.DeviceCapability.DEVICE_CAPABILITY_STORAGE_SERVICE_RECORD_KEY_ROTATION;
|
|
||||||
})
|
|
||||||
.forEach(capabilitiesBuilder::addCapabilities);
|
.forEach(capabilitiesBuilder::addCapabilities);
|
||||||
|
|
||||||
return capabilitiesBuilder.build();
|
return capabilitiesBuilder.build();
|
||||||
|
|
Loading…
Reference in New Issue