From 2aaddd721f79b139392c9fa4b5b61abd6cfcdc79 Mon Sep 17 00:00:00 2001 From: Ehren Kret Date: Fri, 30 Jul 2021 13:22:57 -0700 Subject: [PATCH] Rename existing captcha client --- .../textsecuregcm/WhisperServerService.java | 10 +++++---- .../controllers/AccountController.java | 10 ++++----- .../limits/RateLimitChallengeManager.java | 10 ++++----- ...Client.java => LegacyRecaptchaClient.java} | 6 ++--- .../limits/RateLimitChallengeManagerTest.java | 10 ++++----- .../controllers/AccountControllerTest.java | 22 +++++++++---------- 6 files changed, 35 insertions(+), 33 deletions(-) rename service/src/main/java/org/whispersystems/textsecuregcm/recaptcha/{RecaptchaClient.java => LegacyRecaptchaClient.java} (92%) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java index 44f33d643..ab9fb55c3 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java @@ -132,7 +132,7 @@ import org.whispersystems.textsecuregcm.push.GCMSender; import org.whispersystems.textsecuregcm.push.MessageSender; import org.whispersystems.textsecuregcm.push.ProvisioningManager; import org.whispersystems.textsecuregcm.push.ReceiptSender; -import org.whispersystems.textsecuregcm.recaptcha.RecaptchaClient; +import org.whispersystems.textsecuregcm.recaptcha.LegacyRecaptchaClient; import org.whispersystems.textsecuregcm.redis.ConnectionEventLogger; import org.whispersystems.textsecuregcm.redis.FaultTolerantRedisCluster; import org.whispersystems.textsecuregcm.redis.ReplicatedJedisPool; @@ -466,9 +466,10 @@ public class WhisperServerService extends Application commonControllers = List.of( 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 9d4c64588..b7f0dc5ba 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/AccountController.java @@ -63,7 +63,7 @@ import org.whispersystems.textsecuregcm.push.APNSender; import org.whispersystems.textsecuregcm.push.ApnMessage; import org.whispersystems.textsecuregcm.push.GCMSender; import org.whispersystems.textsecuregcm.push.GcmMessage; -import org.whispersystems.textsecuregcm.recaptcha.RecaptchaClient; +import org.whispersystems.textsecuregcm.recaptcha.LegacyRecaptchaClient; import org.whispersystems.textsecuregcm.sms.SmsSender; import org.whispersystems.textsecuregcm.sms.TwilioVerifyExperimentEnrollmentManager; import org.whispersystems.textsecuregcm.storage.AbusiveHostRule; @@ -116,7 +116,7 @@ public class AccountController { private final DynamicConfigurationManager dynamicConfigurationManager; private final TurnTokenGenerator turnTokenGenerator; private final Map testDevices; - private final RecaptchaClient recaptchaClient; + private final LegacyRecaptchaClient legacyRecaptchaClient; private final GCMSender gcmSender; private final APNSender apnSender; private final ExternalServiceCredentialGenerator backupServiceCredentialGenerator; @@ -132,7 +132,7 @@ public class AccountController { DynamicConfigurationManager dynamicConfigurationManager, TurnTokenGenerator turnTokenGenerator, Map testDevices, - RecaptchaClient recaptchaClient, + LegacyRecaptchaClient legacyRecaptchaClient, GCMSender gcmSender, APNSender apnSender, ExternalServiceCredentialGenerator backupServiceCredentialGenerator, @@ -147,7 +147,7 @@ public class AccountController { this.dynamicConfigurationManager = dynamicConfigurationManager; this.testDevices = testDevices; this.turnTokenGenerator = turnTokenGenerator; - this.recaptchaClient = recaptchaClient; + this.legacyRecaptchaClient = legacyRecaptchaClient; this.gcmSender = gcmSender; this.apnSender = apnSender; this.backupServiceCredentialGenerator = backupServiceCredentialGenerator; @@ -595,7 +595,7 @@ public class AccountController { { if (captchaToken.isPresent()) { - boolean validToken = recaptchaClient.verify(captchaToken.get(), requester); + boolean validToken = legacyRecaptchaClient.verify(captchaToken.get(), requester); if (validToken) { captchaSuccessMeter.mark(); diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimitChallengeManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimitChallengeManager.java index fbe6f555b..1bd98cd9c 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimitChallengeManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimitChallengeManager.java @@ -7,7 +7,7 @@ import java.util.Optional; import io.micrometer.core.instrument.Metrics; import org.whispersystems.textsecuregcm.controllers.RateLimitExceededException; import org.whispersystems.textsecuregcm.push.NotPushRegisteredException; -import org.whispersystems.textsecuregcm.recaptcha.RecaptchaClient; +import org.whispersystems.textsecuregcm.recaptcha.LegacyRecaptchaClient; import org.whispersystems.textsecuregcm.storage.Account; import org.whispersystems.textsecuregcm.storage.DynamicConfigurationManager; import org.whispersystems.textsecuregcm.util.Util; @@ -20,7 +20,7 @@ import static com.codahale.metrics.MetricRegistry.name; public class RateLimitChallengeManager { private final PushChallengeManager pushChallengeManager; - private final RecaptchaClient recaptchaClient; + private final LegacyRecaptchaClient legacyRecaptchaClient; private final PreKeyRateLimiter preKeyRateLimiter; private final UnsealedSenderRateLimiter unsealedSenderRateLimiter; @@ -39,14 +39,14 @@ public class RateLimitChallengeManager { public RateLimitChallengeManager( final PushChallengeManager pushChallengeManager, - final RecaptchaClient recaptchaClient, + final LegacyRecaptchaClient legacyRecaptchaClient, final PreKeyRateLimiter preKeyRateLimiter, final UnsealedSenderRateLimiter unsealedSenderRateLimiter, final RateLimiters rateLimiters, final DynamicConfigurationManager dynamicConfigurationManager) { this.pushChallengeManager = pushChallengeManager; - this.recaptchaClient = recaptchaClient; + this.legacyRecaptchaClient = legacyRecaptchaClient; this.preKeyRateLimiter = preKeyRateLimiter; this.unsealedSenderRateLimiter = unsealedSenderRateLimiter; this.rateLimiters = rateLimiters; @@ -69,7 +69,7 @@ public class RateLimitChallengeManager { rateLimiters.getRecaptchaChallengeAttemptLimiter().validate(account.getNumber()); - final boolean challengeSuccess = recaptchaClient.verify(captcha, mostRecentProxyIp); + final boolean challengeSuccess = legacyRecaptchaClient.verify(captcha, mostRecentProxyIp); Metrics.counter(RECAPTCHA_ATTEMPT_COUNTER_NAME, SOURCE_COUNTRY_TAG_NAME, Util.getCountryCode(account.getNumber()), diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/recaptcha/RecaptchaClient.java b/service/src/main/java/org/whispersystems/textsecuregcm/recaptcha/LegacyRecaptchaClient.java similarity index 92% rename from service/src/main/java/org/whispersystems/textsecuregcm/recaptcha/RecaptchaClient.java rename to service/src/main/java/org/whispersystems/textsecuregcm/recaptcha/LegacyRecaptchaClient.java index 9c13de39d..62a76a683 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/recaptcha/RecaptchaClient.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/recaptcha/LegacyRecaptchaClient.java @@ -18,14 +18,14 @@ import javax.ws.rs.client.Entity; import javax.ws.rs.core.MultivaluedHashMap; import javax.ws.rs.core.MultivaluedMap; -public class RecaptchaClient { +public class LegacyRecaptchaClient { - private final Logger logger = LoggerFactory.getLogger(RecaptchaClient.class); + private final Logger logger = LoggerFactory.getLogger(LegacyRecaptchaClient.class); private final Client client; private final String recaptchaSecret; - public RecaptchaClient(String recaptchaSecret) { + public LegacyRecaptchaClient(String recaptchaSecret) { this.client = ClientBuilder.newClient(new ClientConfig(new JacksonJaxbJsonProvider().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false))); this.recaptchaSecret = recaptchaSecret; } diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/limits/RateLimitChallengeManagerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/limits/RateLimitChallengeManagerTest.java index 7202aa780..9b35a0f2f 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/limits/RateLimitChallengeManagerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/limits/RateLimitChallengeManagerTest.java @@ -22,7 +22,7 @@ import org.junit.jupiter.params.provider.ValueSource; import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicConfiguration; import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicRateLimitChallengeConfiguration; import org.whispersystems.textsecuregcm.controllers.RateLimitExceededException; -import org.whispersystems.textsecuregcm.recaptcha.RecaptchaClient; +import org.whispersystems.textsecuregcm.recaptcha.LegacyRecaptchaClient; import org.whispersystems.textsecuregcm.storage.Account; import org.whispersystems.textsecuregcm.storage.DynamicConfigurationManager; import org.whispersystems.textsecuregcm.util.ua.ClientPlatform; @@ -30,7 +30,7 @@ import org.whispersystems.textsecuregcm.util.ua.ClientPlatform; class RateLimitChallengeManagerTest { private PushChallengeManager pushChallengeManager; - private RecaptchaClient recaptchaClient; + private LegacyRecaptchaClient legacyRecaptchaClient; private PreKeyRateLimiter preKeyRateLimiter; private UnsealedSenderRateLimiter unsealedSenderRateLimiter; private DynamicRateLimitChallengeConfiguration rateLimitChallengeConfiguration; @@ -41,7 +41,7 @@ class RateLimitChallengeManagerTest { @BeforeEach void setUp() { pushChallengeManager = mock(PushChallengeManager.class); - recaptchaClient = mock(RecaptchaClient.class); + legacyRecaptchaClient = mock(LegacyRecaptchaClient.class); preKeyRateLimiter = mock(PreKeyRateLimiter.class); unsealedSenderRateLimiter = mock(UnsealedSenderRateLimiter.class); rateLimiters = mock(RateLimiters.class); @@ -55,7 +55,7 @@ class RateLimitChallengeManagerTest { rateLimitChallengeManager = new RateLimitChallengeManager( pushChallengeManager, - recaptchaClient, + legacyRecaptchaClient, preKeyRateLimiter, unsealedSenderRateLimiter, rateLimiters, @@ -89,7 +89,7 @@ class RateLimitChallengeManagerTest { final Account account = mock(Account.class); when(account.getNumber()).thenReturn("+18005551234"); - when(recaptchaClient.verify(any(), any())).thenReturn(successfulChallenge); + when(legacyRecaptchaClient.verify(any(), any())).thenReturn(successfulChallenge); when(rateLimiters.getRecaptchaChallengeAttemptLimiter()).thenReturn(mock(RateLimiter.class)); when(rateLimiters.getRecaptchaChallengeSuccessLimiter()).thenReturn(mock(RateLimiter.class)); 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 728be8203..0bc90ae0c 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 @@ -75,7 +75,7 @@ import org.whispersystems.textsecuregcm.push.APNSender; import org.whispersystems.textsecuregcm.push.ApnMessage; import org.whispersystems.textsecuregcm.push.GCMSender; import org.whispersystems.textsecuregcm.push.GcmMessage; -import org.whispersystems.textsecuregcm.recaptcha.RecaptchaClient; +import org.whispersystems.textsecuregcm.recaptcha.LegacyRecaptchaClient; import org.whispersystems.textsecuregcm.sms.SmsSender; import org.whispersystems.textsecuregcm.sms.TwilioVerifyExperimentEnrollmentManager; import org.whispersystems.textsecuregcm.storage.AbusiveHostRule; @@ -131,7 +131,7 @@ class AccountControllerTest { private static Account senderRegLockAccount = mock(Account.class); private static Account senderHasStorage = mock(Account.class); private static Account senderTransfer = mock(Account.class); - private static RecaptchaClient recaptchaClient = mock(RecaptchaClient.class); + private static LegacyRecaptchaClient legacyRecaptchaClient = mock(LegacyRecaptchaClient.class); private static GCMSender gcmSender = mock(GCMSender.class); private static APNSender apnSender = mock(APNSender.class); private static UsernamesManager usernamesManager = mock(UsernamesManager.class); @@ -160,7 +160,7 @@ class AccountControllerTest { dynamicConfigurationManager, turnTokenGenerator, new HashMap<>(), - recaptchaClient, + legacyRecaptchaClient, gcmSender, apnSender, storageCredentialGenerator, @@ -241,8 +241,8 @@ class AccountControllerTest { when(abusiveHostRules.getAbusiveHostRulesFor(eq(RESTRICTED_HOST))).thenReturn(Collections.singletonList(new AbusiveHostRule(RESTRICTED_HOST, false, Collections.singletonList("+123")))); when(abusiveHostRules.getAbusiveHostRulesFor(eq(NICE_HOST))).thenReturn(Collections.emptyList()); - when(recaptchaClient.verify(eq(INVALID_CAPTCHA_TOKEN), anyString())).thenReturn(false); - when(recaptchaClient.verify(eq(VALID_CAPTCHA_TOKEN), anyString())).thenReturn(true); + when(legacyRecaptchaClient.verify(eq(INVALID_CAPTCHA_TOKEN), anyString())).thenReturn(false); + when(legacyRecaptchaClient.verify(eq(VALID_CAPTCHA_TOKEN), anyString())).thenReturn(true); doThrow(new RateLimitExceededException(SENDER_OVER_PIN, Duration.ZERO)).when(pinLimiter).validate(eq(SENDER_OVER_PIN)); @@ -273,7 +273,7 @@ class AccountControllerTest { senderRegLockAccount, senderHasStorage, senderTransfer, - recaptchaClient, + legacyRecaptchaClient, gcmSender, apnSender, usernamesManager, @@ -711,7 +711,7 @@ class AccountControllerTest { assertThat(response.getStatus()).isEqualTo(200); verifyNoMoreInteractions(abusiveHostRules); - verify(recaptchaClient).verify(eq(VALID_CAPTCHA_TOKEN), eq(ABUSIVE_HOST)); + verify(legacyRecaptchaClient).verify(eq(VALID_CAPTCHA_TOKEN), eq(ABUSIVE_HOST)); if (enrolledInVerifyExperiment) { verify(smsSender).deliverSmsVerificationWithTwilioVerify(eq(SENDER), eq(Optional.empty()), anyString(), eq(Collections.emptyList())); @@ -742,7 +742,7 @@ class AccountControllerTest { assertThat(response.getStatus()).isEqualTo(402); verifyNoMoreInteractions(abusiveHostRules); - verify(recaptchaClient).verify(eq(INVALID_CAPTCHA_TOKEN), eq(ABUSIVE_HOST)); + verify(legacyRecaptchaClient).verify(eq(INVALID_CAPTCHA_TOKEN), eq(ABUSIVE_HOST)); verifyNoMoreInteractions(smsSender); } @@ -772,7 +772,7 @@ class AccountControllerTest { verify(abusiveHostRules).setBlockedHost(eq(RATE_LIMITED_IP_HOST), eq("Auto-Block")); verifyNoMoreInteractions(abusiveHostRules); - verifyNoMoreInteractions(recaptchaClient); + verifyNoMoreInteractions(legacyRecaptchaClient); verifyNoMoreInteractions(smsSender); } @@ -802,7 +802,7 @@ class AccountControllerTest { verify(abusiveHostRules).setBlockedHost(eq(RATE_LIMITED_PREFIX_HOST), eq("Auto-Block")); verifyNoMoreInteractions(abusiveHostRules); - verifyNoMoreInteractions(recaptchaClient); + verifyNoMoreInteractions(legacyRecaptchaClient); verifyNoMoreInteractions(smsSender); } @@ -831,7 +831,7 @@ class AccountControllerTest { verify(abusiveHostRules).getAbusiveHostRulesFor(eq(RATE_LIMITED_HOST2)); verifyNoMoreInteractions(abusiveHostRules); - verifyNoMoreInteractions(recaptchaClient); + verifyNoMoreInteractions(legacyRecaptchaClient); verifyNoMoreInteractions(smsSender); }