From 949eacddc5d3fde34c7cfa9a4e66588a29527dbe Mon Sep 17 00:00:00 2001 From: Khushboo Verma <43381712+vermakhushboo@users.noreply.github.com> Date: Wed, 3 Jan 2024 18:21:38 +0530 Subject: [PATCH 1/3] Allow certain domains to pass public domain validation check --- src/Domains/Validator/PublicDomain.php | 23 ++++++++++++++++++----- tests/Validator/PublicDomainTest.php | 23 +++++++++++++++++++++++ 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src/Domains/Validator/PublicDomain.php b/src/Domains/Validator/PublicDomain.php index 3bd96d3..c4c18d0 100644 --- a/src/Domains/Validator/PublicDomain.php +++ b/src/Domains/Validator/PublicDomain.php @@ -12,6 +12,10 @@ */ class PublicDomain extends Validator { + /** + * @var array + */ + protected static $allowedDomains = []; /** * Get Description * @@ -27,7 +31,7 @@ public function getDescription(): string /** * Is valid * - * Validation will pass when $value is a public domain + * Validation will pass when $value is either a known domain or in the list of allowed domains * * @param mixed $value * @return bool @@ -40,11 +44,8 @@ public function isValid($value): bool } $domain = new Domain($value); - if (!$domain->isKnown()) { - return false; - } - return true; + return $domain->isKnown() || in_array($domain->get(), self::$allowedDomains); } /** @@ -70,4 +71,16 @@ public function getType(): string { return self::TYPE_STRING; } + + /** + * Allow domains + * + * Add domains to the allowed domains array + * + * @param array $domains + */ + public static function allow(array $domains): void + { + self::$allowedDomains = array_merge(self::$allowedDomains, $domains); + } } diff --git a/tests/Validator/PublicDomainTest.php b/tests/Validator/PublicDomainTest.php index 9088c6c..20f5e2a 100644 --- a/tests/Validator/PublicDomainTest.php +++ b/tests/Validator/PublicDomainTest.php @@ -21,15 +21,20 @@ public function tearDown(): void public function testIsValid(): void { $this->assertEquals('Value must be a public domain', $this->domain->getDescription()); + // Known public domains $this->assertEquals(true, $this->domain->isValid('example.com')); $this->assertEquals(true, $this->domain->isValid('google.com')); $this->assertEquals(true, $this->domain->isValid('bbc.co.uk')); $this->assertEquals(true, $this->domain->isValid('appwrite.io')); $this->assertEquals(true, $this->domain->isValid('usa.gov')); $this->assertEquals(true, $this->domain->isValid('stanford.edu')); + + // URLs $this->assertEquals(true, $this->domain->isValid('http://google.com')); $this->assertEquals(true, $this->domain->isValid('http://www.google.com')); $this->assertEquals(true, $this->domain->isValid('https://example.com')); + + // Private domains $this->assertEquals(false, $this->domain->isValid('localhost')); $this->assertEquals(false, $this->domain->isValid('http://localhost')); $this->assertEquals(false, $this->domain->isValid('sub.demo.localhost')); @@ -39,4 +44,22 @@ public function testIsValid(): void $this->assertEquals(false, $this->domain->isValid('wiki.team.local')); $this->assertEquals(false, $this->domain->isValid('example.test')); } + + public function testAllowDomains(): void + { + // Adding localhost to allowed domains + PublicDomain::allow(['localhost']); + + // Now localhost should be valid + $this->assertEquals(true, $this->domain->isValid('localhost')); + $this->assertEquals(true, $this->domain->isValid('http://localhost')); + $this->assertEquals(false, $this->domain->isValid('test.app.internal')); + + // Adding more domains to allowed domains + PublicDomain::allow(['test.app.internal', 'home.local']); + + // Now these domains should be valid + $this->assertEquals(true, $this->domain->isValid('test.app.internal')); + $this->assertEquals(true, $this->domain->isValid('home.local')); + } } From c7ac51b966a188773a586e6ef7167254c2d4bdd5 Mon Sep 17 00:00:00 2001 From: Khushboo Verma <43381712+vermakhushboo@users.noreply.github.com> Date: Wed, 3 Jan 2024 18:40:46 +0530 Subject: [PATCH 2/3] Update src/Domains/Validator/PublicDomain.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Matej Bačo --- src/Domains/Validator/PublicDomain.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Domains/Validator/PublicDomain.php b/src/Domains/Validator/PublicDomain.php index c4c18d0..e10dafc 100644 --- a/src/Domains/Validator/PublicDomain.php +++ b/src/Domains/Validator/PublicDomain.php @@ -81,6 +81,6 @@ public function getType(): string */ public static function allow(array $domains): void { - self::$allowedDomains = array_merge(self::$allowedDomains, $domains); + self::$allowedDomains[] = $domains; } } From a8f3f772ae526ccddca3a7d969b42ecc7050ba31 Mon Sep 17 00:00:00 2001 From: Khushboo Verma <43381712+vermakhushboo@users.noreply.github.com> Date: Wed, 3 Jan 2024 19:27:29 +0530 Subject: [PATCH 3/3] Revert change --- src/Domains/Validator/PublicDomain.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Domains/Validator/PublicDomain.php b/src/Domains/Validator/PublicDomain.php index e10dafc..c4c18d0 100644 --- a/src/Domains/Validator/PublicDomain.php +++ b/src/Domains/Validator/PublicDomain.php @@ -81,6 +81,6 @@ public function getType(): string */ public static function allow(array $domains): void { - self::$allowedDomains[] = $domains; + self::$allowedDomains = array_merge(self::$allowedDomains, $domains); } }