Skip to content

Commit

Permalink
Merge pull request #857 from PasinduYeshan/feature/icrc
Browse files Browse the repository at this point in the history
Support storing multiple mobile numbers and email addresses per user
  • Loading branch information
PasinduYeshan authored Oct 8, 2024
2 parents 3166aa3 + 1929c98 commit cc43767
Show file tree
Hide file tree
Showing 21 changed files with 5,744 additions and 306 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,9 @@ private String getRecoveryScenarioFromProperties(List<PropertyDTO> propertyDTOS)
RecoveryScenarios.ADMIN_FORCED_PASSWORD_RESET_VIA_EMAIL_LINK.toString().equals(recoveryScenario) ||
RecoveryScenarios.ADMIN_FORCED_PASSWORD_RESET_VIA_OTP.toString().equals(recoveryScenario) ||
RecoveryScenarios.EMAIL_VERIFICATION_ON_UPDATE.toString().equals(recoveryScenario) ||
RecoveryScenarios.MOBILE_VERIFICATION_ON_UPDATE.toString().equals(recoveryScenario)) {
RecoveryScenarios.EMAIL_VERIFICATION_ON_VERIFIED_LIST_UPDATE.toString().equals(recoveryScenario) ||
RecoveryScenarios.MOBILE_VERIFICATION_ON_UPDATE.toString().equals(recoveryScenario) ||
RecoveryScenarios.MOBILE_VERIFICATION_ON_VERIFIED_LIST_UPDATE.toString().equals(recoveryScenario)) {
return recoveryScenario;
}

