Allow signup captchas to target CLDR two-letter region codes

This commit is contained in:
Jon Chambers
2022-08-26 11:10:02 -04:00
committed by Jon Chambers
parent d23e89fb9c
commit b280c768a4
4 changed files with 80 additions and 4 deletions

View File

@@ -21,6 +21,14 @@ public class DynamicCaptchaConfiguration {
@NotNull
private Set<String> signupCountryCodes = Collections.emptySet();
@JsonProperty
@NotNull
private Set<String> signupRegions = Collections.emptySet();
public BigDecimal getScoreFloor() {
return scoreFloor;
}
public Set<String> getSignupCountryCodes() {
return signupCountryCodes;
}
@@ -30,7 +38,12 @@ public class DynamicCaptchaConfiguration {
this.signupCountryCodes = numbers;
}
public BigDecimal getScoreFloor() {
return scoreFloor;
@VisibleForTesting
public void setSignupRegions(final Set<String> signupRegions) {
this.signupRegions = signupRegions;
}
public Set<String> getSignupRegions() {
return signupRegions;
}
}

View File

@@ -776,6 +776,8 @@ public class AccountController {
}
final String countryCode = Util.getCountryCode(number);
final String region = Util.getRegion(number);
if (captchaToken.isPresent()) {
boolean validToken = recaptchaClient.verify(captchaToken.get(), sourceHost);
@@ -822,7 +824,9 @@ public class AccountController {
DynamicCaptchaConfiguration captchaConfig = dynamicConfigurationManager.getConfiguration()
.getCaptchaConfiguration();
boolean countryFiltered = captchaConfig.getSignupCountryCodes().contains(countryCode);
boolean countryFiltered = captchaConfig.getSignupCountryCodes().contains(countryCode) ||
captchaConfig.getSignupRegions().contains(region);
if (abusiveHostRules.isBlocked(sourceHost)) {
blockedHostMeter.mark();

View File

@@ -79,6 +79,15 @@ public class Util {
else return "0";
}
public static String getRegion(final String number) {
try {
final PhoneNumber phoneNumber = PHONE_NUMBER_UTIL.parse(number, null);
return PHONE_NUMBER_UTIL.getRegionCodeForNumber(phoneNumber);
} catch (final NumberParseException e) {
return "ZZ";
}
}
public static String getNumberPrefix(String number) {
String countryCode = getCountryCode(number);
int remaining = number.length() - (1 + countryCode.length());