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])?$`) )