From 0fb55f63122860246a64dca47bd1f21ac70c3813 Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Sat, 5 Jul 2025 07:59:52 +0530 Subject: [PATCH 1/4] fix: origin validation for web extensions --- src/Appwrite/Network/Platform.php | 8 ++++++++ src/Appwrite/Network/Validator/Origin.php | 10 +++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Appwrite/Network/Platform.php b/src/Appwrite/Network/Platform.php index d584ec074f..cbfb2c3b99 100644 --- a/src/Appwrite/Network/Platform.php +++ b/src/Appwrite/Network/Platform.php @@ -24,6 +24,10 @@ class Platform public const SCHEME_HTTP = 'http'; public const SCHEME_HTTPS = 'https'; + public const SCHEME_CHROME_EXTENSION = 'chrome-extension'; + public const SCHEME_FIREFOX_EXTENSION = 'moz-extension'; + public const SCHEME_SAFARI_EXTENSION = 'extension'; + public const SCHEME_EDGE_EXTENSION = 'ms-browser-extension'; public const SCHEME_IOS = 'appwrite-ios'; public const SCHEME_MACOS = 'appwrite-macos'; public const SCHEME_WATCHOS = 'appwrite-watchos'; @@ -45,6 +49,10 @@ class Platform self::SCHEME_ANDROID => 'Android', self::SCHEME_WINDOWS => 'Windows', self::SCHEME_LINUX => 'Linux', + self::SCHEME_CHROME_EXTENSION => 'Chrome Extension', + self::SCHEME_FIREFOX_EXTENSION => 'Firefox Extension', + self::SCHEME_SAFARI_EXTENSION => 'Safari Extension', + self::SCHEME_EDGE_EXTENSION => 'Edge Extension', ]; /** diff --git a/src/Appwrite/Network/Validator/Origin.php b/src/Appwrite/Network/Validator/Origin.php index c8d9ee626d..fc58651723 100644 --- a/src/Appwrite/Network/Validator/Origin.php +++ b/src/Appwrite/Network/Validator/Origin.php @@ -42,7 +42,15 @@ class Origin extends Validator $this->scheme = $this->parseScheme($origin); $this->host = strtolower(parse_url($origin, PHP_URL_HOST) ?? ''); - if (in_array($this->scheme, [Platform::SCHEME_HTTP, Platform::SCHEME_HTTPS], true)) { + $webPlatforms = [ + Platform::SCHEME_HTTP, + Platform::SCHEME_HTTPS, + Platform::SCHEME_CHROME_EXTENSION, + Platform::SCHEME_FIREFOX_EXTENSION, + Platform::SCHEME_SAFARI_EXTENSION, + Platform::SCHEME_EDGE_EXTENSION, + ]; + if (in_array($this->scheme, $webPlatforms, true)) { $validator = new Hostname($this->hostnames); return $validator->isValid($this->host); } From 18d30c48d518424b404602ae663724edaf0a2e2c Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Sat, 5 Jul 2025 10:15:18 +0530 Subject: [PATCH 2/4] fix: add missing check for hostname --- src/Appwrite/Network/Validator/Origin.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Appwrite/Network/Validator/Origin.php b/src/Appwrite/Network/Validator/Origin.php index fc58651723..5fc019942d 100644 --- a/src/Appwrite/Network/Validator/Origin.php +++ b/src/Appwrite/Network/Validator/Origin.php @@ -55,7 +55,10 @@ class Origin extends Validator return $validator->isValid($this->host); } - if (!empty($this->scheme) && in_array($this->scheme, $this->schemes, true)) { + if (!empty($this->scheme) && + in_array($this->scheme, $this->schemes, true) && + in_array($this->host, $this->hostnames, true) + ) { return true; } From 9dcb80649fffd4ca687a136b8899b99a510e9b22 Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Sat, 5 Jul 2025 10:18:40 +0530 Subject: [PATCH 3/4] fix: extension for safari --- src/Appwrite/Network/Platform.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Appwrite/Network/Platform.php b/src/Appwrite/Network/Platform.php index cbfb2c3b99..93d0dc6576 100644 --- a/src/Appwrite/Network/Platform.php +++ b/src/Appwrite/Network/Platform.php @@ -26,7 +26,7 @@ class Platform public const SCHEME_HTTPS = 'https'; public const SCHEME_CHROME_EXTENSION = 'chrome-extension'; public const SCHEME_FIREFOX_EXTENSION = 'moz-extension'; - public const SCHEME_SAFARI_EXTENSION = 'extension'; + public const SCHEME_SAFARI_EXTENSION = 'safari-web-extension'; public const SCHEME_EDGE_EXTENSION = 'ms-browser-extension'; public const SCHEME_IOS = 'appwrite-ios'; public const SCHEME_MACOS = 'appwrite-macos'; From 5fffae39d455af3b34ead12dddcd7b48d7c20413 Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Sat, 5 Jul 2025 17:59:01 +0530 Subject: [PATCH 4/4] chore: update naming and add tests --- src/Appwrite/Network/Platform.php | 8 ++++---- src/Appwrite/Network/Validator/Origin.php | 5 +---- tests/unit/Network/Validators/OriginTest.php | 12 ++++++++++++ 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/Appwrite/Network/Platform.php b/src/Appwrite/Network/Platform.php index 93d0dc6576..ea64ff98c1 100644 --- a/src/Appwrite/Network/Platform.php +++ b/src/Appwrite/Network/Platform.php @@ -49,10 +49,10 @@ class Platform self::SCHEME_ANDROID => 'Android', self::SCHEME_WINDOWS => 'Windows', self::SCHEME_LINUX => 'Linux', - self::SCHEME_CHROME_EXTENSION => 'Chrome Extension', - self::SCHEME_FIREFOX_EXTENSION => 'Firefox Extension', - self::SCHEME_SAFARI_EXTENSION => 'Safari Extension', - self::SCHEME_EDGE_EXTENSION => 'Edge Extension', + self::SCHEME_CHROME_EXTENSION => 'Web (Chrome Extension)', + self::SCHEME_FIREFOX_EXTENSION => 'Web (Firefox Extension)', + self::SCHEME_SAFARI_EXTENSION => 'Web (Safari Extension)', + self::SCHEME_EDGE_EXTENSION => 'Web (Edge Extension)', ]; /** diff --git a/src/Appwrite/Network/Validator/Origin.php b/src/Appwrite/Network/Validator/Origin.php index 5fc019942d..fc58651723 100644 --- a/src/Appwrite/Network/Validator/Origin.php +++ b/src/Appwrite/Network/Validator/Origin.php @@ -55,10 +55,7 @@ class Origin extends Validator return $validator->isValid($this->host); } - if (!empty($this->scheme) && - in_array($this->scheme, $this->schemes, true) && - in_array($this->host, $this->hostnames, true) - ) { + if (!empty($this->scheme) && in_array($this->scheme, $this->schemes, true)) { return true; } diff --git a/tests/unit/Network/Validators/OriginTest.php b/tests/unit/Network/Validators/OriginTest.php index 989c06da71..516108bc32 100644 --- a/tests/unit/Network/Validators/OriginTest.php +++ b/tests/unit/Network/Validators/OriginTest.php @@ -94,5 +94,17 @@ class OriginTest extends TestCase $this->assertEquals(false, $validator->isValid('appwrite-windows://com.company.appname')); $this->assertEquals('Invalid Origin. Register your new client (com.company.appname) as a new Windows platform on your project console dashboard', $validator->getDescription()); + + $this->assertEquals(false, $validator->isValid('chrome-extension://com.company.appname')); + $this->assertEquals('Invalid Origin. Register your new client (com.company.appname) as a new Web (Chrome Extension) platform on your project console dashboard', $validator->getDescription()); + + $this->assertEquals(false, $validator->isValid('moz-extension://com.company.appname')); + $this->assertEquals('Invalid Origin. Register your new client (com.company.appname) as a new Web (Firefox Extension) platform on your project console dashboard', $validator->getDescription()); + + $this->assertEquals(false, $validator->isValid('safari-web-extension://com.company.appname')); + $this->assertEquals('Invalid Origin. Register your new client (com.company.appname) as a new Web (Safari Extension) platform on your project console dashboard', $validator->getDescription()); + + $this->assertEquals(false, $validator->isValid('ms-browser-extension://com.company.appname')); + $this->assertEquals('Invalid Origin. Register your new client (com.company.appname) as a new Web (Edge Extension) platform on your project console dashboard', $validator->getDescription()); } }