avatarService = $avatarService; $this->uid = $UserId; } /** * @NoAdminRequired * @NoCSRFRequired * * @param string $email * @return JSONResponse */ #[TrapError] public function url(string $email): JSONResponse { if (empty($email)) { return new JSONResponse([], Http::STATUS_BAD_REQUEST); } if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { return new JSONResponse([], Http::STATUS_BAD_REQUEST); } $avatar = $this->avatarService->getAvatar($email, $this->uid); if (is_null($avatar)) { // No avatar found $response = new JSONResponse([], Http::STATUS_NO_CONTENT); // Debounce this a bit // (cache for one day) $response->cacheFor(24 * 60 * 60, false, true); return $response; } $response = new JSONResponse($avatar); // Let the browser cache this for a week $response->cacheFor(7 * 24 * 60 * 60, false, true); return $response; } /** * @NoAdminRequired * @NoCSRFRequired * * @param string $email * @return Response */ #[TrapError] public function image(string $email): Response { if (empty($email)) { return new JSONResponse([], Http::STATUS_BAD_REQUEST); } $imageData = $this->avatarService->getAvatarImage($email, $this->uid); [$avatar, $image] = $imageData; if (is_null($imageData) || !$avatar->isExternal()) { // This could happen if the cache invalidated meanwhile return $this->noAvatarFoundResponse(); } $resp = new AvatarDownloadResponse($image); $resp->addHeader('Content-Type', $avatar->getMime()); // Let the browser cache this for a week $resp->cacheFor(7 * 24 * 60 * 60, false, true); return $resp; } private function noAvatarFoundResponse(): Response { $response = new Response(); $response->setStatus(Http::STATUS_NOT_FOUND); // Clear cache $response->cacheFor(0); return $response; } }