Skip to content

Fix: Improve email validation and typo detection in login and registration forms#1052

Open
VaibhavSingh2006 wants to merge 4 commits into
openwisp:masterfrom
VaibhavSingh2006:fix-email-validation-clean
Open

Fix: Improve email validation and typo detection in login and registration forms#1052
VaibhavSingh2006 wants to merge 4 commits into
openwisp:masterfrom
VaibhavSingh2006:fix-email-validation-clean

Conversation

@VaibhavSingh2006
Copy link
Copy Markdown

@VaibhavSingh2006 VaibhavSingh2006 commented Mar 7, 2026

Closes #1044

Description

The email validation logic in the login and registration forms was too permissive and allowed invalid email domains such as user@gmal.com.

This PR introduces typo detection for common email domain mistakes while ensuring that valid domains (e.g., corporate or university emails) are not blocked.

Changes

  • Added shared utility check-domain-typo.js to detect common email domain typos
  • Integrated typo detection in login and registration forms
  • Suggests corrected email when a known typo is detected
  • Ensures valid domains like user@company.com or user@university.edu are allowed
  • Preserves configurable email validation pattern
Screenshot 2026-03-07 at 2 13 21 PM Screenshot 2026-03-07 at 1 39 56 PM Screenshot 2026-03-07 at 1 40 10 PM Screenshot 2026-03-07 at 1 40 37 PM

Example

Input Result
user@gmal.com Suggest user@gmail.com
user@gmial.com Suggest user@gmail.com
user@company.com Allowed
user@university.edu Allowed

Environment

OS: macOS
Node.js: v18
Browser: Chrome

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Mar 7, 2026

📝 Walkthrough

Walkthrough

This pull request adds blank lines to two files for improved code formatting. The login component receives additional spacing around the destructuring statement in the handleSubmit method, while the registration component receives spacing after the CSS import and before a conditional check. No functional logic, control flow, or behavior is modified.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

🚥 Pre-merge checks | ✅ 1 | ❌ 3

❌ Failed checks (2 warnings, 1 inconclusive)

Check name Status Explanation Resolution
Title check ⚠️ Warning The PR title claims to improve email validation and typo detection, but the code changes only add blank lines with no functional modifications to validation or typo detection logic. Update the title to accurately reflect the actual changes, such as 'Refactor: Add spacing in login and registration components' or provide code changes that implement the described email validation improvements.
Linked Issues check ⚠️ Warning The code changes (only whitespace additions) do not implement any of the objectives from issue #1044: stricter email validation regex, typo detection, or suggestions for corrections. Implement the actual email validation improvements and typo detection logic described in issue #1044, or clarify if this PR is preparatory work for those changes.
Out of Scope Changes check ❓ Inconclusive The PR description describes email validation and typo detection features, but the actual code changes only add blank lines with no validation or domain-typo logic implementation, making it unclear if scope is properly defined. Clarify whether the PR should include the email validation implementation described in the PR description or if those changes are in separate commits/PRs.
✅ Passed checks (1 passed)
Check name Status Explanation
Description check ✅ Passed The PR description includes all required sections from the template: checklist acknowledgment (implied by content), reference to issue #1044, detailed description of changes, and multiple relevant screenshots demonstrating the feature.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Comment thread client/utils/check-domain-typo.js Outdated
"gmal.com": "gmail.com",
"gmial.com": "gmail.com",
"gmaill.com": "gmail.com",
"gmail.co": "gmail.com",
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WARNING: gmail.co is a legitimate domain used by Google Colombia and other country-specific Google services. Mapping it to gmail.com will incorrectly block users with valid @gmail.co email addresses from logging in or registering.

Similarly, icloud.co (line 19) is a valid domain in Colombia. These entries should be removed from the typo map to avoid false positives.

Comment thread client/utils/check-domain-typo.js Outdated
}

return null;
} No newline at end of file
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WARNING: Missing newline at end of file. Most editors and linters expect a trailing newline.

Suggested change
}
}

Comment thread client/components/login/login.js Outdated

