Normalize Benin phone numbers to the new format before sending to registration service

This commit is contained in:
Katherine
2024-12-02 07:57:27 -08:00
committed by GitHub
parent 4d87b741cd
commit 9e312cbdfa
4 changed files with 120 additions and 10 deletions

View File

@@ -160,7 +160,7 @@ public class VerificationController {
final Phonenumber.PhoneNumber phoneNumber;
try {
phoneNumber = PhoneNumberUtil.getInstance().parse(request.getNumber(), null);
phoneNumber = Util.canonicalizePhoneNumber(PhoneNumberUtil.getInstance().parse(request.getNumber(), null));
} catch (final NumberParseException e) {
throw new ServerErrorException("could not parse already validated number", Response.Status.INTERNAL_SERVER_ERROR);
}

View File

@@ -7,6 +7,7 @@ package org.whispersystems.textsecuregcm.util;
import com.google.i18n.phonenumbers.NumberParseException;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat;
import com.google.i18n.phonenumbers.Phonenumber;
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
import jakarta.ws.rs.core.Response;
import java.time.Clock;
@@ -215,6 +216,34 @@ public class Util {
return workingCopy == prefix;
}
/**
* Benin is changing phone number formats from +229 XXXXXXXX to +229 01XXXXXXXX starting on November 30, 2024.
*
* @param phoneNumber the phone number to check.
* @return whether the provided phone number is an old-format Benin phone number
*/
public static boolean isOldFormatBeninPhoneNumber(final Phonenumber.PhoneNumber phoneNumber) {
return "BJ".equals(PHONE_NUMBER_UTIL.getRegionCodeForNumber(phoneNumber)) &&
PHONE_NUMBER_UTIL.getNationalSignificantNumber(phoneNumber).length() == 8;
}
/**
* If applicable, return the canonical form of the provided phone number.
* This is relevant in cases where a numbering authority has changed the numbering format for a region.
*
* @param phoneNumber the phone number to canonicalize.
* @return the canonical phone number if applicable, otherwise the original phone number.
*/
public static Phonenumber.PhoneNumber canonicalizePhoneNumber(final Phonenumber.PhoneNumber phoneNumber)
throws NumberParseException {
if (isOldFormatBeninPhoneNumber(phoneNumber)) {
// Benin changed phone number formats from +229 XXXXXXXX to +229 01XXXXXXXX starting on November 30, 2024.
final String newFormatNumber = "+22901" + PHONE_NUMBER_UTIL.getNationalSignificantNumber(phoneNumber);
return PhoneNumberUtil.getInstance().parse(newFormatNumber, null);
}
return phoneNumber;
}
public static byte[] truncate(byte[] element, int length) {
byte[] result = new byte[length];
System.arraycopy(element, 0, result, 0, result.length);