Support mobile number verification with progressive profiling.#10362
Support mobile number verification with progressive profiling.#10362Thisara-Welmilla wants to merge 1 commit into
Conversation
📝 WalkthroughWalkthroughThis PR adds comprehensive translation support for password validation criteria messages. A new ChangesPassword Validation Criteria Translation
Important Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional. ❌ Failed checks (1 error, 2 warnings)
✅ Passed checks (3 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #10362 +/- ##
===========================================
+ Coverage 55.88% 98.79% +42.90%
===========================================
Files 42 165 +123
Lines 1020 51763 +50743
Branches 254 111 -143
===========================================
+ Hits 570 51137 +50567
- Misses 416 626 +210
+ Partials 34 0 -34
Flags with carried forward coverage won't be shown. Click here to find out more. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
identity-apps-core/react-ui-core/src/components/validation-criteria.js (1)
222-229:⚠️ Potential issue | 🟠 Major | ⚡ Quick winDecouple error detection from localized label text.
After localization,
hasErrorcompares backend error strings against translated labels, which can miss matches and show invalid rules as valid in non-English locales.Suggested fix
- const label = getRuleLabel(rule, translations); + const label = getRuleLabel(rule, translations); + const defaultLabel = getRuleLabel(rule, {}); @@ - const hasError = errors.some((err) => err.includes(label)); + const hasError = errors.some((err) => + (defaultLabel && err.includes(defaultLabel)) || err.includes(label) + );🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@identity-apps-core/react-ui-core/src/components/validation-criteria.js` around lines 222 - 229, The code is matching backend error strings against the localized label (getRuleLabel) which breaks in non-English locales; change hasError to compare against a stable rule identifier instead of the translated label — derive a stableKey from the rule (e.g., rule.id || rule.name || rule.key) and use errors.some(err => err.includes(stableKey)) to detect errors, while keeping getRuleLabel(rule, translations) only for display; update references to hasError and ensure stableKey is defined (fallback to a default identifier if missing).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@identity-apps-core/apps/authentication-portal/src/main/resources/org/wso2/carbon/identity/application/authentication/endpoint/i18n/Resources_de_DE.properties`:
- Around line 340-355: The listed validation keys
(validation.criteria.LengthValidator.*, NumeralValidator.*,
UpperCaseValidator.*, LowerCaseValidator.*, SpecialCharacterValidator.minOnly,
ConfirmPasswordValidator.match, EmailFormatValidator.format,
AlphanumericValidator.format, UniqueCharacterValidator.minOnly,
RepeatedCharacterValidator.maxOnly) are still in English in the de_DE resource
file; replace each value with an appropriate German translation while preserving
placeholders like {min} and {max} and punctuation and keeping the exact property
keys unchanged so localization works correctly (e.g., translate phrases such as
"Must be between {min} and {max} characters long." to German equivalents for the
corresponding keys).
In
`@identity-apps-core/apps/authentication-portal/src/main/resources/org/wso2/carbon/identity/application/authentication/endpoint/i18n/Resources_es_ES.properties`:
- Around line 340-355: Replace the English messages for the listed validation
keys in Resources_es_ES.properties with Spanish translations so Spanish users
see localized password/validation criteria; update the values for
validation.criteria.LengthValidator.minAndMax,
validation.criteria.LengthValidator.minOnly,
validation.criteria.LengthValidator.maxOnly,
validation.criteria.LengthValidator.default,
validation.criteria.NumeralValidator.minOnly,
validation.criteria.NumeralValidator.default,
validation.criteria.UpperCaseValidator.minOnly,
validation.criteria.UpperCaseValidator.default,
validation.criteria.LowerCaseValidator.minOnly,
validation.criteria.LowerCaseValidator.default,
validation.criteria.SpecialCharacterValidator.minOnly,
validation.criteria.ConfirmPasswordValidator.match,
validation.criteria.EmailFormatValidator.format,
validation.criteria.AlphanumericValidator.format,
validation.criteria.UniqueCharacterValidator.minOnly and
validation.criteria.RepeatedCharacterValidator.maxOnly with proper Spanish
strings (e.g., "Debe tener entre {min} y {max} caracteres", "Debe contener al
menos {min} número(s)", "Debe coincidir con la contraseña", etc.), keeping
placeholder tokens ({min}, {max}) unchanged.
In
`@identity-apps-core/apps/authentication-portal/src/main/resources/org/wso2/carbon/identity/application/authentication/endpoint/i18n/Resources_fr_FR.properties`:
- Around line 341-356: The fr_FR resource bundle contains English values for new
validation keys; update the French translations for each key
(validation.criteria.LengthValidator.minAndMax, .minOnly, .maxOnly, .default;
validation.criteria.NumeralValidator.minOnly, .default;
validation.criteria.UpperCaseValidator.minOnly, .default;
validation.criteria.LowerCaseValidator.minOnly, .default;
validation.criteria.SpecialCharacterValidator.minOnly;
validation.criteria.ConfirmPasswordValidator.match;
validation.criteria.EmailFormatValidator.format;
validation.criteria.AlphanumericValidator.format;
validation.criteria.UniqueCharacterValidator.minOnly;
validation.criteria.RepeatedCharacterValidator.maxOnly) replacing the English
messages with accurate French equivalents so French-locale users see the
password/validation rules in French.
In
`@identity-apps-core/apps/authentication-portal/src/main/resources/org/wso2/carbon/identity/application/authentication/endpoint/i18n/Resources_ja_JP.properties`:
- Around line 339-354: The Japanese resource file contains English strings for
several validation.messages — update the entries for
validation.criteria.LengthValidator.minAndMax, .minOnly, .maxOnly, .default;
validation.criteria.NumeralValidator.minOnly, .default;
validation.criteria.UpperCaseValidator.minOnly, .default;
validation.criteria.LowerCaseValidator.minOnly, .default;
validation.criteria.SpecialCharacterValidator.minOnly;
validation.criteria.ConfirmPasswordValidator.match;
validation.criteria.EmailFormatValidator.format;
validation.criteria.AlphanumericValidator.format;
validation.criteria.UniqueCharacterValidator.minOnly; and
validation.criteria.RepeatedCharacterValidator.maxOnly by replacing the English
text with appropriate Japanese translations that preserve placeholders like
{min} and {max} and the keys exactly as shown so Japanese users see localized
validation messages.
---
Outside diff comments:
In `@identity-apps-core/react-ui-core/src/components/validation-criteria.js`:
- Around line 222-229: The code is matching backend error strings against the
localized label (getRuleLabel) which breaks in non-English locales; change
hasError to compare against a stable rule identifier instead of the translated
label — derive a stableKey from the rule (e.g., rule.id || rule.name ||
rule.key) and use errors.some(err => err.includes(stableKey)) to detect errors,
while keeping getRuleLabel(rule, translations) only for display; update
references to hasError and ensure stableKey is defined (fallback to a default
identifier if missing).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yml
Review profile: CHILL
Plan: Pro
Run ID: 1180f6fe-db4d-40e2-957e-47ca6a33c131
📒 Files selected for processing (11)
identity-apps-core/apps/accounts/src/main/resources/org/wso2/carbon/identity/application/accounts/endpoint/i18n/Resources.propertiesidentity-apps-core/apps/authentication-portal/src/main/resources/org/wso2/carbon/identity/application/authentication/endpoint/i18n/Resources.propertiesidentity-apps-core/apps/authentication-portal/src/main/resources/org/wso2/carbon/identity/application/authentication/endpoint/i18n/Resources_de_DE.propertiesidentity-apps-core/apps/authentication-portal/src/main/resources/org/wso2/carbon/identity/application/authentication/endpoint/i18n/Resources_es_ES.propertiesidentity-apps-core/apps/authentication-portal/src/main/resources/org/wso2/carbon/identity/application/authentication/endpoint/i18n/Resources_fr_FR.propertiesidentity-apps-core/apps/authentication-portal/src/main/resources/org/wso2/carbon/identity/application/authentication/endpoint/i18n/Resources_ja_JP.propertiesidentity-apps-core/apps/authentication-portal/src/main/resources/org/wso2/carbon/identity/application/authentication/endpoint/i18n/Resources_pt_BR.propertiesidentity-apps-core/apps/authentication-portal/src/main/resources/org/wso2/carbon/identity/application/authentication/endpoint/i18n/Resources_pt_PT.propertiesidentity-apps-core/apps/authentication-portal/src/main/resources/org/wso2/carbon/identity/application/authentication/endpoint/i18n/Resources_zh_CN.propertiesidentity-apps-core/react-ui-core/src/components/validation-criteria.jsidentity-apps-core/react-ui-core/src/utils/i18n-utils.js
| validation.criteria.LengthValidator.minAndMax=Must be between {min} and {max} characters long. | ||
| validation.criteria.LengthValidator.minOnly=Must be at least {min} characters long. | ||
| validation.criteria.LengthValidator.maxOnly=Must be at most {max} characters long. | ||
| validation.criteria.LengthValidator.default=Must be within the required length. | ||
| validation.criteria.NumeralValidator.minOnly=Must contain at least {min} number(s). | ||
| validation.criteria.NumeralValidator.default=Must contain the required number(s). | ||
| validation.criteria.UpperCaseValidator.minOnly=Must contain at least {min} uppercase letter(s). | ||
| validation.criteria.UpperCaseValidator.default=Must contain uppercase letter(s). | ||
| validation.criteria.LowerCaseValidator.minOnly=Must contain at least {min} lowercase letter(s). | ||
| validation.criteria.LowerCaseValidator.default=Must contain lowercase letter(s). | ||
| validation.criteria.SpecialCharacterValidator.minOnly=Must contain at least {min} special character(s). | ||
| validation.criteria.ConfirmPasswordValidator.match=Must match with the password. | ||
| validation.criteria.EmailFormatValidator.format=Must use a valid email address. | ||
| validation.criteria.AlphanumericValidator.format=Must contain only alphanumeric characters. | ||
| validation.criteria.UniqueCharacterValidator.minOnly=Must contain at least {min} unique character(s). | ||
| validation.criteria.RepeatedCharacterValidator.maxOnly=Must not contain more than {max} repeated character(s). |
There was a problem hiding this comment.
Localize new validation.criteria.* entries for de_DE (currently English).
Line 340 through Line 355 are English strings in a German locale file, so German users will get mixed-language validation guidance.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@identity-apps-core/apps/authentication-portal/src/main/resources/org/wso2/carbon/identity/application/authentication/endpoint/i18n/Resources_de_DE.properties`
around lines 340 - 355, The listed validation keys
(validation.criteria.LengthValidator.*, NumeralValidator.*,
UpperCaseValidator.*, LowerCaseValidator.*, SpecialCharacterValidator.minOnly,
ConfirmPasswordValidator.match, EmailFormatValidator.format,
AlphanumericValidator.format, UniqueCharacterValidator.minOnly,
RepeatedCharacterValidator.maxOnly) are still in English in the de_DE resource
file; replace each value with an appropriate German translation while preserving
placeholders like {min} and {max} and punctuation and keeping the exact property
keys unchanged so localization works correctly (e.g., translate phrases such as
"Must be between {min} and {max} characters long." to German equivalents for the
corresponding keys).
| validation.criteria.LengthValidator.minAndMax=Must be between {min} and {max} characters long. | ||
| validation.criteria.LengthValidator.minOnly=Must be at least {min} characters long. | ||
| validation.criteria.LengthValidator.maxOnly=Must be at most {max} characters long. | ||
| validation.criteria.LengthValidator.default=Must be within the required length. | ||
| validation.criteria.NumeralValidator.minOnly=Must contain at least {min} number(s). | ||
| validation.criteria.NumeralValidator.default=Must contain the required number(s). | ||
| validation.criteria.UpperCaseValidator.minOnly=Must contain at least {min} uppercase letter(s). | ||
| validation.criteria.UpperCaseValidator.default=Must contain uppercase letter(s). | ||
| validation.criteria.LowerCaseValidator.minOnly=Must contain at least {min} lowercase letter(s). | ||
| validation.criteria.LowerCaseValidator.default=Must contain lowercase letter(s). | ||
| validation.criteria.SpecialCharacterValidator.minOnly=Must contain at least {min} special character(s). | ||
| validation.criteria.ConfirmPasswordValidator.match=Must match with the password. | ||
| validation.criteria.EmailFormatValidator.format=Must use a valid email address. | ||
| validation.criteria.AlphanumericValidator.format=Must contain only alphanumeric characters. | ||
| validation.criteria.UniqueCharacterValidator.minOnly=Must contain at least {min} unique character(s). | ||
| validation.criteria.RepeatedCharacterValidator.maxOnly=Must not contain more than {max} repeated character(s). |
There was a problem hiding this comment.
New validation.criteria.* strings should be Spanish in es_ES.
Line 340 through Line 355 are currently English, which will surface mixed-language password criteria for Spanish users.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@identity-apps-core/apps/authentication-portal/src/main/resources/org/wso2/carbon/identity/application/authentication/endpoint/i18n/Resources_es_ES.properties`
around lines 340 - 355, Replace the English messages for the listed validation
keys in Resources_es_ES.properties with Spanish translations so Spanish users
see localized password/validation criteria; update the values for
validation.criteria.LengthValidator.minAndMax,
validation.criteria.LengthValidator.minOnly,
validation.criteria.LengthValidator.maxOnly,
validation.criteria.LengthValidator.default,
validation.criteria.NumeralValidator.minOnly,
validation.criteria.NumeralValidator.default,
validation.criteria.UpperCaseValidator.minOnly,
validation.criteria.UpperCaseValidator.default,
validation.criteria.LowerCaseValidator.minOnly,
validation.criteria.LowerCaseValidator.default,
validation.criteria.SpecialCharacterValidator.minOnly,
validation.criteria.ConfirmPasswordValidator.match,
validation.criteria.EmailFormatValidator.format,
validation.criteria.AlphanumericValidator.format,
validation.criteria.UniqueCharacterValidator.minOnly and
validation.criteria.RepeatedCharacterValidator.maxOnly with proper Spanish
strings (e.g., "Debe tener entre {min} y {max} caracteres", "Debe contener al
menos {min} número(s)", "Debe coincidir con la contraseña", etc.), keeping
placeholder tokens ({min}, {max}) unchanged.
| validation.criteria.LengthValidator.minAndMax=Must be between {min} and {max} characters long. | ||
| validation.criteria.LengthValidator.minOnly=Must be at least {min} characters long. | ||
| validation.criteria.LengthValidator.maxOnly=Must be at most {max} characters long. | ||
| validation.criteria.LengthValidator.default=Must be within the required length. | ||
| validation.criteria.NumeralValidator.minOnly=Must contain at least {min} number(s). | ||
| validation.criteria.NumeralValidator.default=Must contain the required number(s). | ||
| validation.criteria.UpperCaseValidator.minOnly=Must contain at least {min} uppercase letter(s). | ||
| validation.criteria.UpperCaseValidator.default=Must contain uppercase letter(s). | ||
| validation.criteria.LowerCaseValidator.minOnly=Must contain at least {min} lowercase letter(s). | ||
| validation.criteria.LowerCaseValidator.default=Must contain lowercase letter(s). | ||
| validation.criteria.SpecialCharacterValidator.minOnly=Must contain at least {min} special character(s). | ||
| validation.criteria.ConfirmPasswordValidator.match=Must match with the password. | ||
| validation.criteria.EmailFormatValidator.format=Must use a valid email address. | ||
| validation.criteria.AlphanumericValidator.format=Must contain only alphanumeric characters. | ||
| validation.criteria.UniqueCharacterValidator.minOnly=Must contain at least {min} unique character(s). | ||
| validation.criteria.RepeatedCharacterValidator.maxOnly=Must not contain more than {max} repeated character(s). |
There was a problem hiding this comment.
fr_FR bundle has English values for new validation criteria keys.
Line 341 through Line 356 should be French translations; otherwise the password rule list appears in English for French locale users.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@identity-apps-core/apps/authentication-portal/src/main/resources/org/wso2/carbon/identity/application/authentication/endpoint/i18n/Resources_fr_FR.properties`
around lines 341 - 356, The fr_FR resource bundle contains English values for
new validation keys; update the French translations for each key
(validation.criteria.LengthValidator.minAndMax, .minOnly, .maxOnly, .default;
validation.criteria.NumeralValidator.minOnly, .default;
validation.criteria.UpperCaseValidator.minOnly, .default;
validation.criteria.LowerCaseValidator.minOnly, .default;
validation.criteria.SpecialCharacterValidator.minOnly;
validation.criteria.ConfirmPasswordValidator.match;
validation.criteria.EmailFormatValidator.format;
validation.criteria.AlphanumericValidator.format;
validation.criteria.UniqueCharacterValidator.minOnly;
validation.criteria.RepeatedCharacterValidator.maxOnly) replacing the English
messages with accurate French equivalents so French-locale users see the
password/validation rules in French.
| validation.criteria.LengthValidator.minAndMax=Must be between {min} and {max} characters long. | ||
| validation.criteria.LengthValidator.minOnly=Must be at least {min} characters long. | ||
| validation.criteria.LengthValidator.maxOnly=Must be at most {max} characters long. | ||
| validation.criteria.LengthValidator.default=Must be within the required length. | ||
| validation.criteria.NumeralValidator.minOnly=Must contain at least {min} number(s). | ||
| validation.criteria.NumeralValidator.default=Must contain the required number(s). | ||
| validation.criteria.UpperCaseValidator.minOnly=Must contain at least {min} uppercase letter(s). | ||
| validation.criteria.UpperCaseValidator.default=Must contain uppercase letter(s). | ||
| validation.criteria.LowerCaseValidator.minOnly=Must contain at least {min} lowercase letter(s). | ||
| validation.criteria.LowerCaseValidator.default=Must contain lowercase letter(s). | ||
| validation.criteria.SpecialCharacterValidator.minOnly=Must contain at least {min} special character(s). | ||
| validation.criteria.ConfirmPasswordValidator.match=Must match with the password. | ||
| validation.criteria.EmailFormatValidator.format=Must use a valid email address. | ||
| validation.criteria.AlphanumericValidator.format=Must contain only alphanumeric characters. | ||
| validation.criteria.UniqueCharacterValidator.minOnly=Must contain at least {min} unique character(s). | ||
| validation.criteria.RepeatedCharacterValidator.maxOnly=Must not contain more than {max} repeated character(s). |
There was a problem hiding this comment.
Please translate new validation.criteria.* messages in ja_JP.
Line 339 through Line 354 are English today, so Japanese users will see non-localized validation criteria.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@identity-apps-core/apps/authentication-portal/src/main/resources/org/wso2/carbon/identity/application/authentication/endpoint/i18n/Resources_ja_JP.properties`
around lines 339 - 354, The Japanese resource file contains English strings for
several validation.messages — update the entries for
validation.criteria.LengthValidator.minAndMax, .minOnly, .maxOnly, .default;
validation.criteria.NumeralValidator.minOnly, .default;
validation.criteria.UpperCaseValidator.minOnly, .default;
validation.criteria.LowerCaseValidator.minOnly, .default;
validation.criteria.SpecialCharacterValidator.minOnly;
validation.criteria.ConfirmPasswordValidator.match;
validation.criteria.EmailFormatValidator.format;
validation.criteria.AlphanumericValidator.format;
validation.criteria.UniqueCharacterValidator.minOnly; and
validation.criteria.RepeatedCharacterValidator.maxOnly by replacing the English
text with appropriate Japanese translations that preserve placeholders like
{min} and {max} and the keys exactly as shown so Japanese users see localized
validation messages.
Issue: