mirror of
https://github.com/signalapp/Signal-Server
synced 2026-10-06 06:37:53 +01:00
Simplify list-MFA-keys RPC
Turns out clients only actually want the metadata, repeating the crypto parameters is useless
This commit is contained in:
1 parent
d79e37230e
commit
3a75f705c2
3 files changed
+18
-20
No files matched your search
+8
-8
@@ -53,6 +53,7 @@ import org.signal.chat.account.GetEntitlementsRequest;
|
||||
import org.signal.chat.account.GetEntitlementsResponse;
|
||||
import org.signal.chat.account.ListMfaKeysRequest;
|
||||
import org.signal.chat.account.ListMfaKeysResponse;
|
||||
import org.signal.chat.account.ListMfaKeysResponse.MfaKeyMetadata.MfaKeyType;
|
||||
import org.signal.chat.account.RegistrationLockFailure;
|
||||
import org.signal.chat.account.RemoveMfaKeyRequest;
|
||||
import org.signal.chat.account.RemoveMfaKeyResponse;
|
||||
@@ -612,14 +613,13 @@ public class AccountsGrpcService extends SimpleAccountsGrpc.AccountsImplBase {
|
||||
getAuthenticatedAccount().getMfaKeys().forEach((keyId, mfaKey) -> {
|
||||
assert mfaKey.metadataCiphertext() != null;
|
||||
|
||||
ListMfaKeysResponse.MfaKeyMetadata.Builder metadataBuilder = ListMfaKeysResponse.MfaKeyMetadata.newBuilder()
|
||||
.setMetadataCiphertext(ByteString.copyFrom(mfaKey.metadataCiphertext()));
|
||||
|
||||
switch (mfaKey) {
|
||||
case AnnotatedTotpKey k -> metadataBuilder.setTotpParameters(toGrpcTotpParameters(k.totpKey().totpParameters()));
|
||||
}
|
||||
|
||||
responseBuilder.putKeys(keyId, metadataBuilder.build());
|
||||
responseBuilder.putKeys(
|
||||
keyId,
|
||||
ListMfaKeysResponse.MfaKeyMetadata.newBuilder()
|
||||
.setMetadataCiphertext(ByteString.copyFrom(mfaKey.metadataCiphertext()))
|
||||
.setType(switch (mfaKey) {
|
||||
case AnnotatedTotpKey _ -> MfaKeyType.MFA_KEY_TYPE_TOTP;
|
||||
}).build());
|
||||
});
|
||||
|
||||
return responseBuilder.build();
|
||||
|
||||
@@ -575,13 +575,16 @@ message ListMfaKeysRequest {}
|
||||
|
||||
message ListMfaKeysResponse {
|
||||
message MfaKeyMetadata {
|
||||
// The user-provided ciphertext for metadata associated with this MFA key
|
||||
enum MfaKeyType {
|
||||
MFA_KEY_TYPE_UNSPECIFIED = 0;
|
||||
MFA_KEY_TYPE_TOTP = 1;
|
||||
}
|
||||
|
||||
/// The user-provided ciphertext for metadata associated with this MFA key
|
||||
bytes metadata_ciphertext = 1 [(require.exactlySize) = 160];
|
||||
|
||||
oneof mfa_key {
|
||||
// The TOTP parameters associated with this key, which is a TOTP key
|
||||
TotpParameters totp_parameters = 2;
|
||||
}
|
||||
/// The type of MFA factor this key is for
|
||||
MfaKeyType type = 2;
|
||||
}
|
||||
|
||||
map<uint32, MfaKeyMetadata> keys = 1;
|
||||
|
||||
+2
-7
@@ -92,6 +92,7 @@ import org.signal.chat.account.SetZkCredentialKeyResponse;
|
||||
import org.signal.chat.account.StaleDevices;
|
||||
import org.signal.chat.account.TotpParameters;
|
||||
import org.signal.chat.account.UsernameNotAvailable;
|
||||
import org.signal.chat.account.ListMfaKeysResponse.MfaKeyMetadata.MfaKeyType;
|
||||
import org.signal.chat.common.AccountIdentifiers;
|
||||
import org.signal.chat.common.EcSignedPreKey;
|
||||
import org.signal.chat.common.KemSignedPreKey;
|
||||
@@ -1236,15 +1237,9 @@ class AccountsGrpcServiceTest extends SimpleBaseGrpcTest<AccountsGrpcService, Ac
|
||||
final ListMfaKeysResponse response =
|
||||
authenticatedServiceStub().listMfaKeys(ListMfaKeysRequest.getDefaultInstance());
|
||||
|
||||
final TotpParameters expectedTotpParameters = TotpParameters.newBuilder()
|
||||
.setAlgorithm(AccountsManager.TOTP.getAlgorithm())
|
||||
.setPasswordLength(AccountsManager.TOTP.getPasswordLength())
|
||||
.setTimeStepSeconds(Math.toIntExact(AccountsManager.TOTP.getTimeStep().toSeconds()))
|
||||
.build();
|
||||
|
||||
final Map<Integer, ListMfaKeysResponse.MfaKeyMetadata> expectedTotpKeys = totpKeys.entrySet().stream()
|
||||
.collect(Collectors.toMap(entry -> entry.getKey().intValue(), entry -> ListMfaKeysResponse.MfaKeyMetadata.newBuilder()
|
||||
.setTotpParameters(expectedTotpParameters)
|
||||
.setType(MfaKeyType.MFA_KEY_TYPE_TOTP)
|
||||
.setMetadataCiphertext(ByteString.copyFrom(entry.getValue().metadataCiphertext()))
|
||||
.build()));
|
||||
|
||||
|
||||
Reference in new issue
Block a user