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 && ( )} @@ -208,17 +228,20 @@ export default function Form({
{ + handleChange(e, field) + }} value={loginState["_form_" + field.id]} - labelText={t(field.id)} + labelText={t1(field.id)} labelFor={field.id} id={"_form_" + field.id} type={field.type} isRequired={true} - placeholder={t(field.id + "_placeholder" )} + placeholder={t1(field.id + "_placeholder" )} customClass={inputCustomClass} imgPath={null} icon={field.infoIcon} + maxLength={field.maxLength} />
))} @@ -237,7 +260,7 @@ export default function Form({ )} - {status !== states.LOADING && error && ( - - )} ); } diff --git a/oidc-ui/src/components/OtpGet.js b/oidc-ui/src/components/OtpGet.js index 790560485..7ebd25465 100644 --- a/oidc-ui/src/components/OtpGet.js +++ b/oidc-ui/src/components/OtpGet.js @@ -137,7 +137,9 @@ export default function OtpGet({ show: true }); } - resetCaptcha(); + if (showCaptcha) { + resetCaptcha(); + } return; } else { onOtpSent(loginState["Otp_mosip-vid"], response); @@ -149,7 +151,9 @@ export default function OtpGet({ show: true }); setStatus({ state: states.ERROR, msg: "" }); - resetCaptcha(); + if (showCaptcha) { + resetCaptcha(); + } } }; diff --git a/oidc-ui/src/components/Password.js b/oidc-ui/src/components/Password.js index 615fea32d..9308138ce 100644 --- a/oidc-ui/src/components/Password.js +++ b/oidc-ui/src/components/Password.js @@ -166,7 +166,9 @@ export default function Password({ show: true }); } - resetCaptcha(); + if (showCaptcha) { + resetCaptcha(); + } return; } else { setErrorBanner(null); @@ -191,7 +193,9 @@ export default function Password({ show: true }); setStatus(states.ERROR); - resetCaptcha(); + if (showCaptcha) { + resetCaptcha(); + } } };