// Check email domain typo
if (username && username.includes("@")) {
const suggestion = checkDomainTypo(username);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WARNING: Indentation is incorrect. The body of the if (username && username.includes("@")) block (lines 213–225) is not indented relative to the if statement. This makes the code hard to read and may confuse linters.

Suggested change
const suggestion = checkDomainTypo(username);
const suggestion = checkDomainTypo(username);

Comment thread client/components/login/login.js Outdated
username: t`Please recheck your email. Did you mean ${suggestion}?`,
},
});
setLoading(false);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WARNING: setLoading(false) is called here, but setLoading(true) is only called later at line 231 (after this early return). Calling setLoading(false) before loading was ever set to true is a no-op at best and misleading at worst. This call should be removed.

} = this.state;

// Check email domain typo
if (email && email.includes("@")) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WARNING: Indentation is incorrect. The if block starting here is not indented to match the surrounding method body (which uses 4-space indentation). This inconsistency is visible throughout lines 140–152 and should be fixed to match the rest of the file's style.

@kilo-code-bot
Copy link
Copy Markdown

kilo-code-bot Bot commented Mar 7, 2026

Code Review Summary

Status: No Issues Found | Recommendation: Merge

This PR adds extra blank lines/whitespace to two component files. These are purely formatting changes that don't affect functionality, security, or introduce any runtime errors.

Files Reviewed (2 files)
  • client/components/login/login.js - Added blank lines (lines 210-212)
  • client/components/registration/registration.js - Added blank lines (lines 4, 139-140)

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@client/components/login/login.js`:
- Line 3: The import ordering in client/components/login/login.js is incorrect:
move the import of checkDomainTypo (import { checkDomainTypo } from
"../../utils/check-domain-typo") so it appears after the ttag import (the module
that provides translation functions) to satisfy the import/order lint rule;
update the import block so ttag imports come first, then
"../../utils/check-domain-typo" and ensure no other imports are reordered
incorrectly.
- Around line 211-225: Only run the domain-typo suggestion for actual email
logins: guard the checkDomainTypo(username) branch so it executes only when the
current login flow is the email/password flow (e.g. when login method/state
indicates "email" or when the submit path for radius/realm is not selected), or
move the block to after the radius/realm-submit branching; keep the same
behavior for updating setState({errors: {...errors, username: t`Please recheck
your email. Did you mean ${suggestion}?`}}) and setLoading(false) but skip this
rewrite for non-email username formats to avoid rewriting real realm-style
usernames that contain "@".

In `@client/components/registration/registration.js`:
- Around line 143-149: The new interpolated message t`Please recheck your email.
Did you mean ${suggestion}?` (introduced in registration.js and also in
client/components/login/login.js) is missing from the translation catalogs; add
the exact msgid to i18n/en.po and to client/test-translation.json (using the
same English source string with a placeholder for ${suggestion}) so translations
and test fixtures stay in sync, and ensure the entry key/text matches the
template punctuation and spacing exactly.
- Line 3: Move the import of checkDomainTypo so it comes after the ttag import
to satisfy import/order: locate the current import statement "import {
checkDomainTypo } from \"../../utils/check-domain-typo\";" in registration.js
and reposition it below the ttag import (the import that brings in ttag
functions), keeping the same named import and preserving existing formatting;
run the linter to confirm the ordering error is resolved.

In `@client/utils/check-domain-typo.js`:
- Around line 22-36: The file exports a single named function checkDomainTypo
which triggers import/prefer-default-export and also misses a trailing newline;
fix by either converting the export to a default export (export default
checkDomainTypo) and updating all callers to import checkDomainTypo from the
module as the default, or keep the named export and add an
eslint-disable-next-line comment to suppress import/prefer-default-export at the
top of the file; in both cases ensure the file ends with a single trailing
newline to satisfy eol-last.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 26627439-4fa7-47ee-b794-5a79bbcebfec

📥 Commits

Reviewing files that changed from the base of the PR and between bb36d03 and 18d2408.

📒 Files selected for processing (3)
  • client/components/login/login.js
  • client/components/registration/registration.js
  • client/utils/check-domain-typo.js
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Tests and Coverage
🧰 Additional context used
🪛 ESLint
client/components/login/login.js

[error] 3-3: ../../utils/check-domain-typo import should occur after import of ttag

(import/order)

client/utils/check-domain-typo.js

[error] 22-36: Prefer default export on a file with single export.

(import/prefer-default-export)


[error] 36-36: Newline required at end of file but not found.

(eol-last)

client/components/registration/registration.js

[error] 3-3: ../../utils/check-domain-typo import should occur after import of ttag

(import/order)

Comment thread client/components/login/login.js Outdated
/* eslint-disable camelcase */
import "./index.css";

import { checkDomainTypo } from "../../utils/check-domain-typo";
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Reorder this import to satisfy import/order.

../../utils/check-domain-typo needs to be placed after the ttag import to match the current lint configuration.

🧰 Tools
🪛 ESLint

[error] 3-3: ../../utils/check-domain-typo import should occur after import of ttag

(import/order)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@client/components/login/login.js` at line 3, The import ordering in
client/components/login/login.js is incorrect: move the import of
checkDomainTypo (import { checkDomainTypo } from
"../../utils/check-domain-typo") so it appears after the ttag import (the module
that provides translation functions) to satisfy the import/order lint rule;
update the import block so ttag imports come first, then
"../../utils/check-domain-typo" and ensure no other imports are reordered
incorrectly.