Expand All @@ -293,7 +295,8 @@ private NotificationResponseBean doResendConfirmationCode(String recoveryScenari

UserRecoveryData userRecoveryData = null;
// Currently this me/resend-code API supports resend code during mobile verification scenario only.
if (RecoveryScenarios.MOBILE_VERIFICATION_ON_UPDATE.toString().equals(recoveryScenario)) {
if (RecoveryScenarios.MOBILE_VERIFICATION_ON_UPDATE.toString().equals(recoveryScenario) ||
RecoveryScenarios.MOBILE_VERIFICATION_ON_VERIFIED_LIST_UPDATE.toString().equals(recoveryScenario)) {
userRecoveryData = Utils.getUserRecoveryData(resendCodeRequestDTO, recoveryScenario);
}
if (userRecoveryData == null) {
Expand All @@ -312,6 +315,18 @@ private NotificationResponseBean doResendConfirmationCode(String recoveryScenari
resendCodeRequestDTO);
}

if (RecoveryScenarios.MOBILE_VERIFICATION_ON_VERIFIED_LIST_UPDATE.toString().equals(recoveryScenario) &&
RecoveryScenarios.MOBILE_VERIFICATION_ON_VERIFIED_LIST_UPDATE
.equals(userRecoveryData.getRecoveryScenario()) &&
RecoverySteps.VERIFY_MOBILE_NUMBER.equals(userRecoveryData.getRecoveryStep())) {

notificationResponseBean = setNotificationResponseBean(resendConfirmationManager,
RecoveryScenarios.MOBILE_VERIFICATION_ON_VERIFIED_LIST_UPDATE.toString(),
RecoverySteps.VERIFY_MOBILE_NUMBER.toString(),
IdentityRecoveryConstants.NOTIFICATION_TYPE_VERIFY_MOBILE_ON_UPDATE,
resendCodeRequestDTO);
}

return notificationResponseBean;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -187,13 +187,29 @@ private NotificationResponseBean doResendConfirmationCode(String recoveryScenari
notificationResponseBean = setNotificationResponseBean(resendConfirmationManager,
RecoveryScenarios.EMAIL_VERIFICATION_ON_UPDATE.toString(), RecoverySteps.VERIFY_EMAIL.toString(),
IdentityRecoveryConstants.NOTIFICATION_TYPE_RESEND_VERIFY_EMAIL_ON_UPDATE, resendCodeRequestDTO);
} else if (RecoveryScenarios.EMAIL_VERIFICATION_ON_VERIFIED_LIST_UPDATE.toString().equals(recoveryScenario) &&
RecoveryScenarios.EMAIL_VERIFICATION_ON_VERIFIED_LIST_UPDATE
.equals(userRecoveryData.getRecoveryScenario()) &&
RecoverySteps.VERIFY_EMAIL.equals(userRecoveryData.getRecoveryStep())) {
notificationResponseBean = setNotificationResponseBean(resendConfirmationManager,
RecoveryScenarios.EMAIL_VERIFICATION_ON_VERIFIED_LIST_UPDATE.toString(),
RecoverySteps.VERIFY_EMAIL.toString(),
IdentityRecoveryConstants.NOTIFICATION_TYPE_RESEND_VERIFY_EMAIL_ON_UPDATE, resendCodeRequestDTO);
} else if (RecoveryScenarios.MOBILE_VERIFICATION_ON_UPDATE.toString().equals(recoveryScenario) &&
RecoveryScenarios.MOBILE_VERIFICATION_ON_UPDATE.equals(userRecoveryData.getRecoveryScenario()) &&
RecoverySteps.VERIFY_MOBILE_NUMBER.equals(userRecoveryData.getRecoveryStep())) {
notificationResponseBean = setNotificationResponseBean(resendConfirmationManager,
RecoveryScenarios.MOBILE_VERIFICATION_ON_UPDATE.toString(),
RecoverySteps.VERIFY_MOBILE_NUMBER.toString(),
IdentityRecoveryConstants.NOTIFICATION_TYPE_VERIFY_MOBILE_ON_UPDATE, resendCodeRequestDTO);
} else if (RecoveryScenarios.MOBILE_VERIFICATION_ON_VERIFIED_LIST_UPDATE.toString().equals(recoveryScenario) &&
RecoveryScenarios.MOBILE_VERIFICATION_ON_VERIFIED_LIST_UPDATE
.equals(userRecoveryData.getRecoveryScenario()) &&
RecoverySteps.VERIFY_MOBILE_NUMBER.equals(userRecoveryData.getRecoveryStep())) {
notificationResponseBean = setNotificationResponseBean(resendConfirmationManager,
RecoveryScenarios.MOBILE_VERIFICATION_ON_VERIFIED_LIST_UPDATE.toString(),
RecoverySteps.VERIFY_MOBILE_NUMBER.toString(),
IdentityRecoveryConstants.NOTIFICATION_TYPE_VERIFY_MOBILE_ON_UPDATE, resendCodeRequestDTO);
}

return notificationResponseBean;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import org.mockito.MockitoAnnotations;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import org.wso2.carbon.base.CarbonBaseConstants;
import org.wso2.carbon.context.PrivilegedCarbonContext;
Expand Down Expand Up @@ -165,23 +166,68 @@ public void testMeResendCodePost() throws IdentityRecoveryException {
Mockito.when(userRecoveryData.getRecoveryStep()).thenReturn(
RecoverySteps.getRecoveryStep("VERIFY_MOBILE_NUMBER"));

assertEquals(meApiService.meResendCodePost(meResendCodeRequestDTO()).getStatus(), 201);
assertEquals(meApiService.meResendCodePost(
meResendCodeRequestDTO(RecoveryScenarios.MOBILE_VERIFICATION_ON_UPDATE.name())).getStatus(),
201);

assertEquals(meApiService.meResendCodePost(
meResendCodeRequestDTOWithInvalidScenarioProperty()).getStatus(), 400);

mockedUtils.when(() -> Utils.getUserRecoveryData(any(ResendCodeRequestDTO.class), anyString()))
.thenReturn(null);
assertEquals(meApiService.meResendCodePost(meResendCodeRequestDTO()).getStatus(), 400);
assertEquals(meApiService.meResendCodePost(
meResendCodeRequestDTO(RecoveryScenarios.MOBILE_VERIFICATION_ON_UPDATE.name())).getStatus(),
400);

Mockito.when(userRecoveryData.getRecoveryScenario()).thenReturn(RecoveryScenarios.
getRecoveryScenario("ASK_PASSWORD"));
assertEquals(meApiService.meResendCodePost(meResendCodeRequestDTO()).getStatus(), 400);
assertEquals(meApiService.meResendCodePost(
meResendCodeRequestDTO(RecoveryScenarios.MOBILE_VERIFICATION_ON_UPDATE.name())).getStatus(),
400);
} finally {
PrivilegedCarbonContext.endTenantFlow();
}
}

@DataProvider(name = "recoveryScenarioProvider")
public Object[][] recoveryScenarioProvider() {
return new Object[][] {
{RecoveryScenarios.EMAIL_VERIFICATION_ON_UPDATE, RecoverySteps.VERIFY_EMAIL, 400},
{RecoveryScenarios.EMAIL_VERIFICATION_ON_VERIFIED_LIST_UPDATE, RecoverySteps.VERIFY_EMAIL, 400},
{RecoveryScenarios.MOBILE_VERIFICATION_ON_UPDATE, RecoverySteps.VERIFY_MOBILE_NUMBER, 201},
{RecoveryScenarios.MOBILE_VERIFICATION_ON_VERIFIED_LIST_UPDATE,
RecoverySteps.VERIFY_MOBILE_NUMBER, 201},
{RecoveryScenarios.MOBILE_VERIFICATION_ON_VERIFIED_LIST_UPDATE, RecoverySteps.VERIFY_MOBILE_NUMBER, 201}
};
}

@Test(dataProvider = "recoveryScenarioProvider")
public void testMeResendCodePostRecoveryScenarios(RecoveryScenarios recoveryScenario, RecoverySteps recoveryStep,
int expectedStatusCode) throws IdentityRecoveryException {

try {
String carbonHome = Paths.get(System.getProperty("user.dir"), "src", "test", "resources").toString();
System.setProperty(CarbonBaseConstants.CARBON_HOME, carbonHome);
PrivilegedCarbonContext.startTenantFlow();
PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(USERNAME);
PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(-1234);
Mockito.when(resendConfirmationManager.resendConfirmationCode(isNull(), anyString(), anyString(),
anyString(), isNull())).thenReturn(notificationResponseBean);
mockedUtils.when(() -> Utils.getUserRecoveryData(any(ResendCodeRequestDTO.class), anyString()))
.thenReturn(userRecoveryData);
mockedUtils.when(Utils::getResendConfirmationManager).thenReturn(resendConfirmationManager);
Mockito.when(userRecoveryData.getRecoveryScenario()).thenReturn(recoveryScenario);
Mockito.when(userRecoveryData.getRecoveryStep()).thenReturn(recoveryStep);

assertEquals(meApiService.meResendCodePost(
meResendCodeRequestDTO(recoveryScenario.name())).getStatus(),
expectedStatusCode);
} finally {
PrivilegedCarbonContext.endTenantFlow();
}
}

private SelfRegistrationUserDTO buildSelfRegistartion() {
private SelfRegistrationUserDTO buildSelfRegistration() {

SelfRegistrationUserDTO selfRegistrationUserDTO = new SelfRegistrationUserDTO();
selfRegistrationUserDTO.setUsername("TestUser");
Expand Down Expand Up @@ -212,11 +258,11 @@ private SelfUserRegistrationRequestDTO selfUserRegistrationRequestDTO() {
SelfUserRegistrationRequestDTO selfUserRegistrationRequestDTO = new SelfUserRegistrationRequestDTO();
List<ClaimDTO> listClaimDTO = new ArrayList<>();
listClaimDTO.add(buildClaimDTO());
buildSelfRegistartion().setClaims(listClaimDTO);
buildSelfRegistration().setClaims(listClaimDTO);
List<PropertyDTO> listPropertyDTOs = new ArrayList<>();
listPropertyDTOs.add(buildSelfUserRegistrationRequestDTO());
selfUserRegistrationRequestDTO.setProperties(listPropertyDTOs);
selfUserRegistrationRequestDTO.setUser(buildSelfRegistartion());
selfUserRegistrationRequestDTO.setUser(buildSelfRegistration());
return selfUserRegistrationRequestDTO;
}

Expand All @@ -227,11 +273,11 @@ private MeCodeValidationRequestDTO createMeCodeValidationRequestDTO() {
return codeValidationRequestDTO;
}

private MeResendCodeRequestDTO meResendCodeRequestDTO() {
private MeResendCodeRequestDTO meResendCodeRequestDTO(String recoveryScenario) {

MeResendCodeRequestDTO meResendCodeRequestDTO = new MeResendCodeRequestDTO();
List<PropertyDTO> listProperty = new ArrayList<>();
listProperty.add(buildPropertyDTO("RecoveryScenario", "MOBILE_VERIFICATION_ON_UPDATE"));
listProperty.add(buildPropertyDTO("RecoveryScenario", recoveryScenario));
meResendCodeRequestDTO.setProperties(listProperty);
return meResendCodeRequestDTO;
}
Expand Down
Loading

0 comments on commit cc43767

Please sign in to comment.