From 2c4cd0378e93cfdfd6d78b15d252d85fa1882a38 Mon Sep 17 00:00:00 2001 From: Stoyan Tzenkov Date: Thu, 20 Sep 2018 14:51:39 +0300 Subject: [PATCH 1/6] Story NY-599: Unify phone representation in DB using libphone --- pom.xml | 6 ++ .../nynja/account/components/Validator.java | 25 ++++++- .../account/services/AccountServiceImpl.java | 10 ++- ...ibphoneNormalizationParameterizedTest.java | 66 +++++++++++++++++++ .../account/components/ValidatorTests.java | 64 +++++++++++++++++- 5 files changed, 166 insertions(+), 5 deletions(-) create mode 100644 src/test/java/biz/nynja/account/components/LibphoneNormalizationParameterizedTest.java diff --git a/pom.xml b/pom.xml index 9f00670..7e8627c 100644 --- a/pom.xml +++ b/pom.xml @@ -111,6 +111,12 @@ + + com.googlecode.libphonenumber + libphonenumber + 8.9.12 + + com.fasterxml.jackson.core jackson-databind diff --git a/src/main/java/biz/nynja/account/components/Validator.java b/src/main/java/biz/nynja/account/components/Validator.java index 769307b..8b68995 100644 --- a/src/main/java/biz/nynja/account/components/Validator.java +++ b/src/main/java/biz/nynja/account/components/Validator.java @@ -20,8 +20,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.stereotype.Component; - import biz.nynja.account.grpc.AddAuthenticationProviderRequest; +import com.google.i18n.phonenumbers.NumberParseException; +import com.google.i18n.phonenumbers.PhoneNumberUtil; +import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber; import biz.nynja.account.grpc.AuthProviderDetails; import biz.nynja.account.grpc.AuthenticationType; import biz.nynja.account.grpc.CompletePendingAccountCreationRequest; @@ -126,6 +128,27 @@ public class Validator { return isValid; } + + public String getNormalizedPhoneNumber(String authenticationProvider) { + String[] provider = authenticationProvider.split(":"); + String country = provider[0]; + String phoneNumber = provider[1]; + logger.info("libphone: New phone number normalization request received - phone number: {}, country code: {}", phoneNumber, + country); + + PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance(); + String normalizedPhoneNumber = null; + try { + PhoneNumber pn = phoneUtil.parse(phoneNumber, country); + normalizedPhoneNumber = Integer.toString(pn.getCountryCode()) + + Long.toString(pn.getNationalNumber()); + logger.info("libphone: Normalized phone number: " + normalizedPhoneNumber); + } catch (NumberParseException e) { + logger.error("libphone: NumberParseException was thrown: {}", e.toString()); + logger.debug("libphone: NumberParseException was thrown: {}", e.getCause()); + } + return normalizedPhoneNumber; + } public boolean isUsernameValid(String username) { diff --git a/src/main/java/biz/nynja/account/services/AccountServiceImpl.java b/src/main/java/biz/nynja/account/services/AccountServiceImpl.java index 4370660..0e6062c 100644 --- a/src/main/java/biz/nynja/account/services/AccountServiceImpl.java +++ b/src/main/java/biz/nynja/account/services/AccountServiceImpl.java @@ -12,7 +12,6 @@ import org.lognet.springboot.grpc.GRpcService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; - import biz.nynja.account.components.AccountServiceHelper; import biz.nynja.account.components.Validator; import biz.nynja.account.grpc.AccountByAccountIdRequest; @@ -256,7 +255,12 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas return; } - PendingAccount pendingAccount = PendingAccount.fromProto(request); + // Get just a normalized phone number by libphone + CreatePendingAccountRequest requestNew = CreatePendingAccountRequest.newBuilder() + .setAuthenticationType(request.getAuthenticationType()) + .setAuthenticationProvider(validator.getNormalizedPhoneNumber(request.getAuthenticationProvider())).build(); + + PendingAccount pendingAccount = PendingAccount.fromProto(requestNew); pendingAccount.setAccountId(UUID.randomUUID()); pendingAccount.setProfileId(UUID.randomUUID()); @@ -274,7 +278,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas return; } - + @Override public void completePendingAccountCreation(CompletePendingAccountCreationRequest request, StreamObserver responseObserver) { diff --git a/src/test/java/biz/nynja/account/components/LibphoneNormalizationParameterizedTest.java b/src/test/java/biz/nynja/account/components/LibphoneNormalizationParameterizedTest.java new file mode 100644 index 0000000..3fd85c1 --- /dev/null +++ b/src/test/java/biz/nynja/account/components/LibphoneNormalizationParameterizedTest.java @@ -0,0 +1,66 @@ +package biz.nynja.account.components; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import java.util.Arrays; +import java.util.Collection; + +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestContextManager; +import org.springframework.test.context.TestExecutionListeners; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit4.rules.SpringClassRule; +import org.springframework.test.context.junit4.rules.SpringMethodRule; + +import biz.nynja.account.services.AccountServiceImpl; + +// To run the test change AccountServiceImpl class to public + +@RunWith(Parameterized.class) +@TestExecutionListeners({}) +@ContextConfiguration(classes = { AccountServiceImpl.class }) +public class LibphoneNormalizationParameterizedTest { + private String expectedPhoneNumber; + private String inputPhoneNumber; + + private AccountServiceImpl accountServiceImpl = new AccountServiceImpl(); + + @ClassRule + public static final SpringClassRule SPRING_CLASS_RULE = new SpringClassRule(); + + @Rule + public final SpringMethodRule springMethodRule = new SpringMethodRule(); + + public LibphoneNormalizationParameterizedTest(String expectedPhoneNumber, String inputPhoneNumber) { + this.expectedPhoneNumber = expectedPhoneNumber; + this.inputPhoneNumber = inputPhoneNumber; + } + + @Parameterized.Parameters + public static Collection phoneNumbers() { + return Arrays.asList(new Object[][] { { "359887345234", "BG:+359887345234" }, + { "359887345234", "BG:00359887345234" }, + { "359887345234", "BG:359 887 345 234" }, + { "359887345234", "BG:359887345234567" }, + { "359887345234", "BG:359 887 345" }, + { "359887345234", "BG:359-887-345-234" } }); + } + + @Test + public void testNormalizedPhoneNumber() { + System.out.println("Input Phone Number is : " + inputPhoneNumber); + // To run the test change the getNormalizedPhoneNumber method to public + // and uncomment the lines bellow +// String normalized = accountServiceImpl.getNormalizedPhoneNumber(inputPhoneNumber); +// System.out.println("Normalized Phone Number is : " + normalized); +// assertEquals(expectedPhoneNumber, normalized); + } +} diff --git a/src/test/java/biz/nynja/account/components/ValidatorTests.java b/src/test/java/biz/nynja/account/components/ValidatorTests.java index 6764818..1c6f789 100644 --- a/src/test/java/biz/nynja/account/components/ValidatorTests.java +++ b/src/test/java/biz/nynja/account/components/ValidatorTests.java @@ -6,6 +6,7 @@ package biz.nynja.account.components; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; @@ -16,7 +17,6 @@ import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; -import biz.nynja.account.components.Validator; import biz.nynja.account.grpc.AuthProviderDetails; import biz.nynja.account.grpc.AuthenticationType; import biz.nynja.account.grpc.CompletePendingAccountCreationRequest; @@ -60,7 +60,69 @@ public class ValidatorTests { isValid == true); } + + @Test + public void validNormalizedPhoneNumberTest1() { + + String expectedPhoneNumber = "359887345234"; + String inputPhoneNumber = "BG:+359887345234"; + String normalizedPhoneNumber = validator.getNormalizedPhoneNumber(inputPhoneNumber); + assertEquals(String.format("Phone number: '%s' should be normalized to '%s'", inputPhoneNumber, expectedPhoneNumber), + expectedPhoneNumber, normalizedPhoneNumber); + } + + @Test + public void validNormalizedPhoneNumberTest2() { + + String expectedPhoneNumber = "359887345234"; + String inputPhoneNumber = "BG:00359887345234"; + String normalizedPhoneNumber = validator.getNormalizedPhoneNumber(inputPhoneNumber); + assertEquals(String.format("Phone number: '%s' should be normalized to '%s'", inputPhoneNumber, expectedPhoneNumber), + expectedPhoneNumber, normalizedPhoneNumber); + } + + @Test + public void validNormalizedPhoneNumberTest3() { + + String expectedPhoneNumber = "359887345234"; + String inputPhoneNumber = "BG:359-887-345-234"; + String normalizedPhoneNumber = validator.getNormalizedPhoneNumber(inputPhoneNumber); + assertEquals(String.format("Phone number: '%s' should be normalized to '%s'", inputPhoneNumber, expectedPhoneNumber), + expectedPhoneNumber, normalizedPhoneNumber); + } + @Test + public void validNormalizedPhoneNumberTest4() { + + String expectedPhoneNumber = "359887345234"; + String inputPhoneNumber = "BG:359 887 345 234"; + String normalizedPhoneNumber = validator.getNormalizedPhoneNumber(inputPhoneNumber); + assertEquals(String.format("Phone number: '%s' should be normalized to '%s'", inputPhoneNumber, expectedPhoneNumber), + expectedPhoneNumber, normalizedPhoneNumber); + } + + @Test + public void invalidNormalizedPhoneNumberTest1() { + + String expectedPhoneNumber = "359887345234"; + String inputPhoneNumber = "BG:359887345234567"; + String normalizedPhoneNumber = validator.getNormalizedPhoneNumber(inputPhoneNumber); + assertNotEquals(String.format("Phone number: '%s' should be normalized to '%s'", inputPhoneNumber, expectedPhoneNumber), + expectedPhoneNumber, normalizedPhoneNumber); + } + + @Test + public void invalidNormalizedPhoneNumberTest2() { + + String expectedPhoneNumber = "359887345234"; + String inputPhoneNumber = "BG:35988734523"; + String normalizedPhoneNumber = validator.getNormalizedPhoneNumber(inputPhoneNumber); + assertNotEquals(String.format("Phone number: '%s' should be normalized to '%s'", inputPhoneNumber, expectedPhoneNumber), + expectedPhoneNumber, normalizedPhoneNumber); + } + + + @Test public void validUsernameTest() { -- GitLab From a67e137e6b07b2642dd0174c789e2a61f3911507 Mon Sep 17 00:00:00 2001 From: Stoyan Tzenkov Date: Mon, 1 Oct 2018 13:54:51 +0300 Subject: [PATCH 2/6] NY_599: Improved AccountServiceImpl.createPendingAccount --- .../nynja/account/services/AccountServiceImpl.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/main/java/biz/nynja/account/services/AccountServiceImpl.java b/src/main/java/biz/nynja/account/services/AccountServiceImpl.java index 0e6062c..64da90f 100644 --- a/src/main/java/biz/nynja/account/services/AccountServiceImpl.java +++ b/src/main/java/biz/nynja/account/services/AccountServiceImpl.java @@ -254,13 +254,11 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas responseObserver.onCompleted(); return; } - - // Get just a normalized phone number by libphone - CreatePendingAccountRequest requestNew = CreatePendingAccountRequest.newBuilder() - .setAuthenticationType(request.getAuthenticationType()) - .setAuthenticationProvider(validator.getNormalizedPhoneNumber(request.getAuthenticationProvider())).build(); - - PendingAccount pendingAccount = PendingAccount.fromProto(requestNew); + + PendingAccount pendingAccount = PendingAccount.fromProto(request); + + // Get the normalized phone number from libphone + pendingAccount.setAuthenticationProvider(validator.getNormalizedPhoneNumber(request.getAuthenticationProvider())); pendingAccount.setAccountId(UUID.randomUUID()); pendingAccount.setProfileId(UUID.randomUUID()); -- GitLab From 53fa4be0d2219d13f5f776dc30753d8174c671f9 Mon Sep 17 00:00:00 2001 From: Stoyan Tzenkov Date: Tue, 2 Oct 2018 09:19:28 +0300 Subject: [PATCH 3/6] NY_599: Implemented code review suggestion. Signed-off-by: Stoyan Tzenkov --- .../account/services/AccountServiceImpl.java | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/src/main/java/biz/nynja/account/services/AccountServiceImpl.java b/src/main/java/biz/nynja/account/services/AccountServiceImpl.java index 64da90f..38cbc71 100644 --- a/src/main/java/biz/nynja/account/services/AccountServiceImpl.java +++ b/src/main/java/biz/nynja/account/services/AccountServiceImpl.java @@ -23,6 +23,7 @@ import biz.nynja.account.grpc.AccountsByProfileIdRequest; import biz.nynja.account.grpc.AccountsList; import biz.nynja.account.grpc.AccountsResponse; import biz.nynja.account.grpc.AddAuthenticationProviderRequest; +import biz.nynja.account.grpc.AuthenticationType; import biz.nynja.account.grpc.CompletePendingAccountCreationRequest; import biz.nynja.account.grpc.CreateAccountRequest; import biz.nynja.account.grpc.CreatePendingAccountRequest; @@ -254,11 +255,13 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas responseObserver.onCompleted(); return; } - + PendingAccount pendingAccount = PendingAccount.fromProto(request); - - // Get the normalized phone number from libphone - pendingAccount.setAuthenticationProvider(validator.getNormalizedPhoneNumber(request.getAuthenticationProvider())); + + if (request.getAuthenticationType() == AuthenticationType.PHONE) { + // Get the normalized phone number from libphone + pendingAccount.setAuthenticationProvider(validator.getNormalizedPhoneNumber(request.getAuthenticationProvider())); + } pendingAccount.setAccountId(UUID.randomUUID()); pendingAccount.setProfileId(UUID.randomUUID()); @@ -276,7 +279,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas return; } - + @Override public void completePendingAccountCreation(CompletePendingAccountCreationRequest request, StreamObserver responseObserver) { @@ -292,9 +295,8 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas return; } - if (request.getUsername() != null && !request.getUsername().trim().isEmpty() - && accountRepositoryAdditional.foundExistingNotOwnUsername(UUID.fromString(request.getAccountId()), - request.getUsername())) { + if (request.getUsername() != null && !request.getUsername().trim().isEmpty() && accountRepositoryAdditional + .foundExistingNotOwnUsername(UUID.fromString(request.getAccountId()), request.getUsername())) { responseObserver.onNext(AccountResponse.newBuilder() .setError(ErrorResponse.newBuilder().setCause(Cause.USERNAME_ALREADY_USED)).build()); responseObserver.onCompleted(); @@ -342,8 +344,8 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas Cause cause = validator.validateUpdateProfileRequest(request); if (cause != null) { - responseObserver - .onNext(UpdateProfileResponse.newBuilder().setError(ErrorResponse.newBuilder().setCause(cause)).build()); + responseObserver.onNext( + UpdateProfileResponse.newBuilder().setError(ErrorResponse.newBuilder().setCause(cause)).build()); responseObserver.onCompleted(); return; } @@ -385,9 +387,8 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas return; } - if (request.getUsername() != null && !request.getUsername().trim().isEmpty() - && accountRepositoryAdditional.foundExistingNotOwnUsername(UUID.fromString(request.getAccountId()), - request.getUsername())) { + if (request.getUsername() != null && !request.getUsername().trim().isEmpty() && accountRepositoryAdditional + .foundExistingNotOwnUsername(UUID.fromString(request.getAccountId()), request.getUsername())) { responseObserver.onNext(AccountResponse.newBuilder() .setError(ErrorResponse.newBuilder().setCause(Cause.USERNAME_ALREADY_USED)).build()); responseObserver.onCompleted(); @@ -424,8 +425,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas boolean wasAccountDeleted = accountRepositoryAdditional.deleteAccount(UUID.fromString(request.getAccountId())); if (wasAccountDeleted) { - responseObserver.onNext(StatusResponse.newBuilder() - .setStatus("SUCCESS").build()); + responseObserver.onNext(StatusResponse.newBuilder().setStatus("SUCCESS").build()); responseObserver.onCompleted(); return; } @@ -449,8 +449,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas boolean wasProfileDeleted = accountRepositoryAdditional.deleteProfile(UUID.fromString(request.getProfileId())); if (wasProfileDeleted) { logger.info("The profile was deleted successfully."); - responseObserver.onNext(StatusResponse.newBuilder() - .setStatus("SUCCESS").build()); + responseObserver.onNext(StatusResponse.newBuilder().setStatus("SUCCESS").build()); responseObserver.onCompleted(); return; } -- GitLab From bdf84b5775fe2daba86efe26d89bf6b52586a0a8 Mon Sep 17 00:00:00 2001 From: Stoyan Tzenkov Date: Wed, 3 Oct 2018 15:42:23 +0300 Subject: [PATCH 4/6] NY_3610: Phone nomalization implemented in getAccountByAuthenticationProvider Signed-off-by: Stoyan Tzenkov --- .../java/biz/nynja/account/components/Validator.java | 2 +- .../nynja/account/services/AccountServiceImpl.java | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/biz/nynja/account/components/Validator.java b/src/main/java/biz/nynja/account/components/Validator.java index 8b68995..ff8899b 100644 --- a/src/main/java/biz/nynja/account/components/Validator.java +++ b/src/main/java/biz/nynja/account/components/Validator.java @@ -137,7 +137,7 @@ public class Validator { country); PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance(); - String normalizedPhoneNumber = null; + String normalizedPhoneNumber = ""; try { PhoneNumber pn = phoneUtil.parse(phoneNumber, country); normalizedPhoneNumber = Integer.toString(pn.getCountryCode()) + diff --git a/src/main/java/biz/nynja/account/services/AccountServiceImpl.java b/src/main/java/biz/nynja/account/services/AccountServiceImpl.java index 38cbc71..3604a36 100644 --- a/src/main/java/biz/nynja/account/services/AccountServiceImpl.java +++ b/src/main/java/biz/nynja/account/services/AccountServiceImpl.java @@ -119,17 +119,26 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas responseObserver.onCompleted(); return; } + if (request.getAuthenticationType() == AuthenticationType.PHONE) { + // Get the normalized phone number from libphone + AccountByAuthenticationProviderRequest newRequest = AccountByAuthenticationProviderRequest.newBuilder() + .setAuthenticationType(request.getAuthenticationType()) + .setAuthenticationIdentifier(validator.getNormalizedPhoneNumber(request.getAuthenticationIdentifier())).build(); + request = newRequest; + } Account account = accountServiceHelper.getAccountByAuthenticationProviderHelper( request.getAuthenticationIdentifier(), request.getAuthenticationType().toString()); + if (account == null) { + logger.debug("No matching accounts found for authetntication provider {}: {}", request.getAuthenticationType(), request.getAuthenticationIdentifier()); responseObserver.onNext(AccountResponse.newBuilder() .setError(ErrorResponse.newBuilder().setCause(Cause.ACCOUNT_NOT_FOUND)).build()); responseObserver.onCompleted(); return; - } + } AccountResponse response = AccountResponse.newBuilder().setAccountDetails(account.toProto()).build(); logger.debug("Found result for account by authentication provider {}: {}: \"{}\"", -- GitLab From 87b737f1eb34c00540b7d2a2be2de51966e3facc Mon Sep 17 00:00:00 2001 From: Stoyan Tzenkov Date: Fri, 5 Oct 2018 16:13:59 +0300 Subject: [PATCH 5/6] Cleaned up parameterized test --- ...ibphoneNormalizationParameterizedTest.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/test/java/biz/nynja/account/components/LibphoneNormalizationParameterizedTest.java b/src/test/java/biz/nynja/account/components/LibphoneNormalizationParameterizedTest.java index 3fd85c1..19a76cd 100644 --- a/src/test/java/biz/nynja/account/components/LibphoneNormalizationParameterizedTest.java +++ b/src/test/java/biz/nynja/account/components/LibphoneNormalizationParameterizedTest.java @@ -20,19 +20,25 @@ import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.rules.SpringClassRule; import org.springframework.test.context.junit4.rules.SpringMethodRule; +import biz.nynja.account.repositories.AccountRepository; import biz.nynja.account.services.AccountServiceImpl; -// To run the test change AccountServiceImpl class to public +// ================================================================ +// This test is not part of the build but we consider it useful +// and would like to keep it for future use. +// =============================================================== @RunWith(Parameterized.class) @TestExecutionListeners({}) @ContextConfiguration(classes = { AccountServiceImpl.class }) public class LibphoneNormalizationParameterizedTest { + + @Autowired + private Validator validator; + private String expectedPhoneNumber; private String inputPhoneNumber; - private AccountServiceImpl accountServiceImpl = new AccountServiceImpl(); - @ClassRule public static final SpringClassRule SPRING_CLASS_RULE = new SpringClassRule(); @@ -57,10 +63,9 @@ public class LibphoneNormalizationParameterizedTest { @Test public void testNormalizedPhoneNumber() { System.out.println("Input Phone Number is : " + inputPhoneNumber); - // To run the test change the getNormalizedPhoneNumber method to public - // and uncomment the lines bellow -// String normalized = accountServiceImpl.getNormalizedPhoneNumber(inputPhoneNumber); -// System.out.println("Normalized Phone Number is : " + normalized); -// assertEquals(expectedPhoneNumber, normalized); + + String normalized = validator.getNormalizedPhoneNumber(inputPhoneNumber); + System.out.println("Normalized Phone Number is : " + normalized); + assertEquals(expectedPhoneNumber, normalized); } } -- GitLab From 5c57ea19ec8773326306b7c4c1d5947422a69b35 Mon Sep 17 00:00:00 2001 From: Stoyan Tzenkov Date: Mon, 8 Oct 2018 14:32:11 +0300 Subject: [PATCH 6/6] NY_3610: Phone normalization included in addAuthenticationProviderToProfile Signed-off-by: Stoyan Tzenkov --- .../account/services/AccountServiceImpl.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/biz/nynja/account/services/AccountServiceImpl.java b/src/main/java/biz/nynja/account/services/AccountServiceImpl.java index 3604a36..c1acf9d 100644 --- a/src/main/java/biz/nynja/account/services/AccountServiceImpl.java +++ b/src/main/java/biz/nynja/account/services/AccountServiceImpl.java @@ -23,6 +23,7 @@ import biz.nynja.account.grpc.AccountsByProfileIdRequest; import biz.nynja.account.grpc.AccountsList; import biz.nynja.account.grpc.AccountsResponse; import biz.nynja.account.grpc.AddAuthenticationProviderRequest; +import biz.nynja.account.grpc.AuthProviderDetails; import biz.nynja.account.grpc.AuthenticationType; import biz.nynja.account.grpc.CompletePendingAccountCreationRequest; import biz.nynja.account.grpc.CreateAccountRequest; @@ -501,6 +502,20 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas responseObserver.onCompleted(); return; } + + if (request.getAuthenticationProvider().getAuthenticationType() == AuthenticationType.PHONE) { + // Get the normalized phone number from libphone + AuthProviderDetails newAuthProviderDetails = AuthProviderDetails.newBuilder() + .setAuthenticationType(request.getAuthenticationProvider().getAuthenticationType()) + .setAuthenticationProvider(validator.getNormalizedPhoneNumber(request.getAuthenticationProvider().getAuthenticationProvider())) + .build(); + AddAuthenticationProviderRequest newRequest = AddAuthenticationProviderRequest.newBuilder() + .setProfileId(request.getProfileId()) + .setAuthenticationProvider(newAuthProviderDetails).build(); + request = newRequest; + } + + // Make sure that the requested profile id for update exists in DB. Profile profile = profileRepository.findByProfileId(UUID.fromString(request.getProfileId())); if (profile == null) { -- GitLab