From 871efad30f92a043a88afaee4a670553e2856472 Mon Sep 17 00:00:00 2001 From: Moueed Ali Date: Wed, 3 Sep 2025 09:56:13 +0200 Subject: [PATCH 1/4] feat/added feature for email and password validaion --- src/pages/register/index.js | 36 +++++++++++++++++++++++++++++++++++- src/service/apiClient.js | 2 +- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/pages/register/index.js b/src/pages/register/index.js index 5cc70e32..6947030d 100644 --- a/src/pages/register/index.js +++ b/src/pages/register/index.js @@ -14,6 +14,30 @@ const Register = () => { setFormData({ ...formData, [name]: value }); }; + const validateEmail = (email) => { + const mailFormat = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/; + if (email.match(mailFormat)) { + return true; // return true if email is in valid format + } + else { + alert("You have entered an invalid email address"); // generic error message for now, needs refactoring + return false; + } + + console.log(onRegister) + } + + const validatePassword = (password) => { + const passwordFormat = /^(?=.*?[A-Z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/; + if (password.match(passwordFormat)) { + return true; + } + else { + alert("Your password is not in the right format"); // generic error message for now, needs refactoring + return false; + } + } + return (
{ type="email" name="email" label={'Email *'} + required /> { name="password" label={'Password *'} type={'password'} + required />
@@ -52,3 +83,6 @@ const Register = () => { }; export default Register; + +// email: dave@email.com +// password: @Qwert123456 \ No newline at end of file diff --git a/src/service/apiClient.js b/src/service/apiClient.js index 5f3cdbcf..0effc0ca 100644 --- a/src/service/apiClient.js +++ b/src/service/apiClient.js @@ -5,7 +5,7 @@ async function login(email, password) { } async function register(email, password) { - await post('users', { email, password }, false); + await post('signup', { email, password }, false); return await login(email, password); } From 1619055c1a2fbf7a11520a2fe907dbd77adaa319 Mon Sep 17 00:00:00 2001 From: Moueed Ali Date: Wed, 3 Sep 2025 11:38:39 +0200 Subject: [PATCH 2/4] fix/removed_email_and_password --- src/pages/register/index.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/pages/register/index.js b/src/pages/register/index.js index 6947030d..42efbb99 100644 --- a/src/pages/register/index.js +++ b/src/pages/register/index.js @@ -83,6 +83,3 @@ const Register = () => { }; export default Register; - -// email: dave@email.com -// password: @Qwert123456 \ No newline at end of file From d45d3451a332979afd1656d3c51f87ef4a59b32b Mon Sep 17 00:00:00 2001 From: Moueed Ali Date: Wed, 3 Sep 2025 13:44:27 +0200 Subject: [PATCH 3/4] feat/added new feature to perform checks against DB for existing email --- .prettierignore | 2 ++ package-lock.json | 18 ++++++++++++---- package.json | 3 ++- src/pages/register/index.js | 42 ++++++++++++++++++++++++++++++------- 4 files changed, 53 insertions(+), 12 deletions(-) create mode 100644 .prettierignore diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..08fe6302 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,2 @@ +src/* +src/ \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 6891fbef..efeadd9c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,13 +15,14 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-modal": "^3.16.1", + "react-password-checklist": "^1.8.1", "react-router-dom": "^6.8.0", "react-scripts": "5.0.1", "web-vitals": "^3.1.1" }, "devDependencies": { "eslint": "^8.57.1", - "eslint-config-prettier": "^9.1.0", + "eslint-config-prettier": "^9.1.2", "eslint-config-standard": "^17.1.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-n": "^16.6.2", @@ -7360,9 +7361,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.2.tgz", + "integrity": "sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==", "dev": true, "license": "MIT", "bin": { @@ -14974,6 +14975,15 @@ "react-dom": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18" } }, + "node_modules/react-password-checklist": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/react-password-checklist/-/react-password-checklist-1.8.1.tgz", + "integrity": "sha512-QHIU/OejxoH4/cIfYLHaHLb+yYc8mtL0Vr4HTmULxQg3ZNdI9Ni/yYf7pwLBgsUh4sseKCV/GzzYHWpHqejTGw==", + "license": "MIT", + "peerDependencies": { + "react": ">16.0.0-alpha || >17.0.0-alpha || >18.0.0-alpha" + } + }, "node_modules/react-refresh": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", diff --git a/package.json b/package.json index 249b6b05..320f92bc 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-modal": "^3.16.1", + "react-password-checklist": "^1.8.1", "react-router-dom": "^6.8.0", "react-scripts": "5.0.1", "web-vitals": "^3.1.1" @@ -43,7 +44,7 @@ }, "devDependencies": { "eslint": "^8.57.1", - "eslint-config-prettier": "^9.1.0", + "eslint-config-prettier": "^9.1.2", "eslint-config-standard": "^17.1.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-n": "^16.6.2", diff --git a/src/pages/register/index.js b/src/pages/register/index.js index 42efbb99..0efe356c 100644 --- a/src/pages/register/index.js +++ b/src/pages/register/index.js @@ -4,6 +4,7 @@ import TextInput from '../../components/form/textInput'; import useAuth from '../../hooks/useAuth'; import CredentialsCard from '../../components/credentials'; import './register.css'; +import ReactPasswordChecklist from 'react-password-checklist'; const Register = () => { const { onRegister } = useAuth(); @@ -17,14 +18,13 @@ const Register = () => { const validateEmail = (email) => { const mailFormat = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/; if (email.match(mailFormat)) { - return true; // return true if email is in valid format + return true; } else { - alert("You have entered an invalid email address"); // generic error message for now, needs refactoring + alert("You have entered an invalid email address"); return false; } - console.log(onRegister) } const validatePassword = (password) => { @@ -33,10 +33,25 @@ const Register = () => { return true; } else { - alert("Your password is not in the right format"); // generic error message for now, needs refactoring + alert("Your password is not in the right format"); return false; } } + + const checkEmailExists = async (email) => { + try { + const response = await fetch('/api/check-email', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ email }), + }); + const data = await response.json(); + return data.exists; + } + catch (error) { + return true; + } + }; return (
@@ -65,15 +80,28 @@ const Register = () => { type={'password'} required /> +
From a706c378688e0ac340763b9408d593428bbecdaf Mon Sep 17 00:00:00 2001 From: Moueed Ali Date: Thu, 4 Sep 2025 15:28:35 +0200 Subject: [PATCH 4/4] fix/fixed error for checks against database for email --- src/pages/register/index.js | 32 ++++++++++---------------------- src/service/apiClient.js | 6 ++++++ 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/src/pages/register/index.js b/src/pages/register/index.js index 0efe356c..8d4844de 100644 --- a/src/pages/register/index.js +++ b/src/pages/register/index.js @@ -37,21 +37,6 @@ const Register = () => { return false; } } - - const checkEmailExists = async (email) => { - try { - const response = await fetch('/api/check-email', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ email }), - }); - const data = await response.json(); - return data.exists; - } - catch (error) { - return true; - } - }; return (
@@ -93,15 +78,18 @@ const Register = () => {
diff --git a/src/service/apiClient.js b/src/service/apiClient.js index 0effc0ca..df36acac 100644 --- a/src/service/apiClient.js +++ b/src/service/apiClient.js @@ -49,6 +49,12 @@ async function request(method, endpoint, data, auth = true) { const response = await fetch(`${API_URL}/${endpoint}`, opts); + if (!response.ok) { + const error = new Error(response.message || `Request failed with status ${response.status}`); + error.status = response.status; + throw error; + } + return response.json(); }