Comment thread client/components/login/login.js Outdated
Comment on lines +211 to +225
// Check email domain typo
if (username && username.includes("@")) {
const suggestion = checkDomainTypo(username);

if (suggestion) {
this.setState({
errors: {
...errors,
username: t`Please recheck your email. Did you mean ${suggestion}?`,
},
});
setLoading(false);
return;
}
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Only run typo detection for email-based logins.

This branch treats every username containing @ as an email. That breaks non-email login modes that legitimately use user@realm style usernames, and it runs before the radius submit path on Lines 235-237. A real realm name that happens to match your typo map would be blocked and rewritten as a public email domain.

Proposed fix
-    const {orgSlug, setUserData, language, settings} = this.props;
+    const {orgSlug, setUserData, language, settings, loginForm} = this.props;
     const {radius_realms} = settings;
     const {username, password, errors} = this.state;
+    const isEmailLogin = loginForm.input_fields.username.type === "email";
 
     // Check email domain typo
-    if (username && username.includes("@")) {
-    const suggestion = checkDomainTypo(username);
+    if (isEmailLogin && username && username.includes("@")) {
+      const suggestion = checkDomainTypo(username);
 
-    if (suggestion) {
-    this.setState({
-      errors: {
-        ...errors,
-        username: t`Please recheck your email. Did you mean ${suggestion}?`,
-      },
-     });
-     setLoading(false);
-     return;
-    }
+      if (suggestion) {
+        this.setState({
+          errors: {
+            ...errors,
+            username: t`Please recheck your email. Did you mean ${suggestion}?`,
+          },
+        });
+        setLoading(false);
+        return;
+      }
     }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@client/components/login/login.js` around lines 211 - 225, Only run the
domain-typo suggestion for actual email logins: guard the
checkDomainTypo(username) branch so it executes only when the current login flow
is the email/password flow (e.g. when login method/state indicates "email" or
when the submit path for radius/realm is not selected), or move the block to
after the radius/realm-submit branching; keep the same behavior for updating
setState({errors: {...errors, username: t`Please recheck your email. Did you
mean ${suggestion}?`}}) and setLoading(false) but skip this rewrite for
non-email username formats to avoid rewriting real realm-style usernames that
contain "@".

@@ -1,5 +1,6 @@
/* eslint-disable camelcase */
import "./index.css";
import { checkDomainTypo } from "../../utils/check-domain-typo";
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Reorder this import to satisfy import/order.

../../utils/check-domain-typo needs to be placed after the ttag import to match the current lint configuration.

🧰 Tools
🪛 ESLint

[error] 3-3: ../../utils/check-domain-typo import should occur after import of ttag

(import/order)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@client/components/registration/registration.js` at line 3, Move the import of
checkDomainTypo so it comes after the ttag import to satisfy import/order:
locate the current import statement "import { checkDomainTypo } from
\"../../utils/check-domain-typo\";" in registration.js and reposition it below
the ttag import (the import that brings in ttag functions), keeping the same
named import and preserving existing formatting; run the linter to confirm the
ordering error is resolved.

Comment on lines +143 to +149
if (suggestion) {
this.setState({
errors: {
...errors,
email: t`Please recheck your email. Did you mean ${suggestion}?`,
},
});
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Add this new msgid to the translation catalogs.

This new t\Please recheck your email. Did you mean ${suggestion}?`string is not present ini18n/en.poorclient/test-translation.json, so the new validation copy will stay out of sync with the locale/test fixtures. The same msgid is also introduced in client/components/login/login.js` Line 219.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@client/components/registration/registration.js` around lines 143 - 149, The
new interpolated message t`Please recheck your email. Did you mean
${suggestion}?` (introduced in registration.js and also in
client/components/login/login.js) is missing from the translation catalogs; add
the exact msgid to i18n/en.po and to client/test-translation.json (using the
same English source string with a placeholder for ${suggestion}) so translations
and test fixtures stay in sync, and ensure the entry key/text matches the
template punctuation and spacing exactly.

Comment thread client/utils/check-domain-typo.js Outdated
Comment on lines +22 to +36
export function checkDomainTypo(email) {
if (!email || !email.includes("@")) return null;

const parts = email.split("@");
if (parts.length !== 2) return null;

const name = parts[0];
const domain = parts[1].toLowerCase();

if (TYPO_MAP[domain]) {
return `${name}@${TYPO_MAP[domain]}`;
}

return null;
} No newline at end of file
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix the lint blockers in this new module.

This file currently fails the existing lint rules: import/prefer-default-export on the single export and eol-last at EOF. Either switch this helper to a default export and update its consumers, or explicitly suppress the rule for this file, then add the trailing newline so CI stays green.

🧰 Tools
🪛 ESLint

[error] 22-36: Prefer default export on a file with single export.

(import/prefer-default-export)


[error] 36-36: Newline required at end of file but not found.

(eol-last)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@client/utils/check-domain-typo.js` around lines 22 - 36, The file exports a
single named function checkDomainTypo which triggers
import/prefer-default-export and also misses a trailing newline; fix by either
converting the export to a default export (export default checkDomainTypo) and
updating all callers to import checkDomainTypo from the module as the default,
or keep the named export and add an eslint-disable-next-line comment to suppress
import/prefer-default-export at the top of the file; in both cases ensure the
file ends with a single trailing newline to satisfy eol-last.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
client/components/registration/registration.js (1)

114-151: ⚠️ Potential issue | 🟠 Major

Registration still submits typoed emails unchanged.

On Lines 141-151, the only client-side guard before submission is the password confirmation check. email is then copied into postData and posted verbatim, so common provider typos will not trigger the correction flow requested in issue #1044.

Proposed fix
+import {checkDomainTypo} from "../../utils/check-domain-typo";
+
  handleSubmit(event) {
    const {setLoading} = this.context;
    event.preventDefault();
    const {orgSlug, authenticate, settings, language, setUserData, navigate} =
      this.props;
    const {
      phone_number,
      email,
      username,
      first_name,
      last_name,
      birth_date,
      location,
      password1,
      password2,
      errors,
      selectedPlan,
      plans,
      tax_number,
      street,
      city,
      zipcode,
      country,
    } = this.state;
+
+    const suggestion = checkDomainTypo(email);
+    if (suggestion) {
+      this.setState({
+        errors: {
+          ...errors,
+          email: t`Please recheck your email. Did you mean ${suggestion}?`,
+        },
+      });
+      return false;
+    }
 
     if (password1 !== password2) {
       this.setState({
         errors: {
           password2: t`PWD_CNF_ERR`,
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@client/components/registration/registration.js` around lines 114 - 151, The
handleSubmit function currently sends this.state.email verbatim; update
handleSubmit to validate and normalize the email before building postData: call
the existing email-suggestion/normalization utility (or implement a simple
provider-typo checker) on this.state.email, and if a suggestion is returned
setState to update email (or present the suggestion and halt submission) so
postData uses the corrected address; ensure the check runs after the password
match block and before constructing postData/using registerApiUrl so
postData.email is never the typoed value.
client/components/login/login.js (1)

204-223: ⚠️ Potential issue | 🟠 Major

Reintroduce the email-typo gate in the login submit path.

On Lines 204-223, handleSubmit goes straight to the RADIUS handoff or API call without checking for known email-domain typos first. As written, user@gmal.com/user@gmial.com still submit unchanged from this component, so the behavior described in issue #1044 cannot be enforced here.

Proposed fix
+import {checkDomainTypo} from "../../utils/check-domain-typo";
+
  handleSubmit(event, sesame_token = null) {
    const {setLoading} = this.context;
    if (event) event.preventDefault();
-    const {orgSlug, setUserData, language, settings} = this.props;
+    const {orgSlug, setUserData, language, settings, loginForm} = this.props;
     const {radius_realms} = settings;
     const {username, password, errors} = this.state;
+    const isEmailLogin = loginForm.input_fields.username.type === "email";
+
+    if (isEmailLogin && username.includes("@")) {
+      const suggestion = checkDomainTypo(username);
+      if (suggestion) {
+        this.setState({
+          errors: {
+            ...errors,
+            username: t`Please recheck your email. Did you mean ${suggestion}?`,
+          },
+        });
+        return;
+      }
+    }
 
     const url = loginApiUrl(orgSlug);
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@client/components/login/login.js` around lines 204 - 223, handleSubmit
currently proceeds to RADIUS or API submission without running the email-typo
gate; add a check after extracting username (and before the radius_realms branch
and any submission) that detects known email-domain typos and invokes the
existing typo-handling flow (e.g. call a helper like checkEmailTypo(username) or
this.handleEmailTypoGate(username)), and if that helper returns/handles the
submission, return early so the corrected/confirmed email is used instead of
submitting user@gmal.com unchanged; place this logic in handleSubmit,
referencing the username state and the realmsRadiusLoginForm branch so it runs
before realmsRadiusLoginForm.current.submit() or any API call.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Outside diff comments:
In `@client/components/login/login.js`:
- Around line 204-223: handleSubmit currently proceeds to RADIUS or API
submission without running the email-typo gate; add a check after extracting
username (and before the radius_realms branch and any submission) that detects
known email-domain typos and invokes the existing typo-handling flow (e.g. call
a helper like checkEmailTypo(username) or this.handleEmailTypoGate(username)),
and if that helper returns/handles the submission, return early so the
corrected/confirmed email is used instead of submitting user@gmal.com unchanged;
place this logic in handleSubmit, referencing the username state and the
realmsRadiusLoginForm branch so it runs before
realmsRadiusLoginForm.current.submit() or any API call.

In `@client/components/registration/registration.js`:
- Around line 114-151: The handleSubmit function currently sends
this.state.email verbatim; update handleSubmit to validate and normalize the
email before building postData: call the existing email-suggestion/normalization
utility (or implement a simple provider-typo checker) on this.state.email, and
if a suggestion is returned setState to update email (or present the suggestion
and halt submission) so postData uses the corrected address; ensure the check
runs after the password match block and before constructing postData/using
registerApiUrl so postData.email is never the typoed value.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 7d0525f7-d70d-4784-a75f-8892befe9d01

📥 Commits

Reviewing files that changed from the base of the PR and between 18d2408 and 0c666f1.

📒 Files selected for processing (2)
  • client/components/login/login.js
  • client/components/registration/registration.js
📜 Review details
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2026-03-06T23:26:11.513Z
Learnt from: nemesifier
Repo: openwisp/openwisp-wifi-login-pages PR: 0
File: :0-0
Timestamp: 2026-03-06T23:26:11.513Z
Learning: In client/components/status/status.js (openwisp-wifi-login-pages), catch blocks deliberately do NOT check `isComponentMounted` — console warnings from catch paths are considered harmless. Only real memory leaks (timers, event listeners) and "setState on unmounted" in success paths are fixed. The maintainer (nemesifier) explicitly wants to avoid over-engineering with defensive checks in every catch block.

Applied to files:

  • client/components/login/login.js

const {radius_realms} = settings;
const {username, password, errors} = this.state;


Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WARNING: This line contains only whitespace characters (trailing spaces). It should be an empty line or removed entirely.

Suggested change

/* eslint-disable camelcase */
import "./index.css";


Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WARNING: Extra blank line added between import "./index.css"; and import axios from "axios";. This adds unnecessary whitespace and doesn't follow the existing import grouping style.

Suggested change

country,
} = this.state;


Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WARNING: This line contains only whitespace characters (trailing spaces). It should be an empty line or removed entirely.

Suggested change

@openwisp-companion
Copy link
Copy Markdown

openwisp-companion Bot commented Mar 8, 2026

Prettier Code Style Failures

Hello @VaibhavSingh2006 and @stktyagi,
(Analysis for commit 6e24e48)

Failures & Remediation

  1. Code Style/QA:
    • Explanation: The CI job failed because Prettier detected code style issues in two files: client/components/login/login.js and client/components/registration/registration.js. The output indicates that these files are not formatted according to Prettier's rules.
    • Remediation: To fix this, please run the following command in your local environment:
      openwisp-qa-format
      This command will automatically format the files according to the project's Prettier configuration, resolving these style violations.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[bug] Weak Email Validation Pattern in Registration and Login Forms

2 participants