From 64d2ecee5930de2c26993c3daa2fd99285915d16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89mile=20R=C3=A9?= Date: Mon, 15 Dec 2025 10:28:07 +0100 Subject: [PATCH] Add email not blacklisted validator MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Émile Ré --- pkg/validator/validator_email.go | 46 +++++++++++++++++++++++++++++++ pkg/validator/validator_format.go | 1 - 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/pkg/validator/validator_email.go b/pkg/validator/validator_email.go index 47f2da9cc..f653069f9 100644 --- a/pkg/validator/validator_email.go +++ b/pkg/validator/validator_email.go @@ -1 +1,47 @@ package validator + +import ( + _ "embed" + "strings" +) + +var ( + //go:embed data/disposable-email-domains/disposable_email_blocklist.conf + disposableEmailsRaw []byte + testEmails = []string{ + "acme.com", + "acme.net", + "acme.org", + "ethereal.email", + "example.com", + "example.net", + "example.org", + "mailhog.local", + "mailslurp.com", + "test.com", + "test.net", + "test.org", + "localhost.localdomain", + } + blacklistedEmails = append( + strings.Split(strings.TrimSpace(string(disposableEmailsRaw)), "\n"), + testEmails..., + ) +) + +func NotBlacklisted() ValidatorFunc { + notOneOfSlice := NotOneOfSlice(blacklistedEmails) + + return func(value any) *ValidationError { + err := notOneOfSlice(value) + + if err == nil { + return newValidationError( + ErrorCodeInvalidEnum, + "must not be blacklisted", + ) + } + + return nil + } +} diff --git a/pkg/validator/validator_format.go b/pkg/validator/validator_format.go index 8214a0e8b..9f0baacbf 100644 --- a/pkg/validator/validator_format.go +++ b/pkg/validator/validator_format.go @@ -22,7 +22,6 @@ import ( ) var ( - emailRegex = regexp.MustCompile(`^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$`) uuidRegex = regexp.MustCompile(`^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$`) domainRegex = regexp.MustCompile(`^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)*[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$`) )