From 66148f7b542a5500a11c9df21153f5110c10c24c Mon Sep 17 00:00:00 2001 From: Hemachandar Date: Fri, 23 Jan 2026 13:40:04 +0530 Subject: [PATCH 1/3] Implement `ApexDomain` validator --- src/Domains/Validator/ApexDomain.php | 39 +++++++++++++++++++++++++++ tests/Validator/ApexDomainTest.php | 40 ++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 src/Domains/Validator/ApexDomain.php create mode 100644 tests/Validator/ApexDomainTest.php diff --git a/src/Domains/Validator/ApexDomain.php b/src/Domains/Validator/ApexDomain.php new file mode 100644 index 0000000..45fd65c --- /dev/null +++ b/src/Domains/Validator/ApexDomain.php @@ -0,0 +1,39 @@ +getApex() === $value; + } +} \ No newline at end of file diff --git a/tests/Validator/ApexDomainTest.php b/tests/Validator/ApexDomainTest.php new file mode 100644 index 0000000..296548c --- /dev/null +++ b/tests/Validator/ApexDomainTest.php @@ -0,0 +1,40 @@ +domain = new ApexDomain(); + } + + public function tearDown(): void + { + $this->domain = null; + } + + public function testIsValid(): void + { + // Description + $this->assertEquals('Value must be a public apex domain', $this->domain->getDescription()); + + // Valid apex domains + $this->assertTrue($this->domain->isValid('example.com')); + $this->assertTrue($this->domain->isValid('google.com')); + $this->assertTrue($this->domain->isValid('bbc.co.uk')); + $this->assertTrue($this->domain->isValid('appwrite.io')); + $this->assertTrue($this->domain->isValid('usa.gov')); + $this->assertTrue($this->domain->isValid('stanford.edu')); + + // Invalid apex domains + $this->assertFalse($this->domain->isValid('blog.bbc.co.uk')); + $this->assertFalse($this->domain->isValid('www.google.com')); + $this->assertFalse($this->domain->isValid('test.usa.gov')); + $this->assertFalse($this->domain->isValid('test.com.test')); + } +} \ No newline at end of file From 870021d802c994a82a454ea096a63d7cbd29c9b1 Mon Sep 17 00:00:00 2001 From: Hemachandar Date: Fri, 23 Jan 2026 13:51:43 +0530 Subject: [PATCH 2/3] feedback --- src/Domains/Validator/ApexDomain.php | 11 ++++++----- tests/Validator/ApexDomainTest.php | 6 +++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/Domains/Validator/ApexDomain.php b/src/Domains/Validator/ApexDomain.php index 45fd65c..dc25c16 100644 --- a/src/Domains/Validator/ApexDomain.php +++ b/src/Domains/Validator/ApexDomain.php @@ -3,7 +3,6 @@ namespace Utopia\Domains\Validator; use Utopia\Domains\Domain; -use Utopia\Domains\Validator\PublicDomain; /** * @@ -27,13 +26,15 @@ public function getDescription(): string */ public function isValid($value): bool { - $valid = parent::isValid($value); + if (filter_var($value, FILTER_VALIDATE_URL)) { + $value = parse_url($value, PHP_URL_HOST); + } - if (!$valid) { - return $valid; + if (!parent::isValid($value)) { + return false; } $domain = new Domain($value); return $domain->getApex() === $value; } -} \ No newline at end of file +} diff --git a/tests/Validator/ApexDomainTest.php b/tests/Validator/ApexDomainTest.php index 296548c..ac5eb86 100644 --- a/tests/Validator/ApexDomainTest.php +++ b/tests/Validator/ApexDomainTest.php @@ -22,7 +22,7 @@ public function testIsValid(): void { // Description $this->assertEquals('Value must be a public apex domain', $this->domain->getDescription()); - + // Valid apex domains $this->assertTrue($this->domain->isValid('example.com')); $this->assertTrue($this->domain->isValid('google.com')); @@ -30,11 +30,11 @@ public function testIsValid(): void $this->assertTrue($this->domain->isValid('appwrite.io')); $this->assertTrue($this->domain->isValid('usa.gov')); $this->assertTrue($this->domain->isValid('stanford.edu')); - + // Invalid apex domains $this->assertFalse($this->domain->isValid('blog.bbc.co.uk')); $this->assertFalse($this->domain->isValid('www.google.com')); $this->assertFalse($this->domain->isValid('test.usa.gov')); $this->assertFalse($this->domain->isValid('test.com.test')); } -} \ No newline at end of file +} From 471a41186e934aebd28c4c01a62672017d1e01b1 Mon Sep 17 00:00:00 2001 From: Hemachandar Date: Fri, 23 Jan 2026 13:54:38 +0530 Subject: [PATCH 3/3] url test --- tests/Validator/ApexDomainTest.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/Validator/ApexDomainTest.php b/tests/Validator/ApexDomainTest.php index ac5eb86..00d6d56 100644 --- a/tests/Validator/ApexDomainTest.php +++ b/tests/Validator/ApexDomainTest.php @@ -30,11 +30,13 @@ public function testIsValid(): void $this->assertTrue($this->domain->isValid('appwrite.io')); $this->assertTrue($this->domain->isValid('usa.gov')); $this->assertTrue($this->domain->isValid('stanford.edu')); + $this->assertTrue($this->domain->isValid('http://google.com')); // Invalid apex domains $this->assertFalse($this->domain->isValid('blog.bbc.co.uk')); $this->assertFalse($this->domain->isValid('www.google.com')); $this->assertFalse($this->domain->isValid('test.usa.gov')); $this->assertFalse($this->domain->isValid('test.com.test')); + $this->assertFalse($this->domain->isValid('http://www.google.com')); } }