Handle BackupFailedZkAuthenticationException in grpc SetPublicKey

This commit is contained in:
Ravi Khadiwala 2026-05-07 11:43:05 -05:00
parent 305b015784
commit 59f2f04b7c
2 changed files with 18 additions and 4 deletions

View File

@ -157,16 +157,19 @@ public class BackupsAnonymousGrpcService extends SimpleBackupsAnonymousGrpc.Back
}
@Override
public SetPublicKeyResponse setPublicKey(final SetPublicKeyRequest request)
throws BackupFailedZkAuthenticationException {
public SetPublicKeyResponse setPublicKey(final SetPublicKeyRequest request) {
final ECPublicKey publicKey = deserialize(ECPublicKey::new, request.getPublicKey().toByteArray());
final BackupAuthCredentialPresentation presentation = deserialize(
BackupAuthCredentialPresentation::new,
request.getSignedPresentation().getPresentation().toByteArray());
final byte[] signature = request.getSignedPresentation().getPresentationSignature().toByteArray();
backupManager.setPublicKey(presentation, signature, publicKey);
return SetPublicKeyResponse.newBuilder().setSuccess(Empty.getDefaultInstance()).build();
try {
backupManager.setPublicKey(presentation, signature, publicKey);
return SetPublicKeyResponse.newBuilder().setSuccess(Empty.getDefaultInstance()).build();
} catch (BackupFailedZkAuthenticationException e) {
return SetPublicKeyResponse.newBuilder().setFailedAuthentication(FailedZkAuthentication.getDefaultInstance()).build();
}
}

View File

@ -11,6 +11,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.when;
import com.google.common.collect.Iterators;
@ -114,6 +115,16 @@ class BackupsAnonymousGrpcServiceTest extends
.getResponseCase()).isEqualTo(SetPublicKeyResponse.ResponseCase.SUCCESS);
}
@Test
void setPublicKeyBadZkAuth() throws BackupFailedZkAuthenticationException {
doThrow(BackupFailedZkAuthenticationException.class).when(backupManager).setPublicKey(any(), any(), any());
assertThat(unauthenticatedServiceStub().setPublicKey(SetPublicKeyRequest.newBuilder()
.setPublicKey(ByteString.copyFrom(ECKeyPair.generate().getPublicKey().serialize()))
.setSignedPresentation(signedPresentation(presentation))
.build())
.getResponseCase()).isEqualTo(SetPublicKeyResponse.ResponseCase.FAILED_AUTHENTICATION);
}
@Test
void setBadPublicKey() {
assertThatExceptionOfType(StatusRuntimeException.class).isThrownBy(() ->