From 6abd88b8f13cc99dcc806a477ff5e2c228379f32 Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Fri, 8 May 2026 09:44:00 +0530 Subject: [PATCH] Type storage cache control config --- app/controllers/shared/api.php | 27 +++++++++--------- app/init/resources.php | 7 ++--- .../Modules/Storage/Config/CacheControl.php | 28 +++++++++++++++++++ .../Http/Buckets/Files/Preview/Get.php | 23 +++++++-------- 4 files changed, 57 insertions(+), 28 deletions(-) create mode 100644 src/Appwrite/Platform/Modules/Storage/Config/CacheControl.php diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index edbf2a871d..4e4ccc4b52 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -19,6 +19,7 @@ use Appwrite\Event\Webhook; use Appwrite\Extend\Exception; use Appwrite\Extend\Exception as AppwriteException; use Appwrite\Functions\EventProcessor; +use Appwrite\Platform\Modules\Storage\Config\CacheControl; use Appwrite\SDK\Method; use Appwrite\Usage\Context; use Appwrite\Utopia\Database\Documents\User; @@ -706,19 +707,19 @@ Http::init() $cache->save($key, $data); } - $cacheControl = $cacheControlForStorage([ - 'route' => $route, - 'source' => 'cache', - 'project' => $project, - 'user' => $user, - 'bucket' => $bucket, - 'file' => $file, - 'fileSecurity' => $fileSecurity, - 'resourceToken' => $resourceToken, - 'cacheLog' => $cacheLog, - 'maxAge' => $timestamp, - 'isImageTransformation' => $isImageTransformation, - ]); + $cacheControl = $cacheControlForStorage(new CacheControl( + source: CacheControl::SOURCE_CACHE, + project: $project, + user: $user, + bucket: $bucket, + file: $file, + resourceToken: $resourceToken, + maxAge: $timestamp, + isImageTransformation: $isImageTransformation, + fileSecurity: $fileSecurity, + cacheLog: $cacheLog, + route: $route, + )); $response ->addHeader('Cache-Control', $cacheControl) diff --git a/app/init/resources.php b/app/init/resources.php index 341d26dd4c..3142483868 100644 --- a/app/init/resources.php +++ b/app/init/resources.php @@ -9,6 +9,7 @@ use Appwrite\Event\Publisher\Migration as MigrationPublisher; use Appwrite\Event\Publisher\Screenshot as ScreenshotPublisher; use Appwrite\Event\Publisher\StatsResources as StatsResourcesPublisher; use Appwrite\Event\Publisher\Usage as UsagePublisher; +use Appwrite\Platform\Modules\Storage\Config\CacheControl; use Appwrite\Utopia\Database\Documents\User; use Executor\Executor; use Utopia\Abuse\Adapters\TimeLimit\Redis as TimeLimitRedis; @@ -203,10 +204,8 @@ $container->set('cache', function (Group $pools, Telemetry $telemetry) { return $cache; }, ['pools', 'telemetry']); -$container->set('cacheControlForStorage', fn () => function (array $context): string { - $maxAge = $context['maxAge'] ?? 0; - - return \sprintf('private, max-age=%d', \is_int($maxAge) ? $maxAge : 0); +$container->set('cacheControlForStorage', fn () => function (CacheControl $config): string { + return \sprintf('private, max-age=%d', $config->maxAge); }); $container->set('redis', function () { diff --git a/src/Appwrite/Platform/Modules/Storage/Config/CacheControl.php b/src/Appwrite/Platform/Modules/Storage/Config/CacheControl.php new file mode 100644 index 0000000000..643d765da5 --- /dev/null +++ b/src/Appwrite/Platform/Modules/Storage/Config/CacheControl.php @@ -0,0 +1,28 @@ + 'action', - 'project' => $project, - 'user' => $user, - 'bucket' => $bucket, - 'file' => $file, - 'fileSecurity' => $fileSecurity, - 'resourceToken' => $resourceToken, - 'maxAge' => $maxAge, - 'isImageTransformation' => true, - ]); + $cacheControl = $cacheControlForStorage(new CacheControl( + source: CacheControl::SOURCE_ACTION, + project: $project, + user: $user, + bucket: $bucket, + file: $file, + resourceToken: $resourceToken, + maxAge: $maxAge, + isImageTransformation: true, + fileSecurity: $fileSecurity, + )); $response ->addHeader('Cache-Control', $cacheControl)