From a553eba574843e06156403f76001edd159ada112 Mon Sep 17 00:00:00 2001 From: Jon Chambers Date: Tue, 22 Sep 2020 12:47:24 -0400 Subject: [PATCH] Add an API endpoint for deleting accounts. --- .../controllers/AccountController.java | 14 ++++++++++++ .../controllers/AccountControllerTest.java | 22 +++++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java index 7d855e696..aface157b 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java @@ -482,6 +482,13 @@ public class AccountController { directoryQueue.refreshRegisteredUser(account); } + @GET + @Path("/me") + @Produces(MediaType.APPLICATION_JSON) + public AccountCreationResult getMe(@Auth Account account) { + return whoAmI(account); + } + @GET @Path("/whoami") @Produces(MediaType.APPLICATION_JSON) @@ -593,6 +600,13 @@ public class AccountController { return new CaptchaRequirement(false, false); } + @Timed + @DELETE + @Path("/me") + public void deleteAccount(@Auth Account account) { + accounts.delete(account); + } + private boolean shouldAutoBlock(String requester) { try { rateLimiters.getAutoBlockLimiter().validate(requester); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/AccountControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/AccountControllerTest.java index 4c5b1bae4..344a53834 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/AccountControllerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/AccountControllerTest.java @@ -3,10 +3,13 @@ package org.whispersystems.textsecuregcm.tests.controllers; import com.google.common.collect.ImmutableSet; import io.dropwizard.auth.PolymorphicAuthValueFactoryProvider; import io.dropwizard.testing.junit.ResourceTestRule; +import junitparams.JUnitParamsRunner; +import junitparams.Parameters; import org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory; import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.ArgumentMatcher; import org.whispersystems.textsecuregcm.auth.AuthenticationCredentials; @@ -76,6 +79,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; +@RunWith(JUnitParamsRunner.class) public class AccountControllerTest { private static final String SENDER = "+14152222222"; @@ -1063,10 +1067,11 @@ public class AccountControllerTest { } @Test - public void testWhoAmI() { + @Parameters({"/v1/accounts/whoami/", "/v1/accounts/me/"}) + public void testWhoAmI(final String path) { AccountCreationResult response = resources.getJerseyTest() - .target("/v1/accounts/whoami/") + .target(path) .request() .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_NUMBER, AuthHelper.VALID_PASSWORD)) .get(AccountCreationResult.class); @@ -1171,4 +1176,17 @@ public class AccountControllerTest { assertThat(response.getStatus()).isEqualTo(204); verify(directoryQueue, times(1)).refreshRegisteredUser(AuthHelper.VALID_ACCOUNT); } + + @Test + public void testDeleteAccount() { + Response response = + resources.getJerseyTest() + .target("/v1/accounts/me") + .request() + .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_NUMBER, AuthHelper.VALID_PASSWORD)) + .delete(); + + assertThat(response.getStatus()).isEqualTo(204); + verify(accountsManager).delete(AuthHelper.VALID_ACCOUNT); + } }