diff --git a/platform/php/MailChecker.php b/platform/php/MailChecker.php index fb5a1e33..059e6f85 100644 --- a/platform/php/MailChecker.php +++ b/platform/php/MailChecker.php @@ -41,7 +41,13 @@ public static function isBlacklisted(string $email): bool $parts = explode('@', $email); $domain = end($parts); - foreach (self::allDomainSuffixes($domain) as $domainSuffix) { + return self::isDomainBlocked($domain, true); + } + + public static function isDomainBlocked(string $domain, bool $checkSubdomain): bool + { + $domainSuffixes = $checkSubdomain ? self::allDomainSuffixes($domain) : [$domain]; + foreach ($domainSuffixes as $domainSuffix) { if (isset(self::$blocklist[$domainSuffix])) { return true; } diff --git a/test/platform.php.test.php b/test/platform.php.test.php index 512bdf0f..5c6f9f6f 100644 --- a/test/platform.php.test.php +++ b/test/platform.php.test.php @@ -64,8 +64,9 @@ public function testReturnFalseIfThrowableDomain() public static function provideBlackListTests() { - foreach (array_rand(MailChecker::blacklist(), 1000) as $blacklistedDomain) { - yield [$blacklistedDomain]; + $blacklist = MailChecker::blacklist(); + foreach (array_rand($blacklist, 1000) as $key) { + yield [$blacklist[$key]]; } } @@ -90,4 +91,13 @@ public function testAddCustomDomains() $this->isInvalid('foo@google.com'); $this->isValid('ok@gmail.com'); } + + #[DataProvider('provideBlackListTests')] + public function testIsDomainBlocked($blacklistedDomain) + { + $this->assertEquals(true, MailChecker::isDomainBlocked($blacklistedDomain, true)); + $this->assertEquals(true, MailChecker::isDomainBlocked('subdomain.'.$blacklistedDomain, true)); + $this->assertEquals(true, MailChecker::isDomainBlocked($blacklistedDomain, false)); + $this->assertEquals(false, MailChecker::isDomainBlocked('subdomain.'.$blacklistedDomain, false)); + } }