diff --git a/esignet-service/src/main/resources/application-local.properties b/esignet-service/src/main/resources/application-local.properties
index 375d18ba9..1ea3111b6 100644
--- a/esignet-service/src/main/resources/application-local.properties
+++ b/esignet-service/src/main/resources/application-local.properties
@@ -289,7 +289,7 @@ mosip.esignet.ui.signup.config={'signup.banner': true, 'signup.url': 'http://loc
mosip.esignet.ui.forgot-password.config={'forgot-password': true, 'forgot-password.url': 'http://localhost:3000/forgot-password'}
-mosip.esignet.authenticator.default.auth-factor.kba.field-details={{'id':'policyNumber', 'type':'text', 'format':''},{'id':'name', 'type':'text', 'format':''},{'id':'dob', 'type':'date', 'format':'dd/mm/yyyy'}}
+mosip.esignet.authenticator.default.auth-factor.kba.field-details={{'id':'policyNumber', 'type':'text', 'format':'', 'maxLength': 50, 'regex': '^\\s*[+-]?(\\d+|\\d*\\.\\d+|\\d+\\.\\d*)([Ee][+-]?\\d*)?\\s*$'},{'id':'fullName', 'type':'text', 'format':'', 'maxLength': 50, 'regex': '^[A-Za-z\\s]{1,}[\\.]{0,1}[A-Za-z\\s]{0,}$'},{'id':'dob', 'type':'date', 'format':'dd/mm/yyyy'}}
mosip.esignet.authenticator.default.auth-factor.kba.individual-id-field=policyNumber
mosip.esignet.ui.config.key-values={'sbi.env': 'Developer', 'sbi.timeout.DISC': 30, \
diff --git a/oidc-ui/public/locales/ar.json b/oidc-ui/public/locales/ar.json
index a877a812e..643da62f9 100644
--- a/oidc-ui/public/locales/ar.json
+++ b/oidc-ui/public/locales/ar.json
@@ -84,12 +84,11 @@
"sign_in_with_details": "تسجيل الدخول بالتفاصيل",
"login": "تسجيل الدخول",
"policyNumber": "ادخل رقم الوثيقة",
- "name": "ادخل الاسم",
+ "fullName": "ادخل الاسم",
"dob": "ادخل تاريخ الميلاد",
"policyNumber_placeholder": "رقم الوثيقة",
- "name_placeholder": "الاسم",
- "dob_placeholder": "تاريخ الميلاد",
- "auth_failed": "فشل تسجيل الدخول، يرجى ادخال بيانات الاعتماد الصحيحة"
+ "fullName_placeholder": "الاسم",
+ "dob_placeholder": "تاريخ الميلاد"
},
"LoginQRCode": {
"scan_with_wallet": "قم بالمسح باستخدام {{walletName}} لتسجيل الدخول",
@@ -296,6 +295,8 @@
"captcha_validator_not_found": "فشل في العثور على مثيل Captcha Valitator ، يرجى التحقق من ClassPath.",
"invalid_captcha": "وجدت captcha غير صالحة.",
"invalid_auth_factor_type_or_challenge_format": "نوع عامل المصادقة غير صالح أو تنسيق التحدي.",
+ "invalid_auth_factor_type_format" :"نوع عامل المصادقة غير صالح أو تنسيق التحدي.",
+ "invalid_challenge_length" : "اعتراض غير صالح ، تم انتهاك قيد الحد الأدنى أو الحد الأقصى للطول.",
"unsupported_pkce_challenge_method": "طريقة تبادل التحدي الرئيسية إثبات غير مدعوم.",
"invalid_pkce_challenge": "تحدي مفتاح إثبات غير صالح.",
"invalid_pkce_code_verifier": "دليل مفتاح إثبات غير صالح.",
@@ -450,6 +451,9 @@
"password_error_msg": "رمز مرور خاطئ",
"IDA-MLC-018": "اسم المستخدم أو كلمة المرور غير صحيحة. حاول مرة اخرى."
},
+ "kba": {
+ "auth_failed": "فشل تسجيل الدخول، يرجى ادخال بيانات الاعتماد الصحيحة"
+ },
"statusCodeHeader": {
"400": "طلب غير صالح",
"401": "غير مصرح به",
diff --git a/oidc-ui/public/locales/en.json b/oidc-ui/public/locales/en.json
index cbcc10eaf..f253ef548 100644
--- a/oidc-ui/public/locales/en.json
+++ b/oidc-ui/public/locales/en.json
@@ -87,9 +87,8 @@
"fullName": "Enter Full Name",
"dob": "Enter DOB",
"policyNumber_placeholder": "Policy Number",
- "name_placeholder": "Name",
- "dob_placeholder": "DOB",
- "auth_failed": "Login failed, please enter correct credentials"
+ "fullName_placeholder": "Name",
+ "dob_placeholder": "DOB"
},
"LoginQRCode": {
"scan_with_wallet": "Scan with {{walletName}} to login",
@@ -297,6 +296,8 @@
"captcha_validator_not_found": "Failed to find captcha validator instance, Please check classpath.",
"invalid_captcha": "Invalid captcha found.",
"invalid_auth_factor_type_or_challenge_format": "Invalid auth factor type or challenge format.",
+ "invalid_auth_factor_type_format" : "Invalid auth factor type or challenge format.",
+ "invalid_challenge_length" : "Invalid challenge, Min or Max length constraint violated.",
"unsupported_pkce_challenge_method": "Unsupported proof key challenge exchange method.",
"invalid_pkce_challenge": "Invalid Proof key challenge.",
"invalid_pkce_code_verifier": "Invalid proof key code verifier.",
@@ -451,6 +452,9 @@
"password_error_msg": "Invalid Password",
"IDA-MLC-018": "Incorrect username or password. Please try again."
},
+ "kba": {
+ "auth_failed": "Login failed, please enter correct credentials"
+ },
"statusCodeHeader": {
"400": "Bad Request",
"401": "Unauthorized",
diff --git a/oidc-ui/public/locales/hi.json b/oidc-ui/public/locales/hi.json
index a665684ee..92161911e 100644
--- a/oidc-ui/public/locales/hi.json
+++ b/oidc-ui/public/locales/hi.json
@@ -89,8 +89,7 @@
"dob": "जन्मतिथि दर्ज करें",
"policyNumber_placeholder": "पॉलिसी नंबर",
"fullName_placeholder": "पूरा नाम",
- "dob_placeholder": "जन्मतिथि",
- "auth_failed": "लॉगिन विफल, कृपया सही क्रेडेंशियल दर्ज करें"
+ "dob_placeholder": "जन्मतिथि"
},
"LoginQRCode": {
"scan_with_wallet": "लॉगिन करने के लिए {{walletName}} से स्कैन करें",
@@ -297,6 +296,8 @@
"binding_auth_failed": "प्रमुख बाउंड ऑथेंटिकेशन (लिंक्ड-वॉलेट) विफल रहा।",
"invalid_captcha": "अमान्य कैप्चा मिला।",
"invalid_auth_factor_type_or_challenge_format": "अमान्य प्रामाणिक कारक प्रकार या चुनौती प्रारूप।",
+ "invalid_auth_factor_type_format" : "अमान्य प्रामाणिक कारक प्रकार या चुनौती प्रारूप।",
+ "invalid_challenge_length" : "अमान्य चुनौती, न्यूनतम या अधिकतम लंबाई बाधा का उल्लंघन किया गया।",
"unsupported_pkce_challenge_method": "असमर्थित प्रमाण कुंजी चैलेंज एक्सचेंज विधि।",
"invalid_pkce_challenge": "अमान्य प्रूफ कुंजी चुनौती।",
"invalid_pkce_code_verifier": "अमान्य प्रूफ कुंजी कोड सत्यापनकर्ता।",
@@ -453,6 +454,9 @@
"IDA-PSD-001": "गलत उपयोगकर्ता नाम या पासवर्ड। कृपया पुन: प्रयास करें।",
"IDA-PSD-002": "गलत उपयोगकर्ता नाम या पासवर्ड। कृपया पुन: प्रयास करें।"
},
+ "kba": {
+ "auth_failed": "लॉगिन विफल, कृपया सही क्रेडेंशियल दर्ज करें"
+ },
"statusCodeHeader": {
"400": "अमान्य अनुरोध",
"401": "अनाधिकृत",
diff --git a/oidc-ui/public/locales/km.json b/oidc-ui/public/locales/km.json
index b16a9da77..d016ab211 100644
--- a/oidc-ui/public/locales/km.json
+++ b/oidc-ui/public/locales/km.json
@@ -296,6 +296,8 @@
"captcha_validator_not_found": "មិនអាចរកឃើញឧទាហរណ៍ validator captcha បាន សូមពិនិត្យមើល classspath។",
"invalid_captcha": "បានរកឃើញ captcha មិនត្រឹមត្រូវ",
"invalid_auth_factor_type_or_challenge_format": "ប្រភេទកត្តាផ្ទៀងផ្ទាត់មិនត្រឹមត្រូវ ឬទម្រង់បញ្ហាប្រឈម។",
+ "invalid_auth_factor_type_format" : "ប្រភេទកត្តាផ្ទៀងផ្ទាត់មិនត្រឹមត្រូវ ឬទម្រង់បញ្ហាប្រឈម។",
+ "invalid_challenge_length" : "ការ ប្រកួត ប្រជែង មិន ត្រឹម ត្រូវ ការ ដាក់ កំហិត ប្រវែង Min ឬ Max បាន រំលោភ បំពាន ។",
"unsupported_pkce_challenge_method": "វិធីសាស្ត្រដោះដូរគន្លឹះដែលមិនបានគាំទ្រ។",
"invalid_pkce_challenge": "បញ្ហា គន្លឹះ ភស្តុតាង មិន ត្រឹមត្រូវ",
"invalid_pkce_code_verifier": "ការផ្ទៀងផ្ទាត់លេខកូដសោភ័ស្តុតាងមិនត្រឹមត្រូវ។",
@@ -452,6 +454,9 @@
"IDA-PSD-001": "ឈ្មោះអ្នកប្រើ ឬពាក្យសម្ងាត់មិនត្រឹមត្រូវ។ សូមព្យាយាមម្តងទៀត។",
"IDA-PSD-002": "ឈ្មោះអ្នកប្រើ ឬពាក្យសម្ងាត់មិនត្រឹមត្រូវ។ សូមព្យាយាមម្តងទៀត។"
},
+ "kba": {
+ "auth_failed": "ការចូលបានបរាជ័យ សូមបញ្ចូលលិខិតបញ្ជាក់ត្រឹមត្រូវ។"
+ },
"statusCodeHeader": {
"400": "ការស្នើសុំមិនល្អ",
"401": "មិនអនុញ្ញាតិសម្រាប់ប្រើប្រាស់",
diff --git a/oidc-ui/public/locales/kn.json b/oidc-ui/public/locales/kn.json
index 8f7e92c59..67f484f4f 100644
--- a/oidc-ui/public/locales/kn.json
+++ b/oidc-ui/public/locales/kn.json
@@ -89,8 +89,7 @@
"dob": "ಹುಟ್ಟಿದ ದಿನಾಂಕವನ್ನು ನಮೂದಿಸಿ",
"policyNumber_placeholder": "ಪಾಲಿಸಿ ಸಂಖ್ಯೆ",
"fullName_placeholder": "ಪೂರ್ಣ ಹೆಸರು",
- "dob_placeholder": "ಹುಟ್ಟಿದ ದಿನಾಂಕ",
- "auth_failed": "ಲಾಗಿನ್ ವಿಫಲವಾಗಿದೆ, ದಯವಿಟ್ಟು ಸರಿಯಾದ ರುಜುವಾತುಗಳನ್ನು ನಮೂದಿಸಿ"
+ "dob_placeholder": "ಹುಟ್ಟಿದ ದಿನಾಂಕ"
},
"LoginQRCode": {
"scan_with_wallet": "ಲಾಗಿನ್ ಮಾಡಲು {{walletName}} ನೊಂದಿಗೆ ಸ್ಕ್ಯಾನ್ ಮಾಡಿ",
@@ -297,6 +296,8 @@
"captcha_validator_not_found": "ಕ್ಯಾಪ್ಚಾ ವ್ಯಾಲಿಡೇಟರ್ ನಿದರ್ಶನವನ್ನು ಕಂಡುಹಿಡಿಯಲು ವಿಫಲವಾಗಿದೆ, ದಯವಿಟ್ಟು ಕ್ಲಾಸ್ಪಾತ್ ಪರಿಶೀಲಿಸಿ.",
"invalid_captcha": "ಅಮಾನ್ಯ ಕ್ಯಾಪ್ಚಾ ಕಂಡುಬಂದಿದೆ.",
"invalid_auth_factor_type_or_challenge_format": "ಅಮಾನ್ಯ ದೃ uth ೀಕರಣ ಅಂಶ ಪ್ರಕಾರ ಅಥವಾ ಸವಾಲು ಸ್ವರೂಪ.",
+ "invalid_auth_factor_type_format" : "ಅಮಾನ್ಯ ದೃ uth ೀಕರಣ ಅಂಶ ಪ್ರಕಾರ ಅಥವಾ ಸವಾಲು ಸ್ವರೂಪ.",
+ "invalid_challenge_length" : "ಅಮಾನ್ಯ ಸವಾಲು, ಕನಿಷ್ಠ ಅಥವಾ ಗರಿಷ್ಠ ಉದ್ದದ ನಿರ್ಬಂಧವನ್ನು ಉಲ್ಲಂಘಿಸಲಾಗಿದೆ.",
"unsupported_pkce_challenge_method": "ಬೆಂಬಲಿಸದ ಪ್ರೂಫ್ ಕೀ ಚಾಲೆಂಜ್ ಎಕ್ಸ್ಚೇಂಜ್ ವಿಧಾನ.",
"invalid_pkce_challenge": "ಅಮಾನ್ಯ ಪುರಾವೆ ಕೀ ಸವಾಲು.",
"invalid_pkce_code_verifier": "ಅಮಾನ್ಯ ಪ್ರೂಫ್ ಕೀ ಕೋಡ್ ಪರಿಶೀಲಕ.",
@@ -453,6 +454,9 @@
"IDA-PSD-001": "ತಪ್ಪಾದ ಬಳಕೆದಾರಹೆಸರು ಅಥವಾ ಪಾಸ್ವರ್ಡ್. ದಯವಿಟ್ಟು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.",
"IDA-PSD-002": "ತಪ್ಪಾದ ಬಳಕೆದಾರಹೆಸರು ಅಥವಾ ಪಾಸ್ವರ್ಡ್. ದಯವಿಟ್ಟು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."
},
+ "kba": {
+ "auth_failed": "ಲಾಗಿನ್ ವಿಫಲವಾಗಿದೆ, ದಯವಿಟ್ಟು ಸರಿಯಾದ ರುಜುವಾತುಗಳನ್ನು ನಮೂದಿಸಿ"
+ },
"statusCodeHeader": {
"400": "ಅಮಾನ್ಯ ವಿನಂತಿ",
"401": "ಅನಧಿಕೃತ",
diff --git a/oidc-ui/public/locales/ta.json b/oidc-ui/public/locales/ta.json
index 78dafbc16..c427b9471 100644
--- a/oidc-ui/public/locales/ta.json
+++ b/oidc-ui/public/locales/ta.json
@@ -89,8 +89,7 @@
"dob": "பிறந்த தேதியை உள்ளிடுக",
"policyNumber_placeholder": "காப்பீடு எண்",
"fullName_placeholder": "முழு பெயர்",
- "dob_placeholder": "பிறந்த தேதி",
- "auth_failed": "உள்நுழைவு தோல்வியடைந்தது, சரியான சான்றுகளை உள்ளிடவும்"
+ "dob_placeholder": "பிறந்த தேதி"
},
"LoginQRCode": {
"scan_with_wallet": "உள்நுழைய {{walletName}} உடன் ஸ்கேன் செய்யவும்",
@@ -297,6 +296,8 @@
"captcha_validator_not_found": "கேப்ட்சா வேலிடேட்டர் உதாரணத்தைக் கண்டுபிடிப்பதில் தோல்வி, தயவுசெய்து கிளாஸ் பாதையை சரிபார்க்கவும்.",
"invalid_captcha": "தவறான கேப்ட்சா காணப்பட்டது.",
"invalid_auth_factor_type_or_challenge_format": "தவறான அங்கீகார காரணி வகை அல்லது சவால் வடிவம்.",
+ "invalid_auth_factor_type_format" : "தவறான அங்கீகார காரணி வகை அல்லது சவால் வடிவம்.",
+ "invalid_challenge_length" : "செல்லுபடியாகாத சவால், குறைந்தபட்ச அல்லது அதிகபட்ச நீளக் கட்டுப்பாடு மீறப்பட்டுள்ளது.",
"unsupported_pkce_challenge_method": "ஆதரிக்கப்படாத ஆதாரம் முக்கிய சவால் பரிமாற்ற முறை.",
"invalid_pkce_challenge": "தவறான ஆதாரம் முக்கிய சவால்.",
"invalid_pkce_code_verifier": "தவறான ஆதாரம் விசை குறியீடு சரிபார்ப்பு.",
@@ -453,6 +454,9 @@
"IDA-PSD-001": "தவறான பயனர்பெயர் அல்லது கடவுச்சொல். தயவு செய்து மீண்டும் முயற்சிக்கவும்.",
"IDA-PSD-002": "தவறான பயனர்பெயர் அல்லது கடவுச்சொல். தயவு செய்து மீண்டும் முயற்சிக்கவும்."
},
+ "kba": {
+ "auth_failed": "உள்நுழைவு தோல்வியடைந்தது, சரியான சான்றுகளை உள்ளிடவும்"
+ },
"statusCodeHeader": {
"400": "செல்லாத கோரிக்கை",
"401": "அனுமதி இல்லை",
diff --git a/oidc-ui/src/components/Form.js b/oidc-ui/src/components/Form.js
index f0dc650da..cb1a79e44 100644
--- a/oidc-ui/src/components/Form.js
+++ b/oidc-ui/src/components/Form.js
@@ -1,12 +1,9 @@
import { useEffect, useState, useRef } from "react";
import { useTranslation } from "react-i18next";
import { useNavigate } from "react-router-dom";
-import ErrorIndicator from "../common/ErrorIndicator";
import LoadingIndicator from "../common/LoadingIndicator";
import {
buttonTypes,
- challengeFormats,
- challengeTypes,
configurationKeys,
} from "../constants/clientConstants";
import { LoadingStates as states } from "../constants/states";
@@ -15,17 +12,25 @@ import InputWithImage from "./InputWithImage";
import ReCAPTCHA from "react-google-recaptcha";
import ErrorBanner from "../common/ErrorBanner";
import redirectOnError from "../helpers/redirectOnError";
+import langConfigService from "../services/langConfigService";
let fieldsState = {};
+const langConfig = await langConfigService.getEnLocaleConfiguration();
export default function Form({
authService,
openIDConnectService,
backButtonDiv,
- i18nKeyPrefix = "Form",
+ i18nKeyPrefix1 = "Form",
+ i18nKeyPrefix2 = "errors"
}) {
- const { t, i18n } = useTranslation("translation", {
- keyPrefix: i18nKeyPrefix,
+
+ const { t: t1, i18n } = useTranslation("translation", {
+ keyPrefix: i18nKeyPrefix1,
+ });
+
+ const { t: t2 } = useTranslation("translation", {
+ keyPrefix: i18nKeyPrefix2,
});
const inputCustomClass =
@@ -45,17 +50,25 @@ export default function Form({
useEffect(() => {
}, []);
-
const navigate = useNavigate();
- const handleChange = (e) => {
- setLoginState({ ...loginState, [e.target.id]: e.target.value });
+ const handleChange = (e, field) => {
+ const regex = new RegExp(field.regex);
+ const value = e.target.value;
+
+ if (e.target.type === 'text' && field?.regex !== null && field?.regex !== undefined) {
+ setLoginState({ ...loginState, [e.target.id]: regex.test(value) || value === "" || value === null ? value : loginState[e.target.id] });
+ }
+ else {
+ setLoginState({ ...loginState, [e.target.id]: e.target.value });
+ }
};
const handleSubmit = (e) => {
e.preventDefault();
authenticateUser();
};
+
const captchaEnableComponents =
openIDConnectService.getEsignetConfiguration(
configurationKeys.captchaEnableComponents
@@ -124,24 +137,31 @@ export default function Form({
const { response, errors } = authenticateResponse;
if (errors != null && errors.length > 0) {
- if(errors[0].errorCode === "auth_failed"){
- setError({
- defaultMsg: t(`${errors[0].errorCode}`)
+ let errorCodeCondition = langConfig.errors.otp[errors[0].errorCode] !== undefined && langConfig.errors.kba[errors[0].errorCode] !== null;
+
+ if (errorCodeCondition) {
+ setErrorBanner({
+ errorCode: `kba.${errors[0].errorCode}`,
+ show: true
});
}
else if (errors[0].errorCode === "invalid_transaction") {
- redirectOnError(errors[0].errorCode, t(`${errors[0].errorCode}`));
+ redirectOnError(errors[0].errorCode, t2(`${errors[0].errorCode}`));
}
- else{
- setError({
- errorCode: `${errors[0].errorCode}`
+ else {
+ setErrorBanner({
+ errorCode: `${errors[0].errorCode}`,
+ show: true
});
}
- resetCaptcha();
+
+ if (showCaptcha) {
+ resetCaptcha();
+ }
return;
} else {
setError(null);
-
+ setErrorBanner(null);
let nonce = openIDConnectService.getNonce();
let state = openIDConnectService.getState();
@@ -157,13 +177,15 @@ export default function Form({
});
}
} catch (error) {
- setError({
- prefix: "authentication_failed_msg",
- errorCode: error.message,
- defaultMsg: error.message,
+ setErrorBanner({
+ errorCode: "kba.auth_failed",
+ show: true
});
setStatus(states.ERROR);
- resetCaptcha();
+
+ if (showCaptcha) {
+ resetCaptcha();
+ }
}
};
@@ -184,9 +206,7 @@ export default function Form({
}, [loginState]);
const onCloseHandle = () => {
- let tempBanner = errorBanner.map((_) => _);
- tempBanner[0].show = false;
- setErrorBanner(tempBanner);
+ setErrorBanner(null);
};
return (
@@ -195,10 +215,10 @@ export default function Form({
{(backButtonDiv)}
- {errorBanner.length > 0 && (
+ {errorBanner !== null && (