From f3204d25207bc67ead344836da4edeae026a953e Mon Sep 17 00:00:00 2001 From: Khushboo Verma Date: Thu, 28 Aug 2025 17:51:37 +0530 Subject: [PATCH] Use branch domain in preview urls in builds worker --- .../Modules/Functions/Workers/Builds.php | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/Appwrite/Platform/Modules/Functions/Workers/Builds.php b/src/Appwrite/Platform/Modules/Functions/Workers/Builds.php index 9547a752ef..18c746e9cd 100644 --- a/src/Appwrite/Platform/Modules/Functions/Workers/Builds.php +++ b/src/Appwrite/Platform/Modules/Functions/Workers/Builds.php @@ -1554,16 +1554,30 @@ class Builds extends Action default => throw new \Exception('Invalid resource type') }; - $rule = Authorization::skip(fn () => $dbForPlatform->findOne('rules', [ - Query::equal("projectInternalId", [$project->getSequence()]), - Query::equal("type", ["deployment"]), - Query::equal("deploymentInternalId", [$deployment->getSequence()]), - ])); - $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') == 'disabled' ? 'http' : 'https'; $previewUrl = match($resource->getCollection()) { 'functions' => '', - 'sites' => !empty($rule) ? ("{$protocol}://" . $rule->getAttribute('domain', '')) : '', + 'sites' => (function () use ($deployment, $project, $dbForPlatform, $protocol, $resource) { + $providerBranch = $deployment->getAttribute('providerBranch', ''); + if (!empty($providerBranch)) { + $sitesDomain = System::getEnv('_APP_DOMAIN_SITES', ''); + $branchPrefix = substr($providerBranch, 0, 16); + if (strlen($providerBranch) > 16) { + $remainingChars = substr($providerBranch, 16); + $branchPrefix .= '-' . substr(hash('sha256', $remainingChars), 0, 7); + } + $resourceProjectHash = substr(hash('sha256', $resource->getId() . $project->getId()), 0, 7); + $domain = "branch-{$branchPrefix}-{$resourceProjectHash}.{$sitesDomain}"; + $ruleId = md5($domain); + + $branchRule = Authorization::skip(fn () => $dbForPlatform->getDocument('rules', $ruleId)); + + if (!empty($branchRule) && !$branchRule->isEmpty()) { + return "{$protocol}://" . $branchRule->getAttribute('domain', ''); + } + } + return ''; + })(), default => throw new \Exception('Invalid resource type') };