Skip to content

Commit

Permalink
ES-604 (mosip#53)
Browse files Browse the repository at this point in the history
Signed-off-by: pr <[email protected]>
Signed-off-by: Sreang Rathanak <[email protected]>
  • Loading branch information
panharith-0118 authored and Sreang Rathanak committed Jan 15, 2024
1 parent 2533e97 commit 6a19e9a
Show file tree
Hide file tree
Showing 7 changed files with 122 additions and 37 deletions.
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package io.mosip.signup.dto;

import io.mosip.signup.util.ErrorConstants;
import io.mosip.signup.validator.LanguageValue;
import io.mosip.signup.validator.PhoneNumber;
import io.mosip.signup.validator.Language;
import lombok.Data;

import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;

@Data
Expand All @@ -17,7 +16,8 @@ public class UserInfoMap {
private String phone;

@NotEmpty(message = ErrorConstants.INVALID_FULLNAME)
private List<@Valid LanguageTaggedValue> fullName;
private List<@LanguageValue(valuePatternKey = "mosip.signup.fullname.pattern")
LanguageTaggedValue> fullName;

@Language
private String preferredLang;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package io.mosip.signup.validator;

import io.mosip.signup.util.ErrorConstants;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@Target({FIELD, TYPE_USE})
@Retention(RUNTIME)
@Constraint(validatedBy = LanguageValueValidator.class)
@Documented
public @interface LanguageValue {
String message() default ErrorConstants.INVALID_FULLNAME;
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
String language() default "khm";
String valuePatternKey();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package io.mosip.signup.validator;

import io.mosip.signup.dto.LanguageTaggedValue;
import org.springframework.core.env.Environment;
import org.springframework.beans.factory.annotation.Autowired;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class LanguageValueValidator implements ConstraintValidator<LanguageValue, LanguageTaggedValue> {

private String valuePattern;
private String language;

@Autowired
private Environment environment;

@Override
public void initialize(LanguageValue value) {
this.valuePattern = environment.getProperty(value.valuePatternKey());
this.language = value.language();
}

@Override
public boolean isValid(LanguageTaggedValue value, ConstraintValidatorContext constraintValidatorContext) {
if(value == null)
return false;
return value.getLanguage().equals(this.language) && value.getValue().matches(valuePattern);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ mosip.signup.supported-languages={'khm','eng'}
mosip.signup.password.pattern=^(?=.{8,20}$)(?=.*[A-Za-z])(?=.*\\d).*$
mosip.signup.password.max-length=20
mosip.signup.password.min-length=8
mosip.signup.fullname.pattern=^[\u1780-\u17FF\u19E0-\u19FF\u1A00-\u1A9F\u0020]{1,30}$
mosip.signup.fullname.pattern=^[\\u1780-\\u17FF\\u19E0-\\u19FF\\u1A00-\\u1A9F\\u0020]{1,30}$

## Time given to generate and verify the challenge in seconds.
## Default resend delay is 60 seconds, with 3 attempts, so 60*3=180 seconds.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -440,13 +440,13 @@ public void register_thenPass() throws Exception{

UserInfoMap userInfo = new UserInfoMap();
userInfo.setPreferredLang("khm");
userInfo.setFullName(List.of(new LanguageTaggedValue("khm", "Panharith AN")));
userInfo.setFullName(List.of(new LanguageTaggedValue("khm", "អាន បញ្ញារិទ្ធ")));
userInfo.setPhone("+855219718732");

RegisterRequest registerRequest = new RegisterRequest();
registerRequest.setUserInfo(userInfo);
registerRequest.setUsername("+855219718732");
registerRequest.setPassword("12312399");
registerRequest.setPassword("12312399a");
registerRequest.setConsent("AGREE");

RequestWrapper<RegisterRequest> wrapper = new RequestWrapper<RegisterRequest>();
Expand All @@ -473,15 +473,14 @@ public void register_withBlankConsent_returnErrorResponse() throws Exception{
UserInfoMap userInfo = new UserInfoMap();
userInfo.setPreferredLang("khm");
List<LanguageTaggedValue> fullNames = new ArrayList<>();
fullNames.add(new LanguageTaggedValue("eng", "Panharith AN"));
fullNames.add(new LanguageTaggedValue("khm", "Panharith AN"));
fullNames.add(new LanguageTaggedValue("khm", "អាន បញ្ញារិទ្ធ"));
userInfo.setFullName(fullNames);
userInfo.setPhone("+85512345678");

RegisterRequest registerRequest = new RegisterRequest();
registerRequest.setUserInfo(userInfo);
registerRequest.setUsername("+85512345678");
registerRequest.setPassword("12312333");
registerRequest.setPassword("12312333a");

RequestWrapper<RegisterRequest> wrapper = new RequestWrapper<RegisterRequest>();
wrapper.setRequestTime(IdentityProviderUtil.getUTCDateTime());
Expand All @@ -504,13 +503,13 @@ public void register_withUnsupportedConsent_returnErrorResponse() throws Excepti

UserInfoMap userInfo = new UserInfoMap();
userInfo.setPreferredLang("khm");
userInfo.setFullName(List.of(new LanguageTaggedValue("khm", "Panharith AN")));
userInfo.setFullName(List.of(new LanguageTaggedValue("khm", "អាន បញ្ញារិទ្ធ")));
userInfo.setPhone("+855219718732");

RegisterRequest registerRequest = new RegisterRequest();
registerRequest.setUserInfo(userInfo);
registerRequest.setUsername("+855219718732");
registerRequest.setPassword("12312388");
registerRequest.setPassword("12312388a");
registerRequest.setConsent("not agree");

RequestWrapper<RegisterRequest> wrapper = new RequestWrapper<RegisterRequest>();
Expand All @@ -534,7 +533,7 @@ public void register_withInvalidPhoneNumber_returnErrorResponse() throws Excepti

UserInfoMap userInfo = new UserInfoMap();
userInfo.setPreferredLang("khm");
userInfo.setFullName(List.of(new LanguageTaggedValue("khm", "Panharith AN")));
userInfo.setFullName(List.of(new LanguageTaggedValue("khm", "អាន បញ្ញារិទ្ធ")));
userInfo.setPhone("+8551234567890");

RegisterRequest registerRequest = new RegisterRequest();
Expand Down Expand Up @@ -564,7 +563,7 @@ public void register_withBlankPhoneNumber_returnErrorResponse() throws Exception

UserInfoMap userInfo = new UserInfoMap();
userInfo.setPreferredLang("khm");
userInfo.setFullName(List.of(new LanguageTaggedValue("khm", "Panharith AN")));
userInfo.setFullName(List.of(new LanguageTaggedValue("khm", "អាន បញ្ញារិទ្ធ")));

RegisterRequest registerRequest = new RegisterRequest();
registerRequest.setUserInfo(userInfo);
Expand Down Expand Up @@ -592,13 +591,13 @@ public void register_withBlankPhoneNumber_returnErrorResponse() throws Exception
public void register_withBlankPreferredLang_returnErrorResponse() throws Exception{

UserInfoMap userInfo = new UserInfoMap();
userInfo.setFullName(List.of(new LanguageTaggedValue("khm", "Panharith AN")));
userInfo.setFullName(List.of(new LanguageTaggedValue("khm", "អាន បញ្ញារិទ្ធ")));
userInfo.setPhone("+855123456789");

RegisterRequest registerRequest = new RegisterRequest();
registerRequest.setUserInfo(userInfo);
registerRequest.setUsername("+85512345678");
registerRequest.setPassword("12312322");
registerRequest.setPassword("12312322a");
registerRequest.setConsent("AGREE");

RequestWrapper<RegisterRequest> wrapper = new RequestWrapper<RegisterRequest>();
Expand All @@ -621,7 +620,7 @@ public void register_withBlankPreferredLang_returnErrorResponse() throws Excepti
public void register_withUnsupportedPreferredLang_returnErrorResponse() throws Exception{

UserInfoMap userInfo = new UserInfoMap();
userInfo.setFullName(List.of(new LanguageTaggedValue("khm", "Panharith AN")));
userInfo.setFullName(List.of(new LanguageTaggedValue("khm", "អាន បញ្ញារិទ្ធ")));
userInfo.setPhone("+855123456789");
userInfo.setPreferredLang("usa");

Expand Down Expand Up @@ -677,7 +676,6 @@ public void register_withNullFullName_returnErrorResponse() throws Exception{
}

@Test
@Ignore
public void register_withInvalidFullNameInKhm_returnErrorResponse() throws Exception{

UserInfoMap userInfo = new UserInfoMap();
Expand All @@ -688,7 +686,7 @@ public void register_withInvalidFullNameInKhm_returnErrorResponse() throws Excep
RegisterRequest registerRequest = new RegisterRequest();
registerRequest.setUserInfo(userInfo);
registerRequest.setUsername("+85512345678");
registerRequest.setPassword("123123");
registerRequest.setPassword("123123123a");
registerRequest.setConsent("AGREE");

RequestWrapper<RegisterRequest> wrapper = new RequestWrapper<RegisterRequest>();
Expand All @@ -704,25 +702,24 @@ public void register_withInvalidFullNameInKhm_returnErrorResponse() throws Excep
.andExpect(status().isOk())
.andExpect(jsonPath("$.response").isEmpty())
.andExpect(jsonPath("$.errors").isNotEmpty())
.andExpect(jsonPath("$.errors[0].errorMessage").value("request.userInfo.fullName: invalid_fullname"));
.andExpect(jsonPath("$.errors[0].errorMessage").value("request.userInfo.fullName[0]: invalid_fullname"));
}

@Test
@Ignore
public void register_withValidFullNameInKhmAndInvalidFullNameInEng_returnErrorResponse() throws Exception{

UserInfoMap userInfo = new UserInfoMap();
userInfo.setPhone("+855123456789");
userInfo.setPreferredLang("khm");
List<LanguageTaggedValue> fullNames = new ArrayList<>();
fullNames.add(new LanguageTaggedValue("khm", "Mengleang Ngoun"));
fullNames.add(new LanguageTaggedValue("khm", "ងន់ ម៉េងលាង"));
fullNames.add(new LanguageTaggedValue("eng", "qkITAu9BW5hfiZcLCwPuefQqu6QIthy2J9R"));
userInfo.setFullName(fullNames);

RegisterRequest registerRequest = new RegisterRequest();
registerRequest.setUserInfo(userInfo);
registerRequest.setUsername("+85512345678");
registerRequest.setPassword("123123");
registerRequest.setPassword("1231231234a");
registerRequest.setConsent("AGREE");

RequestWrapper<RegisterRequest> wrapper = new RequestWrapper<RegisterRequest>();
Expand All @@ -738,18 +735,18 @@ public void register_withValidFullNameInKhmAndInvalidFullNameInEng_returnErrorRe
.andExpect(status().isOk())
.andExpect(jsonPath("$.response").isEmpty())
.andExpect(jsonPath("$.errors").isNotEmpty())
.andExpect(jsonPath("$.errors[0].errorMessage").value("request.userInfo.fullName: invalid_fullname"));
.andExpect(jsonPath("$.errors[0].errorMessage").value(
"request.userInfo.fullName[1]: invalid_fullname"));
}

@Test
public void register_withValidFullNameInKhmAndFullNameInEng_returnSuccessResponse() throws Exception{
public void register_withInValidFullNameInKhm_returnErrorResponse() throws Exception{

UserInfoMap userInfo = new UserInfoMap();
userInfo.setPhone("+855123456789");
userInfo.setPreferredLang("khm");
List<LanguageTaggedValue> fullNames = new ArrayList<>();
fullNames.add(new LanguageTaggedValue("khm", "Mengleang Ngoun"));
fullNames.add(new LanguageTaggedValue("eng", "Mengleang Ngoun"));
userInfo.setFullName(fullNames);

RegisterRequest registerRequest = new RegisterRequest();
Expand All @@ -768,6 +765,42 @@ public void register_withValidFullNameInKhmAndFullNameInEng_returnSuccessRespons
registerResponse.setStatus(ActionStatus.PENDING);
when(registrationService.register(registerRequest, mockTransactionID)).thenReturn(registerResponse);

mockMvc.perform(post("/registration/register")
.content(objectMapper.writeValueAsString(wrapper))
.cookie(new Cookie(SignUpConstants.VERIFIED_TRANSACTION_ID, mockTransactionID))
.contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$.response").isEmpty())
.andExpect(jsonPath("$.errors").isNotEmpty())
.andExpect(jsonPath("$.errors[0].errorMessage").value(
"request.userInfo.fullName[0]: invalid_fullname"));
}

@Test
public void register_withValidFullName_returnSuccessResponse() throws Exception{

UserInfoMap userInfo = new UserInfoMap();
userInfo.setPhone("+855123456789");
userInfo.setPreferredLang("khm");
List<LanguageTaggedValue> fullNames = new ArrayList<>();
fullNames.add(new LanguageTaggedValue("khm", "សុខ សាន្ត"));
userInfo.setFullName(fullNames);

RegisterRequest registerRequest = new RegisterRequest();
registerRequest.setUserInfo(userInfo);
registerRequest.setUsername("+85512345678");
registerRequest.setPassword("12312311a");
registerRequest.setConsent("AGREE");

RequestWrapper<RegisterRequest> wrapper = new RequestWrapper<RegisterRequest>();
wrapper.setRequestTime(IdentityProviderUtil.getUTCDateTime());
wrapper.setRequest(registerRequest);

String mockTransactionID = "123456789";

RegisterResponse registerResponse = new RegisterResponse();
registerResponse.setStatus(ActionStatus.PENDING);
when(registrationService.register(registerRequest, mockTransactionID)).thenReturn(registerResponse);

mockMvc.perform(post("/registration/register")
.content(objectMapper.writeValueAsString(wrapper))
.cookie(new Cookie(SignUpConstants.VERIFIED_TRANSACTION_ID, mockTransactionID))
Expand All @@ -783,8 +816,7 @@ public void register_withInvalidPassword_returnErrorResponse() throws Exception{
userInfo.setPhone("+855123456789");
userInfo.setPreferredLang("khm");
List<LanguageTaggedValue> fullNames = new ArrayList<>();
fullNames.add(new LanguageTaggedValue("khm", "Mengleang Ngoun"));
fullNames.add(new LanguageTaggedValue("eng", "Mengleang Ngoun"));
fullNames.add(new LanguageTaggedValue("khm", "ងន់ ម៉េងលាង"));
userInfo.setFullName(fullNames);

RegisterRequest registerRequest = new RegisterRequest();
Expand Down Expand Up @@ -820,8 +852,7 @@ public void register_withBlankPassword_returnErrorResponse() throws Exception{
userInfo.setPhone("+855123456789");
userInfo.setPreferredLang("khm");
List<LanguageTaggedValue> fullNames = new ArrayList<>();
fullNames.add(new LanguageTaggedValue("khm", "Mengleang Ngoun"));
fullNames.add(new LanguageTaggedValue("eng", "Mengleang Ngoun"));
fullNames.add(new LanguageTaggedValue("khm", "ងន់ ម៉េងលាង"));
userInfo.setFullName(fullNames);

RegisterRequest registerRequest = new RegisterRequest();
Expand Down Expand Up @@ -856,8 +887,7 @@ public void register_withBlankUsername_returnErrorResponse() throws Exception{
userInfo.setPhone("+855123456789");
userInfo.setPreferredLang("khm");
List<LanguageTaggedValue> fullNames = new ArrayList<>();
fullNames.add(new LanguageTaggedValue("khm", "Mengleang Ngoun"));
fullNames.add(new LanguageTaggedValue("eng", "Mengleang Ngoun"));
fullNames.add(new LanguageTaggedValue("khm", "ងន់ ម៉េងលាង"));
userInfo.setFullName(fullNames);

RegisterRequest registerRequest = new RegisterRequest();
Expand Down Expand Up @@ -889,17 +919,16 @@ public void register_withBlankUsername_returnErrorResponse() throws Exception{
public void register_withNotMatchUsernameRegex_returnErrorResponse() throws Exception{

UserInfoMap userInfo = new UserInfoMap();
userInfo.setPhone("+855123456789");
userInfo.setPhone("+85512345678");
userInfo.setPreferredLang("khm");
List<LanguageTaggedValue> fullNames = new ArrayList<>();
fullNames.add(new LanguageTaggedValue("khm", "Mengleang Ngoun"));
fullNames.add(new LanguageTaggedValue("eng", "Mengleang Ngoun"));
userInfo.setFullName(fullNames);

RegisterRequest registerRequest = new RegisterRequest();
registerRequest.setUserInfo(userInfo);
registerRequest.setConsent("AGREE");
registerRequest.setUsername("+8551234567890");
registerRequest.setUsername("+85512345678");
registerRequest.setPassword("12345678");

RequestWrapper<RegisterRequest> wrapper = new RequestWrapper<RegisterRequest>();
Expand All @@ -919,6 +948,7 @@ public void register_withNotMatchUsernameRegex_returnErrorResponse() throws Exce
.andExpect(status().isOk())
.andExpect(jsonPath("$.response").isEmpty())
.andExpect(jsonPath("$.errors").isNotEmpty())
.andExpect(jsonPath("$.errors[0].errorMessage").value("request.username: invalid_username"));
.andExpect(jsonPath("$.errors[0].errorMessage").value(
"request.userInfo.fullName[0]: invalid_fullname"));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public void getSignupSettings_thenPass () throws Exception {
.andExpect(jsonPath("$['response']['configs']['challenge.timeout']").value(60))
.andExpect(jsonPath("$['response']['configs']['resend.attempts']").value(3))
.andExpect(jsonPath("$['response']['configs']['resend.delay']").value(60))
.andExpect(jsonPath("$['response']['configs']['fullname.pattern']").value(".*"))
.andExpect(jsonPath("$['response']['configs']['fullname.pattern']").value("^[\\u1780-\\u17FF\\u19E0-\\u19FF\\u1A00-\\u1A9F\\u0020]{1,30}$"))
.andExpect(jsonPath("$['response']['configs']['status.request.delay']").value(20))
.andExpect(jsonPath("$['response']['configs']['status.request.limit']").value(10))
.andExpect(jsonPath("$['response']['configs']['signin.redirect-url']").value("https://esignet.camdgc-dev.mosip.net/authorize"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ mosip.signup.identifier.regex=\\+855\\d{8,9}
mosip.signup.identifier.prefix=+855
mosip.signup.supported-languages={'khm','eng'}
mosip.signup.password.pattern=^.{8,}$
mosip.signup.fullname.pattern=.*
mosip.signup.fullname.pattern=^[\\u1780-\\u17FF\\u19E0-\\u19FF\\u1A00-\\u1A9F\\u0020]{1,30}$
mosip.signup.password.max-length=20
mosip.signup.password.min-length=6

Expand Down

0 comments on commit 6a19e9a

Please sign in to comment.