Type storage cache control config

This commit is contained in:
Chirag Aggarwal
2026-05-08 09:44:00 +05:30
parent 1208aff569
commit 6abd88b8f1
4 changed files with 57 additions and 28 deletions
+14 -13
View File
@@ -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)
+3 -4
View File
@@ -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 () {
@@ -0,0 +1,28 @@
<?php
namespace Appwrite\Platform\Modules\Storage\Config;
use Appwrite\Utopia\Database\Documents\User;
use Utopia\Database\Document;
use Utopia\Http\Route;
final class CacheControl
{
public const SOURCE_ACTION = 'action';
public const SOURCE_CACHE = 'cache';
public function __construct(
public readonly string $source,
public readonly Document $project,
public readonly User $user,
public readonly Document $bucket,
public readonly Document $file,
public readonly Document $resourceToken,
public readonly int $maxAge,
public readonly bool $isImageTransformation,
public readonly ?bool $fileSecurity = null,
public readonly ?Document $cacheLog = null,
public readonly ?Route $route = null,
) {
}
}
@@ -4,6 +4,7 @@ namespace Appwrite\Platform\Modules\Storage\Http\Buckets\Files\Preview;
use Appwrite\Extend\Exception;
use Appwrite\OpenSSL\OpenSSL;
use Appwrite\Platform\Modules\Storage\Config\CacheControl;
use Appwrite\SDK\AuthType;
use Appwrite\SDK\ContentType;
use Appwrite\SDK\Method;
@@ -297,17 +298,17 @@ class Get extends Action
}
$maxAge = 2592000; // 30 days
$cacheControl = $cacheControlForStorage([
'source' => '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)