diff --git a/app/app.php b/app/app.php index 7ab147225b..993ba191f0 100644 --- a/app/app.php +++ b/app/app.php @@ -52,7 +52,7 @@ $clients = array_unique(array_merge($clientsConsole, array_map(function ($node) return false; })))); -$utopia->init(function () use ($utopia, $request, $response, &$user, $project, $roles, $webhook, $audit, $usage, $clients) { +$utopia->init(function () use ($utopia, $request, $response, &$user, $project, $console, $roles, $webhook, $audit, $usage, $clients) { $route = $utopia->match($request); @@ -98,7 +98,7 @@ $utopia->init(function () use ($utopia, $request, $response, &$user, $project, $ * Skip this check for non-web platforms which are not requiredto send an origin header */ $origin = $request->getServer('HTTP_ORIGIN', $request->getServer('HTTP_REFERER', '')); - $originValidator = new Origin($project->getAttribute('platforms', [])); + $originValidator = new Origin(array_merge($project->getAttribute('platforms', []), $console->getAttribute('platforms', []))); if(!$originValidator->isValid($origin) && in_array($request->getMethod(), [Request::METHOD_POST, Request::METHOD_PUT, Request::METHOD_PATCH, Request::METHOD_DELETE]) diff --git a/src/Appwrite/Network/Validators/Origin.php b/src/Appwrite/Network/Validators/Origin.php index b3ba4100cd..4e946e885d 100644 --- a/src/Appwrite/Network/Validators/Origin.php +++ b/src/Appwrite/Network/Validators/Origin.php @@ -39,9 +39,6 @@ class Origin extends Validator * @var array */ protected $clients = [ - APP_DOMAIN, - 'localhost', - 'appwrite.test', ]; /** @@ -89,7 +86,7 @@ class Origin extends Validator } return 'Inavlid Origin. Register your new client ('.$this->host.') as a new ' - .$this->platforms[$this->client].' platform on your '.APP_NAME.' console'; + .$this->platforms[$this->client].' platform on your project console'; } /** diff --git a/tests/unit/Network/Validators/OriginTest.php b/tests/unit/Network/Validators/OriginTest.php new file mode 100644 index 0000000000..223a976063 --- /dev/null +++ b/tests/unit/Network/Validators/OriginTest.php @@ -0,0 +1,65 @@ + 'platforms', + 'name' => 'Production', + 'type' => 'web', + 'hostname' => 'appwrite.io', + ], + [ + '$collection' => 'platforms', + 'name' => 'Development', + 'type' => 'web', + 'hostname' => 'appwrite.test', + ], + [ + '$collection' => 'platforms', + 'name' => 'Localhost', + 'type' => 'web', + 'hostname' => 'localhost', + ], + ]); + + $this->assertEquals($validator->isValid('https://localhost'), true); + $this->assertEquals($validator->isValid('http://localhost'), true); + $this->assertEquals($validator->isValid('http://localhost:80'), true); + + $this->assertEquals($validator->isValid('https://appwrite.io'), true); + $this->assertEquals($validator->isValid('http://appwrite.io'), true); + $this->assertEquals($validator->isValid('http://appwrite.io:80'), true); + + $this->assertEquals($validator->isValid('https://appwrite.test'), true); + $this->assertEquals($validator->isValid('http://appwrite.test'), true); + $this->assertEquals($validator->isValid('http://appwrite.test:80'), true); + + $this->assertEquals($validator->isValid('https://example.com'), false); + $this->assertEquals($validator->isValid('http://example.com'), false); + $this->assertEquals($validator->isValid('http://example.com:80'), false); + + $this->assertEquals($validator->isValid('appwrite-ios://com.company.appname'), false); + $this->assertEquals($validator->getDescription(), 'Inavlid Origin. Register your new client (com.company.appname) as a new iOS platform on your project console'); + + $this->assertEquals($validator->isValid('appwrite-android://com.company.appname'), false); + $this->assertEquals($validator->getDescription(), 'Inavlid Origin. Register your new client (com.company.appname) as a new Android platform on your project console'); + + $this->assertEquals($validator->isValid('appwrite-macos://com.company.appname'), false); + $this->assertEquals($validator->getDescription(), 'Inavlid Origin. Register your new client (com.company.appname) as a new macOS platform on your project console'); + + $this->assertEquals($validator->isValid('appwrite-linux://com.company.appname'), false); + $this->assertEquals($validator->getDescription(), 'Inavlid Origin. Register your new client (com.company.appname) as a new Linux platform on your project console'); + + $this->assertEquals($validator->isValid('appwrite-windows://com.company.appname'), false); + $this->assertEquals($validator->getDescription(), 'Inavlid Origin. Register your new client (com.company.appname) as a new Windows platform on your project console'); + + } +} \ No newline at end of file