From 8833018027c2b422c4a780eb0fc16d43ca088fe2 Mon Sep 17 00:00:00 2001 From: Andrew <148278535+andrew-opensignlabs@users.noreply.github.com> Date: Fri, 26 Sep 2025 17:57:57 +0000 Subject: [PATCH] fix: password validation issue --- apps/OpenSign/src/pages/AddAdmin.jsx | 2 +- apps/OpenSign/src/pages/ChangePassword.jsx | 27 ++++++++++++++++- apps/OpenSign/src/pages/ForgetPassword.jsx | 34 ++++++++++++++++++++++ apps/OpenSign/src/pages/Login.jsx | 27 ++++++++++++++++- 4 files changed, 87 insertions(+), 3 deletions(-) diff --git a/apps/OpenSign/src/pages/AddAdmin.jsx b/apps/OpenSign/src/pages/AddAdmin.jsx index ac3f38d51..217ed6e74 100644 --- a/apps/OpenSign/src/pages/AddAdmin.jsx +++ b/apps/OpenSign/src/pages/AddAdmin.jsx @@ -253,7 +253,7 @@ const AddAdmin = () => { /[A-Z]/.test(newPassword) && /\d/.test(newPassword) ); - setSpecialCharValid(/[!@#$%^&*()\-_=+{};:,<.>]/.test(newPassword)); + setSpecialCharValid(/[!@#$%^&*()\-_=+{};:,<.>?]/.test(newPassword)); }; const subscribeNewsletter = async () => { try { diff --git a/apps/OpenSign/src/pages/ChangePassword.jsx b/apps/OpenSign/src/pages/ChangePassword.jsx index b162a4388..a084fc962 100644 --- a/apps/OpenSign/src/pages/ChangePassword.jsx +++ b/apps/OpenSign/src/pages/ChangePassword.jsx @@ -4,6 +4,18 @@ import { Navigate } from "react-router"; import { useTranslation } from "react-i18next"; function ChangePassword() { + const [lengthValid, setLengthValid] = useState(false); + const [caseDigitValid, setCaseDigitValid] = useState(false); + const [specialCharValid, setSpecialCharValid] = useState(false); + const handlePasswordChange = (e) => { + const value = e.target.value; + setnewpassword(value); + setLengthValid(value.length >= 8); + setCaseDigitValid( + /[a-z]/.test(value) && /[A-Z]/.test(value) && /\d/.test(value) + ); + setSpecialCharValid(/[!@#$%^&*()\-_=+{};:,<.>?]/.test(value)); + }; const { t } = useTranslation(); const [currentpassword, setCurrentPassword] = useState(""); const [newpassword, setnewpassword] = useState(""); @@ -84,13 +96,26 @@ function ChangePassword() { type="password" name="newpassword" value={newpassword} - onChange={(e) => setnewpassword(e.target.value)} + onChange={handlePasswordChange} className="op-input op-input-bordered op-input-sm text-xs w-full" placeholder={t("new-password")} onInvalid={(e) => e.target.setCustomValidity(t("input-required"))} onInput={(e) => e.target.setCustomValidity("")} required /> + {newpassword.length > 0 && ( +
+ {lengthValid ? "✓" : "✗"} Password length ≥ 8 +
++ {caseDigitValid ? "✓" : "✗"} Uppercase, lowercase, and number +
++ {specialCharValid ? "✓" : "✗"} Special character +
++ {lengthValid ? "✓" : "✗"} Password length ≥ 8 +
++ {caseDigitValid ? "✓" : "✗"} Uppercase, lowercase, and number +
++ {specialCharValid ? "✓" : "✗"} Special character +
++ {lengthValid ? "✓" : "✗"} Password length ≥ 8 +
++ {caseDigitValid ? "✓" : "✗"} Uppercase, lowercase, and number +
++ {specialCharValid ? "✓" : "✗"} Special character +
+