Add a check for missing uak in `OptionalAccess`
This commit is contained in:
parent
19944bfdb2
commit
88e2687e23
|
@ -73,6 +73,11 @@ public class OptionalAccess {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// At this point, any successful authentication requires a real access key on the target account
|
||||||
|
if (targetAccount.get().getUnidentifiedAccessKey().isEmpty()) {
|
||||||
|
throw new NotAuthorizedException(Response.Status.UNAUTHORIZED);
|
||||||
|
}
|
||||||
|
|
||||||
// Otherwise, access is gated by the caller having the unidentified-access key matching the target account.
|
// Otherwise, access is gated by the caller having the unidentified-access key matching the target account.
|
||||||
if (MessageDigest.isEqual(accessKey.get().getAccessKey(), targetAccount.get().getUnidentifiedAccessKey().get())) {
|
if (MessageDigest.isEqual(accessKey.get().getAccessKey(), targetAccount.get().getUnidentifiedAccessKey().get())) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
package org.whispersystems.textsecuregcm.auth;
|
package org.whispersystems.textsecuregcm.auth;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
@ -115,6 +116,22 @@ class OptionalAccessTest {
|
||||||
OptionalAccess.verify(Optional.empty(), Optional.of(new Anonymous(Base64.getEncoder().encodeToString("1234".getBytes()))), Optional.of(account));
|
OptionalAccess.verify(Optional.empty(), Optional.of(new Anonymous(Base64.getEncoder().encodeToString("1234".getBytes()))), Optional.of(account));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testUnidentifiedTargetMissingAccessKey() {
|
||||||
|
Account account = mock(Account.class);
|
||||||
|
when(account.getUnidentifiedAccessKey()).thenReturn(Optional.empty());
|
||||||
|
when(account.isEnabled()).thenReturn(true);
|
||||||
|
try {
|
||||||
|
OptionalAccess.verify(
|
||||||
|
Optional.empty(),
|
||||||
|
Optional.of(new Anonymous(Base64.getEncoder().encodeToString("1234".getBytes()))),
|
||||||
|
Optional.of(account));
|
||||||
|
throw new AssertionError("should fail");
|
||||||
|
} catch (WebApplicationException e) {
|
||||||
|
assertEquals(e.getResponse().getStatus(), 401);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testUnidentifiedInactive() {
|
void testUnidentifiedInactive() {
|
||||||
Account account = mock(Account.class);
|
Account account = mock(Account.class);
|
||||||
|
|
Loading…
Reference in New Issue