This commit is contained in:
Yuri Kuznetsov
2025-04-04 13:00:15 +03:00
parent 1894c5cc9a
commit 06bd8ef175
2 changed files with 16 additions and 8 deletions
+14 -3
View File
@@ -76,6 +76,9 @@ class Avatar extends Image
*/
private string $fontFile = 'vendor/lasserafn/php-initial-avatar-generator/src/fonts/OpenSans-Semibold.ttf';
private int $maxAge = 600;
private int $staleWhileRevalidate = 864000;
private function getColor(User $user): string
{
if ($user->getUserName() === SystemUser::NAME) {
@@ -147,9 +150,12 @@ class Avatar extends Image
id: $user->getAvatarId(),
size: $size,
disableAccessCheck: true,
etag: $user->getAvatarId(),
noCache: true,
);
$response->setHeader('Cache-Control', $this->composeCacheControlHeader());
$response->setHeader('Etag', $user->getAvatarId());
return;
}
@@ -192,13 +198,18 @@ class Avatar extends Image
->generate();
$response
->setHeader('Cache-Control', 'max-age=600, stale-while-revalidate=864000')
->setHeader('Cache-Control', $this->composeCacheControlHeader())
->setHeader('Content-Type', 'image/png')
->setHeader('Etag', $etag);
$response->writeBody($image->stream('png', 100));
}
private function composeCacheControlHeader(): string
{
return "max-age=$this->maxAge, stale-while-revalidate=$this->staleWhileRevalidate";
}
/**
* @throws Error
*/
@@ -242,7 +253,7 @@ class Avatar extends Image
$response
->setHeader('Content-Type', 'image/png')
->setHeader('Cache-Control', 'max-age=600, stale-while-revalidate=864000')
->setHeader('Cache-Control', $this->composeCacheControlHeader())
->setHeader('Etag', $etag)
->writeBody($contents);
}
+2 -5
View File
@@ -90,7 +90,7 @@ class Image implements EntryPoint
string $id,
?string $size,
bool $disableAccessCheck = false,
?string $etag = null,
bool $noCache = false,
): void {
$attachment = $this->entityManager->getRDBRepositoryByClass(Attachment::class)->getById($id);
@@ -155,10 +155,7 @@ class Image implements EntryPoint
->setHeader('Content-Length', (string) $fileSize)
->setHeader('Content-Security-Policy', "default-src 'self'");
if ($etag) {
$response->setHeader('Cache-Control', 'max-age=600, stale-while-revalidate=864000');
$response->setHeader('Etag', $etag);
} else {
if (!$noCache) {
$response->setHeader('Cache-Control', 'private, max-age=864000, immutable');
}
}