diff --git a/app/controllers/api/vcs.php b/app/controllers/api/vcs.php index 921a840c0a..d8394a3b4f 100644 --- a/app/controllers/api/vcs.php +++ b/app/controllers/api/vcs.php @@ -236,10 +236,9 @@ $createGitDeployments = function (GitHub $github, string $providerInstallationId $projectId = $project->getId(); $sitesDomain = System::getEnv('_APP_DOMAIN_SITES', ''); - $domain = "{$deploymentId}-{$projectId}.{$sitesDomain}"; + $domain = ID::unique() . "." . $sitesDomain; $ruleId = md5($domain); - - $rule = Authorization::skip( + Authorization::skip( fn () => $dbForPlatform->createDocument('rules', new Document([ '$id' => $ruleId, 'projectId' => $project->getId(), diff --git a/app/init.php b/app/init.php index 585dfc0616..53c190d78e 100644 --- a/app/init.php +++ b/app/init.php @@ -1964,13 +1964,13 @@ App::setResource( App::setResource('previewHostname', function (Request $request, ?Key $apiKey) { $allowed = false; - if(App::isDevelopment()) { + if (App::isDevelopment()) { $allowed = true; - } else if(!is_null($apiKey) && $apiKey->getHostnameOverride() === true) { + } elseif (!is_null($apiKey) && $apiKey->getHostnameOverride() === true) { $allowed = true; } - if($allowed === true) { + if ($allowed === true) { $host = $request->getQuery('appwrite-hostname', $request->getHeader('x-appwrite-hostname', '')); if (!empty($host)) { return $host; diff --git a/composer.lock b/composer.lock index 51535b220d..223a6a7a4e 100644 --- a/composer.lock +++ b/composer.lock @@ -6190,16 +6190,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "2.0.2", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "51087f87dcce2663e1fed4dfd4e56eccd580297e" + "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/51087f87dcce2663e1fed4dfd4e56eccd580297e", - "reference": "51087f87dcce2663e1fed4dfd4e56eccd580297e", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", + "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", "shasum": "" }, "require": { @@ -6231,9 +6231,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.0.2" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0" }, - "time": "2025-02-17T20:25:51+00:00" + "time": "2025-02-19T13:28:12+00:00" }, { "name": "phpstan/phpstan", diff --git a/src/Appwrite/Platform/Modules/Compute/Base.php b/src/Appwrite/Platform/Modules/Compute/Base.php index d31b731407..81e20b240f 100644 --- a/src/Appwrite/Platform/Modules/Compute/Base.php +++ b/src/Appwrite/Platform/Modules/Compute/Base.php @@ -172,14 +172,10 @@ class Base extends Action 'activate' => $activate, ])); - // Preview deployments for sites - $projectId = $project->getId(); - $sitesDomain = System::getEnv('_APP_DOMAIN_SITES', ''); - $domain = "{$deploymentId}-{$projectId}.{$sitesDomain}"; + $domain = ID::unique() . "." . $sitesDomain; $ruleId = md5($domain); - - $rule = Authorization::skip( + Authorization::skip( fn () => $dbForPlatform->createDocument('rules', new Document([ '$id' => $ruleId, 'projectId' => $project->getId(), diff --git a/src/Appwrite/Platform/Modules/Functions/Workers/Builds.php b/src/Appwrite/Platform/Modules/Functions/Workers/Builds.php index 7501b60aae..a8b94666b0 100644 --- a/src/Appwrite/Platform/Modules/Functions/Workers/Builds.php +++ b/src/Appwrite/Platform/Modules/Functions/Workers/Builds.php @@ -740,12 +740,12 @@ class Builds extends Action $configs = [ 'screenshot' => [ 'headers' => [ 'x-appwrite-hostname' => $rule->getAttribute('domain') ], - 'url' => 'http://traefik/', + 'url' => 'http://traefik/?appwrite-preview=1&appwrite-theme=light', 'color' => 'light' ], 'screenshotDark' => [ 'headers' => [ 'x-appwrite-hostname' => $rule->getAttribute('domain') ], - 'url' => 'http://traefik/', + 'url' => 'http://traefik/?appwrite-preview=1&appwrite-theme=dark', 'color' => 'dark' ], ]; diff --git a/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Builds/Create.php b/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Builds/Create.php index c28a0be4e5..c76a4c3ffe 100644 --- a/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Builds/Create.php +++ b/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Builds/Create.php @@ -103,13 +103,10 @@ class Create extends Action ])); // Preview deployments for sites - $projectId = $project->getId(); - $sitesDomain = System::getEnv('_APP_DOMAIN_SITES', ''); - $domain = "{$deploymentId}-{$projectId}.{$sitesDomain}"; + $domain = ID::unique() . "." . $sitesDomain; $ruleId = md5($domain); - - $rule = Authorization::skip( + Authorization::skip( fn () => $dbForPlatform->createDocument('rules', new Document([ '$id' => $ruleId, 'projectId' => $project->getId(), diff --git a/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Create.php b/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Create.php index 38b9e2aeba..fb536a3123 100644 --- a/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Create.php +++ b/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Create.php @@ -228,14 +228,10 @@ class Create extends Action 'type' => $type ])); - // Preview deployments for sites - $projectId = $project->getId(); - $sitesDomain = System::getEnv('_APP_DOMAIN_SITES', ''); - $domain = "{$deploymentId}-{$projectId}.{$sitesDomain}"; + $domain = ID::unique() . "." . $sitesDomain; $ruleId = md5($domain); - - $rule = Authorization::skip( + Authorization::skip( fn () => $dbForPlatform->createDocument('rules', new Document([ '$id' => $ruleId, 'projectId' => $project->getId(), @@ -283,14 +279,10 @@ class Create extends Action 'type' => $type ])); - // Preview deployments for sites - $projectId = $project->getId(); - $sitesDomain = System::getEnv('_APP_DOMAIN_SITES', ''); - $domain = "{$deploymentId}-{$projectId}.{$sitesDomain}"; + $domain = ID::unique() . "." . $sitesDomain; $ruleId = md5($domain); - - $rule = Authorization::skip( + Authorization::skip( fn () => $dbForPlatform->createDocument('rules', new Document([ '$id' => $ruleId, 'projectId' => $project->getId(), diff --git a/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Template/Create.php b/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Template/Create.php index ec75740759..08be94776d 100644 --- a/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Template/Create.php +++ b/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Template/Create.php @@ -139,18 +139,15 @@ class Create extends Base 'activate' => $activate, ])); - // Preview deployments url - $projectId = $project->getId(); - $sitesDomain = System::getEnv('_APP_DOMAIN_SITES', ''); - $previewDomain = "{$deploymentId}-{$projectId}.{$sitesDomain}"; - - $rule = Authorization::skip( + $domain = ID::unique() . "." . $sitesDomain; + $ruleId = md5($domain); + Authorization::skip( fn () => $dbForPlatform->createDocument('rules', new Document([ - '$id' => \md5($previewDomain), + '$id' => $ruleId, 'projectId' => $project->getId(), 'projectInternalId' => $project->getInternalId(), - 'domain' => $previewDomain, + 'domain' => $domain, 'resourceType' => 'deployment', 'resourceId' => $deploymentId, 'resourceInternalId' => $deployment->getInternalId(), diff --git a/tests/e2e/Services/Sites/SitesBase.php b/tests/e2e/Services/Sites/SitesBase.php index 4fcd34572d..4c11e78d76 100644 --- a/tests/e2e/Services/Sites/SitesBase.php +++ b/tests/e2e/Services/Sites/SitesBase.php @@ -51,6 +51,18 @@ trait SitesBase $this->assertEquals('ready', $deployment['body']['status'], 'Deployment status is not ready, deployment: ' . json_encode($deployment['body'], JSON_PRETTY_PRINT)); }, 100000, 500); + // Not === so multipart/form-data works fine too + if (($params['activate'] ?? false) == true) { + $this->assertEventually(function () use ($siteId, $deploymentId) { + $site = $this->client->call(Client::METHOD_GET, '/sites/' . $siteId, array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-key' => $this->getProject()['apiKey'], + ])); + $this->assertEquals($deploymentId, $site['body']['deploymentId'], 'Deployment is not activated, deployment: ' . json_encode($site['body'], JSON_PRETTY_PRINT)); + }, 100000, 500); + } + return $deploymentId; }