Allow clients to request zkc-based auth creds
Allow clients to pass a zkcCredential=true query parameter to request the new auth credential format implemented with the zkcredential Rust library.
This commit is contained in:
parent
4863e1d227
commit
39fd955f13
|
@ -91,7 +91,8 @@ public class CertificateController {
|
||||||
public GroupCredentials getGroupAuthenticationCredentials(
|
public GroupCredentials getGroupAuthenticationCredentials(
|
||||||
@ReadOnly @Auth AuthenticatedAccount auth,
|
@ReadOnly @Auth AuthenticatedAccount auth,
|
||||||
@QueryParam("redemptionStartSeconds") long startSeconds,
|
@QueryParam("redemptionStartSeconds") long startSeconds,
|
||||||
@QueryParam("redemptionEndSeconds") long endSeconds) {
|
@QueryParam("redemptionEndSeconds") long endSeconds,
|
||||||
|
@QueryParam("zkcCredential") boolean zkcCredential) {
|
||||||
|
|
||||||
final Instant startOfDay = clock.instant().truncatedTo(ChronoUnit.DAYS);
|
final Instant startOfDay = clock.instant().truncatedTo(ChronoUnit.DAYS);
|
||||||
final Instant redemptionStart = Instant.ofEpochSecond(startSeconds);
|
final Instant redemptionStart = Instant.ofEpochSecond(startSeconds);
|
||||||
|
@ -115,7 +116,12 @@ public class CertificateController {
|
||||||
ServiceId.Pni pni = new ServiceId.Pni(auth.getAccount().getPhoneNumberIdentifier());
|
ServiceId.Pni pni = new ServiceId.Pni(auth.getAccount().getPhoneNumberIdentifier());
|
||||||
|
|
||||||
while (!redemption.isAfter(redemptionEnd)) {
|
while (!redemption.isAfter(redemptionEnd)) {
|
||||||
AuthCredentialWithPniResponse authCredentialWithPni = serverZkAuthOperations.issueAuthCredentialWithPniAsServiceId(aci, pni, redemption);
|
AuthCredentialWithPniResponse authCredentialWithPni;
|
||||||
|
if (zkcCredential) {
|
||||||
|
authCredentialWithPni = serverZkAuthOperations.issueAuthCredentialWithPniZkc(aci, pni, redemption);
|
||||||
|
} else {
|
||||||
|
authCredentialWithPni = serverZkAuthOperations.issueAuthCredentialWithPniAsServiceId(aci, pni, redemption);
|
||||||
|
}
|
||||||
credentials.add(new GroupCredentials.GroupCredential(
|
credentials.add(new GroupCredentials.GroupCredential(
|
||||||
authCredentialWithPni.serialize(),
|
authCredentialWithPni.serialize(),
|
||||||
(int) redemption.getEpochSecond()));
|
(int) redemption.getEpochSecond()));
|
||||||
|
|
|
@ -241,6 +241,43 @@ class CertificateControllerTest {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testGetSingleGroupCredentialZkc() {
|
||||||
|
final Instant startOfDay = clock.instant().truncatedTo(ChronoUnit.DAYS);
|
||||||
|
|
||||||
|
final GroupCredentials credentials = resources.getJerseyTest()
|
||||||
|
.target("/v1/certificate/auth/group")
|
||||||
|
.queryParam("redemptionStartSeconds", startOfDay.getEpochSecond())
|
||||||
|
.queryParam("redemptionEndSeconds", startOfDay.getEpochSecond())
|
||||||
|
.queryParam("zkcCredential", true)
|
||||||
|
.request()
|
||||||
|
.header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_UUID, AuthHelper.VALID_PASSWORD))
|
||||||
|
.get(GroupCredentials.class);
|
||||||
|
|
||||||
|
assertEquals(1, credentials.credentials().size());
|
||||||
|
assertEquals(1, credentials.callLinkAuthCredentials().size());
|
||||||
|
|
||||||
|
assertEquals(AuthHelper.VALID_PNI, credentials.pni());
|
||||||
|
assertEquals(startOfDay.getEpochSecond(), credentials.credentials().get(0).redemptionTime());
|
||||||
|
assertEquals(startOfDay.getEpochSecond(), credentials.callLinkAuthCredentials().get(0).redemptionTime());
|
||||||
|
|
||||||
|
final ClientZkAuthOperations clientZkAuthOperations =
|
||||||
|
new ClientZkAuthOperations(serverSecretParams.getPublicParams());
|
||||||
|
|
||||||
|
assertDoesNotThrow(() -> {
|
||||||
|
clientZkAuthOperations.receiveAuthCredentialWithPniAsServiceId(
|
||||||
|
new ServiceId.Aci(AuthHelper.VALID_UUID),
|
||||||
|
new ServiceId.Pni(AuthHelper.VALID_PNI),
|
||||||
|
(int) startOfDay.getEpochSecond(),
|
||||||
|
new AuthCredentialWithPniResponse(credentials.credentials().get(0).credential()));
|
||||||
|
});
|
||||||
|
|
||||||
|
assertDoesNotThrow(() -> {
|
||||||
|
new CallLinkAuthCredentialResponse(credentials.callLinkAuthCredentials().get(0).credential())
|
||||||
|
.receive(new ServiceId.Aci(AuthHelper.VALID_UUID), startOfDay, genericServerSecretParams.getPublicParams());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testGetWeekLongGroupCredentials() {
|
void testGetWeekLongGroupCredentials() {
|
||||||
final Instant startOfDay = clock.instant().truncatedTo(ChronoUnit.DAYS);
|
final Instant startOfDay = clock.instant().truncatedTo(ChronoUnit.DAYS);
|
||||||
|
|
Loading…
Reference in New Issue