From a38cf37f8c9c11d862c18aebf98d250f03f71489 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Dubigny?= Date: Wed, 16 Oct 2024 17:30:29 +0200 Subject: [PATCH] feat: add 9business to free email provider + use local free email domain list in 2 services --- src/{services/security => data}/diceware-wordlist-fr-alt.ts | 0 src/{services/did-you-mean => data}/gouvfr-domains.ts | 0 .../did-you-mean => data}/most-used-free-email-domains.ts | 3 ++- src/{services/did-you-mean => data}/other-gouv-domains.ts | 0 src/services/did-you-mean.ts | 6 +++--- src/services/email.ts | 3 ++- src/services/security.ts | 2 +- test/email.test.ts | 1 + 8 files changed, 9 insertions(+), 6 deletions(-) rename src/{services/security => data}/diceware-wordlist-fr-alt.ts (100%) rename src/{services/did-you-mean => data}/gouvfr-domains.ts (100%) rename src/{services/did-you-mean => data}/most-used-free-email-domains.ts (70%) rename src/{services/did-you-mean => data}/other-gouv-domains.ts (100%) diff --git a/src/services/security/diceware-wordlist-fr-alt.ts b/src/data/diceware-wordlist-fr-alt.ts similarity index 100% rename from src/services/security/diceware-wordlist-fr-alt.ts rename to src/data/diceware-wordlist-fr-alt.ts diff --git a/src/services/did-you-mean/gouvfr-domains.ts b/src/data/gouvfr-domains.ts similarity index 100% rename from src/services/did-you-mean/gouvfr-domains.ts rename to src/data/gouvfr-domains.ts diff --git a/src/services/did-you-mean/most-used-free-email-domains.ts b/src/data/most-used-free-email-domains.ts similarity index 70% rename from src/services/did-you-mean/most-used-free-email-domains.ts rename to src/data/most-used-free-email-domains.ts index 2a7dd2c8..99a19faf 100644 --- a/src/services/did-you-mean/most-used-free-email-domains.ts +++ b/src/data/most-used-free-email-domains.ts @@ -1,4 +1,4 @@ -// arbitrary selection of free email provider domains used in municipalities +// arbitrary selection of free email provider domains used by our users export default [ "gmail.com", "orange.fr", @@ -12,5 +12,6 @@ export default [ "yahoo.com", "live.fr", "sfr.fr", + "9business.fr", "laposte.fr", ]; diff --git a/src/services/did-you-mean/other-gouv-domains.ts b/src/data/other-gouv-domains.ts similarity index 100% rename from src/services/did-you-mean/other-gouv-domains.ts rename to src/data/other-gouv-domains.ts diff --git a/src/services/did-you-mean.ts b/src/services/did-you-mean.ts index 6ebce5ff..0cf63507 100644 --- a/src/services/did-you-mean.ts +++ b/src/services/did-you-mean.ts @@ -1,7 +1,7 @@ import { run as spellCheckEmail } from "@zootools/email-spell-checker"; -import gouvfrDomains from "./did-you-mean/gouvfr-domains"; -import mostUsedFreeEmailDomains from "./did-you-mean/most-used-free-email-domains"; -import otherGouvDomains from "./did-you-mean/other-gouv-domains"; +import gouvfrDomains from "../data/gouvfr-domains"; +import mostUsedFreeEmailDomains from "../data/most-used-free-email-domains"; +import otherGouvDomains from "../data/other-gouv-domains"; // Display an email suggestion for most used public domains export const getDidYouMeanSuggestion = (email: string): string => { diff --git a/src/services/email.ts b/src/services/email.ts index d9c4142c..4a78413a 100644 --- a/src/services/email.ts +++ b/src/services/email.ts @@ -5,6 +5,7 @@ import { FEATURE_CONSIDER_ALL_EMAIL_DOMAINS_AS_FREE, FEATURE_CONSIDER_ALL_EMAIL_DOMAINS_AS_NON_FREE, } from "../config/env"; +import mostUsedFreeEmailDomains from "../data/most-used-free-email-domains"; export const isAFreeEmailProvider = (domain: string) => { if (FEATURE_CONSIDER_ALL_EMAIL_DOMAINS_AS_FREE) { @@ -15,7 +16,7 @@ export const isAFreeEmailProvider = (domain: string) => { return false; } - return isFree(domain); + return isFree(domain) || mostUsedFreeEmailDomains.includes(domain); }; export const getEmailDomain = (email: string) => { diff --git a/src/services/security.ts b/src/services/security.ts index 7e418f74..da147904 100644 --- a/src/services/security.ts +++ b/src/services/security.ts @@ -4,9 +4,9 @@ import { customAlphabet, nanoid } from "nanoid/async"; import { parse_host } from "tld-extract"; import { MONCOMPTEPRO_HOST } from "../config/env"; import notificationMessages from "../config/notification-messages"; +import dicewareWordlistFrAlt from "../data/diceware-wordlist-fr-alt"; import type { AmrValue } from "../types/express-session"; import { owaspPasswordStrengthTest } from "./owasp-password-strength-tester"; -import dicewareWordlistFrAlt from "./security/diceware-wordlist-fr-alt"; // TODO compare to https://github.com/anandundavia/manage-users/blob/master/src/api/utils/security.js export const hashPassword = async (plainPassword: string): Promise => { diff --git a/test/email.test.ts b/test/email.test.ts index a3da1c41..dd6921b1 100644 --- a/test/email.test.ts +++ b/test/email.test.ts @@ -29,6 +29,7 @@ describe("usesAFreeEmailProvider", () => { "user@gmail.com", "collectivite@wanadoo.fr", "collectivite@orange.fr", + "serious@9business.fr", ]; emailAddressesThatUsesFreeEmailProviders.forEach((email) => {