From 88353e87480c8bd6f2da3c99c3e6a288e01b88b3 Mon Sep 17 00:00:00 2001 From: Moxie Marlinspike Date: Thu, 20 Dec 2018 10:36:51 -0800 Subject: [PATCH] Support fallback to default language without country-specific locale --- .../VoiceVerificationController.java | 4 +++ .../VoiceVerificationControllerTest.java | 17 +++++++++++- .../fixtures/voice_verification_ru.xml | 26 +++++++++++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 src/test/resources/fixtures/voice_verification_ru.xml diff --git a/src/main/java/org/whispersystems/textsecuregcm/controllers/VoiceVerificationController.java b/src/main/java/org/whispersystems/textsecuregcm/controllers/VoiceVerificationController.java index aedc77cf8..7b7f220ee 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/controllers/VoiceVerificationController.java +++ b/src/main/java/org/whispersystems/textsecuregcm/controllers/VoiceVerificationController.java @@ -65,6 +65,10 @@ public class VoiceVerificationController { return getLocalizedDescription(code, locale); } + if (locale != null && locale.split("-").length >= 1 && supportedLocales.contains(locale.split("-")[0])) { + return getLocalizedDescription(code, locale.split("-")[0]); + } + return getLocalizedDescription(code, "en-US"); } diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/VoiceVerificationControllerTest.java b/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/VoiceVerificationControllerTest.java index e39a4a381..94229f017 100644 --- a/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/VoiceVerificationControllerTest.java +++ b/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/VoiceVerificationControllerTest.java @@ -10,7 +10,9 @@ import org.whispersystems.textsecuregcm.tests.util.AuthHelper; import org.whispersystems.textsecuregcm.util.SystemMapper; import javax.ws.rs.core.Response; +import java.util.Arrays; import java.util.Collections; +import java.util.HashSet; import io.dropwizard.auth.AuthValueFactoryProvider; import io.dropwizard.testing.FixtureHelpers; @@ -27,7 +29,7 @@ public class VoiceVerificationControllerTest { .setMapper(SystemMapper.getMapper()) .setTestContainerFactory(new GrizzlyWebTestContainerFactory()) .addResource(new VoiceVerificationController("https://foo.com/bar", - Collections.singleton("pt-BR"))) + new HashSet<>(Arrays.asList("pt-BR", "ru")))) .build(); @Test @@ -43,6 +45,19 @@ public class VoiceVerificationControllerTest { assertThat(response.readEntity(String.class)).isXmlEqualTo(FixtureHelpers.fixture("fixtures/voice_verification_pt_br.xml")); } + @Test + public void testTwimlSplitLocale() { + Response response = + resources.getJerseyTest() + .target("/v1/voice/description/123456") + .queryParam("l", "ru-RU") + .request() + .post(null); + + assertThat(response.getStatus()).isEqualTo(200); + assertThat(response.readEntity(String.class)).isXmlEqualTo(FixtureHelpers.fixture("fixtures/voice_verification_ru.xml")); + } + @Test public void testTwimlUnsupportedLocale() { Response response = diff --git a/src/test/resources/fixtures/voice_verification_ru.xml b/src/test/resources/fixtures/voice_verification_ru.xml new file mode 100644 index 000000000..a204ad34c --- /dev/null +++ b/src/test/resources/fixtures/voice_verification_ru.xml @@ -0,0 +1,26 @@ + + + https://foo.com/bar/ru/verification.mp3 + https://foo.com/bar/ru/1_middle.mp3 + https://foo.com/bar/ru/2_middle.mp3 + https://foo.com/bar/ru/3_middle.mp3 + https://foo.com/bar/ru/4_middle.mp3 + https://foo.com/bar/ru/5_middle.mp3 + https://foo.com/bar/ru/6_falling.mp3 + + https://foo.com/bar/ru/verification.mp3 + https://foo.com/bar/ru/1_middle.mp3 + https://foo.com/bar/ru/2_middle.mp3 + https://foo.com/bar/ru/3_middle.mp3 + https://foo.com/bar/ru/4_middle.mp3 + https://foo.com/bar/ru/5_middle.mp3 + https://foo.com/bar/ru/6_falling.mp3 + + https://foo.com/bar/ru/verification.mp3 + https://foo.com/bar/ru/1_middle.mp3 + https://foo.com/bar/ru/2_middle.mp3 + https://foo.com/bar/ru/3_middle.mp3 + https://foo.com/bar/ru/4_middle.mp3 + https://foo.com/bar/ru/5_middle.mp3 + https://foo.com/bar/ru/6_falling.mp3 +