From 6c6c71484d72a10666dc02ef4fdf250e73e8a13f Mon Sep 17 00:00:00 2001 From: Eldad Fux Date: Sun, 19 Oct 2025 22:01:27 +0100 Subject: [PATCH] refactor: replace disposable email validation logic with Utopia Emails library - Introduced the EmailNotDisposable validator from the Utopia Emails library for improved disposable email validation in the account API. - Removed the deprecated disposable emails configuration loading from the config files to streamline the codebase. --- app/controllers/api/account.php | 11 +++++------ app/init/configs.php | 1 - 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 3a4858534b..c215aea3d7 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -21,6 +21,7 @@ use Appwrite\Event\StatsUsage; use Appwrite\Extend\Exception; use Appwrite\Hooks\Hooks; use Utopia\Emails\Validator\Email; +use Utopia\Emails\Validator\EmailNotDisposable; use Appwrite\Network\Validator\Redirect; use Appwrite\OpenSSL\OpenSSL; use Appwrite\SDK\AuthType; @@ -371,9 +372,8 @@ App::post('/v1/account') } if (($plan['supportsDisposableEmailValidation'] ?? false) && ($project->getAttribute('auths', [])['disposableEmails'] ?? false)) { - $disposableEmails = Config::getParam('disposableEmails', []); - $emailDomain = substr(strrchr($email, "@"), 1); - if (isset($disposableEmails[$emailDomain])) { + $emailNotDisposableValidator = new EmailNotDisposable(); + if (!$emailNotDisposableValidator->isValid($email)) { throw new Exception(Exception::USER_EMAIL_DISPOSABLE); } } @@ -3079,9 +3079,8 @@ App::patch('/v1/account/email') } if (($plan['supportsDisposableEmailValidation'] ?? false) && ($project->getAttribute('auths', [])['disposableEmails'] ?? false)) { - $disposableEmails = Config::getParam('disposableEmails', []); - $emailDomain = substr(strrchr($email, "@"), 1); - if (isset($disposableEmails[$emailDomain])) { + $emailNotDisposableValidator = new EmailNotDisposable(); + if (!$emailNotDisposableValidator->isValid($email)) { throw new Exception(Exception::USER_EMAIL_DISPOSABLE); } } diff --git a/app/init/configs.php b/app/init/configs.php index 81ef2eb583..7572302919 100644 --- a/app/init/configs.php +++ b/app/init/configs.php @@ -40,4 +40,3 @@ Config::load('storage-outputs', __DIR__ . '/../config/storage/outputs.php'); Config::load('specifications', __DIR__ . '/../config/specifications.php'); Config::load('templates-function', __DIR__ . '/../config/templates/function.php'); Config::load('templates-site', __DIR__ . '/../config/templates/site.php'); -Config::load('disposableEmails', __DIR__ . '/../config/domains/disposable-emails.php'); // (eldad) following cloud camelCase format. Wish we could be consistent with the rest of the codebase.