From 8574494573f42e3c6a1579430bf6b66dad2bb1b4 Mon Sep 17 00:00:00 2001 From: Chris Eager Date: Mon, 11 Mar 2024 14:07:58 -0500 Subject: [PATCH] Support "captcha" rename in AnswerChallengeRequest.type --- .../entities/AnswerChallengeRequest.java | 1 + .../controllers/ChallengeControllerTest.java | 18 +++++++++--------- .../entities/AnswerChallengeRequestTest.java | 16 +++++++++------- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/entities/AnswerChallengeRequest.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/AnswerChallengeRequest.java index c7ec4782e..97c284982 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/entities/AnswerChallengeRequest.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/entities/AnswerChallengeRequest.java @@ -11,6 +11,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type") @JsonSubTypes({ @JsonSubTypes.Type(value = AnswerPushChallengeRequest.class, name = "rateLimitPushChallenge"), + @JsonSubTypes.Type(value = AnswerRecaptchaChallengeRequest.class, name = "captcha"), @JsonSubTypes.Type(value = AnswerRecaptchaChallengeRequest.class, name = "recaptcha") }) public abstract class AnswerChallengeRequest { diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/ChallengeControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/ChallengeControllerTest.java index 84af26e21..67b3cb5c4 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/controllers/ChallengeControllerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/controllers/ChallengeControllerTest.java @@ -115,9 +115,9 @@ class ChallengeControllerTest { @ParameterizedTest @ValueSource(booleans = { true, false } ) void testHandleRecaptcha(boolean hasThreshold) throws RateLimitExceededException, IOException { - final String recaptchaChallengeJson = """ + final String captchaChallengeJson = """ { - "type": "recaptcha", + "type": "captcha", "token": "A server-generated token", "captcha": "The value of the solved captcha token" } @@ -134,7 +134,7 @@ class ChallengeControllerTest { final Response response = EXTENSION.target("/v1/challenge") .request() .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_UUID, AuthHelper.VALID_PASSWORD)) - .put(Entity.json(recaptchaChallengeJson)); + .put(Entity.json(captchaChallengeJson)); assertEquals(200, response.getStatus()); @@ -145,9 +145,9 @@ class ChallengeControllerTest { @Test void testHandleInvalidCaptcha() throws RateLimitExceededException, IOException { - final String recaptchaChallengeJson = """ + final String captchaChallengeJson = """ { - "type": "recaptcha", + "type": "captcha", "token": "A server-generated token", "captcha": "The value of the solved captcha token" } @@ -159,16 +159,16 @@ class ChallengeControllerTest { final Response response = EXTENSION.target("/v1/challenge") .request() .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_UUID, AuthHelper.VALID_PASSWORD)) - .put(Entity.json(recaptchaChallengeJson)); + .put(Entity.json(captchaChallengeJson)); assertEquals(428, response.getStatus()); } @Test void testHandleRecaptchaRateLimited() throws RateLimitExceededException, IOException { - final String recaptchaChallengeJson = """ + final String captchaChallengeJson = """ { - "type": "recaptcha", + "type": "captcha", "token": "A server-generated token", "captcha": "The value of the solved captcha token" } @@ -181,7 +181,7 @@ class ChallengeControllerTest { final Response response = EXTENSION.target("/v1/challenge") .request() .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_UUID, AuthHelper.VALID_PASSWORD)) - .put(Entity.json(recaptchaChallengeJson)); + .put(Entity.json(captchaChallengeJson)); assertEquals(413, response.getStatus()); assertEquals(String.valueOf(retryAfter.toSeconds()), response.getHeaderString("Retry-After")); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/entities/AnswerChallengeRequestTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/entities/AnswerChallengeRequestTest.java index 8572833d9..a5ad27e81 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/entities/AnswerChallengeRequestTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/entities/AnswerChallengeRequestTest.java @@ -11,13 +11,15 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.exc.InvalidTypeIdException; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.whispersystems.textsecuregcm.util.SystemMapper; class AnswerChallengeRequestTest { - @Test - void parse() throws JsonProcessingException { + @ParameterizedTest + @ValueSource(strings = {"captcha", "recaptcha"}) + void parse(final String type) throws JsonProcessingException { { final String pushChallengeJson = """ { @@ -35,16 +37,16 @@ class AnswerChallengeRequestTest { } { - final String recaptchaChallengeJson = """ + final String captchaChallengeJson = """ { - "type": "recaptcha", + "type": "%s", "token": "A server-generated token", "captcha": "The value of the solved captcha token" } - """; + """.formatted(type); final AnswerChallengeRequest answerChallengeRequest = - SystemMapper.jsonMapper().readValue(recaptchaChallengeJson, AnswerChallengeRequest.class); + SystemMapper.jsonMapper().readValue(captchaChallengeJson, AnswerChallengeRequest.class); assertTrue(answerChallengeRequest instanceof AnswerRecaptchaChallengeRequest);