diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/VerificationCodeParser.java b/app/src/main/java/org/thoughtcrime/securesms/service/VerificationCodeParser.java index 546c72848..be1693b3d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/VerificationCodeParser.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/VerificationCodeParser.java @@ -26,7 +26,7 @@ import java.util.regex.Pattern; public class VerificationCodeParser { - private static final Pattern CHALLENGE_PATTERN = Pattern.compile(".*Your (Signal|TextSecure) verification code:? ([0-9]{3,4})-([0-9]{3,4}).*", Pattern.DOTALL); + private static final Pattern CHALLENGE_PATTERN = Pattern.compile("(.*\\D|^)([0-9]{3,4})-([0-9]{3,4}).*", Pattern.DOTALL); public static Optional parse(Context context, String messageBody) { if (messageBody == null) { @@ -39,6 +39,7 @@ public class VerificationCodeParser { return Optional.absent(); } - return Optional.of(challengeMatcher.group(2) + challengeMatcher.group(3)); + return Optional.of(challengeMatcher.group(challengeMatcher.groupCount() - 1) + + challengeMatcher.group(challengeMatcher.groupCount())); } } diff --git a/app/src/test/java/org/thoughtcrime/securesms/service/VerificationCodeParserTest.java b/app/src/test/java/org/thoughtcrime/securesms/service/VerificationCodeParserTest.java index 26b7c03c5..ee0ce89dd 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/service/VerificationCodeParserTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/service/VerificationCodeParserTest.java @@ -5,9 +5,8 @@ import org.junit.Test; import org.thoughtcrime.securesms.BaseUnitTest; import org.whispersystems.libsignal.util.guava.Optional; -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; +import java.util.Arrays; +import java.util.Collection; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -16,31 +15,44 @@ import static org.mockito.Matchers.contains; import static org.mockito.Mockito.when; public class VerificationCodeParserTest extends BaseUnitTest { - private static Map CHALLENGES = new HashMap() {{ - put("Your TextSecure verification code: 337-337", "337337"); - put("XXX\nYour TextSecure verification code: 1337-1337", "13371337"); - put("Your TextSecure verification code: 337-1337", "3371337"); - put("Your TextSecure verification code: 1337-337", "1337337"); - put("Your TextSecure verification code: 1337-1337", "13371337"); - put("XXXYour TextSecure verification code: 1337-1337", "13371337"); - put("Your TextSecure verification code: 1337-1337XXX", "13371337"); - put("Your TextSecure verification code 1337-1337", "13371337"); - put("Your Signal verification code: 337-337", "337337"); - put("XXX\nYour Signal verification code: 1337-1337", "13371337"); - put("Your Signal verification code: 337-1337", "3371337"); - put("Your Signal verification code: 1337-337", "1337337"); - put("Your Signal verification code: 1337-1337", "13371337"); - put("XXXYour Signal verification code: 1337-1337", "13371337"); - put("Your Signal verification code: 1337-1337XXX", "13371337"); - put("Your Signal verification code 1337-1337", "13371337"); + public static Collection challenges() { + return Arrays.asList(new String[][]{ + {"Your TextSecure verification code: 337-337", "337337"}, + {"XXX\nYour TextSecure verification code: 1337-1337", "13371337"}, + {"Your TextSecure verification code: 337-1337", "3371337"}, + {"Your TextSecure verification code: 1337-337", "1337337"}, + {"Your TextSecure verification code: 1337-1337", "13371337"}, + {"XXXYour TextSecure verification code: 1337-1337", "13371337"}, + {"Your TextSecure verification code: 1337-1337XXX", "13371337"}, + {"Your TextSecure verification code 1337-1337", "13371337"}, - put("<#>Your Signal verification code: 1337-1337 aAbBcCdDeEf", "13371337"); - put("<#> Your Signal verification code: 1337-1337 aAbBcCdDeEf", "13371337"); - put("<#>Your Signal verification code: 1337-1337\naAbBcCdDeEf", "13371337"); - put("<#> Your Signal verification code: 1337-1337\naAbBcCdDeEf", "13371337"); - put("<#> Your Signal verification code: 1337-1337\n\naAbBcCdDeEf", "13371337"); - }}; + {"Your Signal verification code: 337-337", "337337"}, + {"XXX\nYour Signal verification code: 1337-1337", "13371337"}, + {"Your Signal verification code: 337-1337", "3371337"}, + {"Your Signal verification code: 1337-337", "1337337"}, + {"Your Signal verification code: 1337-1337", "13371337"}, + {"XXXYour Signal verification code: 1337-1337", "13371337"}, + {"Your Signal verification code: 1337-1337XXX", "13371337"}, + {"Your Signal verification code 1337-1337", "13371337"}, + + {"<#>Your Signal verification code: 1337-1337 aAbBcCdDeEf", "13371337"}, + {"<#> Your Signal verification code: 1337-1337 aAbBcCdDeEf", "13371337"}, + {"<#>Your Signal verification code: 1337-1337\naAbBcCdDeEf", "13371337"}, + {"<#> Your Signal verification code: 1337-1337\naAbBcCdDeEf", "13371337"}, + {"<#> Your Signal verification code: 1337-1337\n\naAbBcCdDeEf", "13371337"}, + + {" 1234-5678", "12345678"}, + {"1234-5678", "12345678"}, + {">1234-5678 is your verification code.", "12345678"}, + {"1234-5678 is your verification code.", "12345678"}, + {"$1234-5678", "12345678"}, + {"hi 1234-5678\n\nsgnl://verify/1234-5678\n\naAbBcCdDeEf", "12345678"}, + {"howdy 1234-5678\n\nsgnl://verify/1234-5678\n\naAbBcCdDeEf", "12345678"}, + {"test 1234-5678\n\nsgnl://verify/1234-5678", "12345678"}, + {"%#($#&@**$@(@*1234-5678\naAbBcCdDeEf", "12345678"} + }); + } @Before @Override @@ -51,11 +63,10 @@ public class VerificationCodeParserTest extends BaseUnitTest { @Test public void testChallenges() { - for (Entry challenge : CHALLENGES.entrySet()) { - Optional result = VerificationCodeParser.parse(context, challenge.getKey()); - + for (String[] challenge : challenges()) { + Optional result = VerificationCodeParser.parse(context, challenge[0]); assertTrue(result.isPresent()); - assertEquals(result.get(), challenge.getValue()); + assertEquals(challenge[1], result.get()); } } } diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java index c7133e10e..78aabc0a3 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java @@ -235,7 +235,7 @@ public class PushServiceSocket { } public void requestSmsVerificationCode(boolean androidSmsRetriever, Optional captchaToken, Optional challenge) throws IOException { - String path = String.format(CREATE_ACCOUNT_SMS_PATH, credentialsProvider.getE164(), androidSmsRetriever ? "android-ng" : "android"); + String path = String.format(CREATE_ACCOUNT_SMS_PATH, credentialsProvider.getE164(), androidSmsRetriever ? "android-2020-01" : "android"); if (captchaToken.isPresent()) { path += "&captcha=" + captchaToken.get();