diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/KeysControllerV2.java b/src/main/java/org/whispersystems/textsecuregcm/controllers/KeysControllerV2.java index d9a7bd546..ac4c7a54f 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/controllers/KeysControllerV2.java +++ b/src/main/java/org/whispersystems/textsecuregcm/controllers/KeysControllerV2.java @@ -83,16 +83,6 @@ public class KeysControllerV2 extends KeysController { keys.store(account.getNumber(), device.getId(), preKeys.getPreKeys(), preKeys.getLastResortKey()); } - @Timed - @PUT - @Path("/signed") - @Consumes(MediaType.APPLICATION_JSON) - public void setSignedKey(@Auth Account account, @Valid SignedPreKey signedPreKey) { - Device device = account.getAuthenticatedDevice().get(); - device.setSignedPreKey(signedPreKey); - accounts.update(account); - } - @Timed @GET @Path("/{number}/{device_id}") @@ -142,6 +132,25 @@ public class KeysControllerV2 extends KeysController { } } + @Timed + @PUT + @Path("/signed") + @Consumes(MediaType.APPLICATION_JSON) + public void setSignedKey(@Auth Account account, @Valid SignedPreKey signedPreKey) { + Device device = account.getAuthenticatedDevice().get(); + device.setSignedPreKey(signedPreKey); + accounts.update(account); + } + @Timed + @GET + @Path("/signed") + @Produces(MediaType.APPLICATION_JSON) + public Optional getSignedKey(@Auth Account account) { + Device device = account.getAuthenticatedDevice().get(); + SignedPreKey signedPreKey = device.getSignedPreKey(); + if (signedPreKey != null) return Optional.of(signedPreKey); + else return Optional.absent(); + } } diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/KeyControllerTest.java b/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/KeyControllerTest.java index 924cfd437..436a10207 100644 --- a/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/KeyControllerTest.java +++ b/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/KeyControllerTest.java @@ -68,10 +68,10 @@ public class KeyControllerTest { @Before public void setup() { - final Device sampleDevice = mock(Device.class ); - final Device sampleDevice2 = mock(Device.class); - final Device sampleDevice3 = mock(Device.class); - final Device sampleDevice4 = mock(Device.class); + final Device sampleDevice = mock(Device.class); + final Device sampleDevice2 = mock(Device.class); + final Device sampleDevice3 = mock(Device.class); + final Device sampleDevice4 = mock(Device.class); List allDevices = new LinkedList() {{ add(sampleDevice); @@ -154,6 +154,28 @@ public class KeyControllerTest { verify(keys).getCount(eq(AuthHelper.VALID_NUMBER), eq(1L)); } + @Test + public void getSignedPreKeyV2() throws Exception { + SignedPreKey result = resources.client().resource("/v2/keys/signed") + .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_NUMBER, AuthHelper.VALID_PASSWORD)) + .get(SignedPreKey.class); + + assertThat(result.equals(SAMPLE_SIGNED_KEY)); + } + + @Test + public void putSignedPreKeyV2() throws Exception { + SignedPreKey test = new SignedPreKey(9999, "fooozzz", "baaarzzz"); + ClientResponse response = resources.client().resource("/v2/keys/signed") + .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_NUMBER, AuthHelper.VALID_PASSWORD)) + .type(MediaType.APPLICATION_JSON_TYPE) + .put(ClientResponse.class, test); + + assertThat(response.getStatus() == 204); + + verify(AuthHelper.VALID_DEVICE).setSignedPreKey(eq(test)); + verify(accounts).update(eq(AuthHelper.VALID_ACCOUNT)); + } @Test public void validLegacyRequestTest() throws Exception {