From 47133a1d4046f04bf38d1ad46e2874c33f19f569 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Ca=C5=82ka?= Date: Mon, 22 Nov 2021 17:18:11 +0100 Subject: [PATCH] Clean up repeating code --- src/Api/Controller/PurgeLSCacheController.php | 3 ++- src/{Utils.php => LSCache.php} | 5 ++++- src/LSCacheHeadersEnum.php | 11 +++++++++++ src/Middleware/LSCacheMiddleware.php | 15 ++++++++------- src/Middleware/LSTagsMiddleware.php | 9 +++++---- src/Middleware/LoginMiddleware.php | 3 ++- src/Middleware/LogoutMiddleware.php | 8 +++++--- src/Middleware/VaryCookieMiddleware.php | 9 ++++++++- 8 files changed, 45 insertions(+), 18 deletions(-) rename src/{Utils.php => LSCache.php} (73%) create mode 100644 src/LSCacheHeadersEnum.php diff --git a/src/Api/Controller/PurgeLSCacheController.php b/src/Api/Controller/PurgeLSCacheController.php index b17d7a0..daa54bf 100644 --- a/src/Api/Controller/PurgeLSCacheController.php +++ b/src/Api/Controller/PurgeLSCacheController.php @@ -2,6 +2,7 @@ namespace ACPL\FlarumCache\Api\Controller; +use ACPL\FlarumCache\LSCacheHeadersEnum; use Flarum\Http\RequestUtil; use Flarum\User\Exception\PermissionDeniedException; use Laminas\Diactoros\Response\EmptyResponse; @@ -19,6 +20,6 @@ public function handle(ServerRequestInterface $request): ResponseInterface RequestUtil::getActor($request)->assertAdmin(); $response = new EmptyResponse(); - return $response->withHeader('X-LiteSpeed-Purge', '*'); + return $response->withHeader(LSCacheHeadersEnum::PURGE, '*'); } } diff --git a/src/Utils.php b/src/LSCache.php similarity index 73% rename from src/Utils.php rename to src/LSCache.php index 52fe050..efee03c 100644 --- a/src/Utils.php +++ b/src/LSCache.php @@ -2,7 +2,10 @@ namespace ACPL\FlarumCache; -class Utils{ +class LSCache +{ + const VARY_COOKIE = 'lscache_vary'; + public static function extractRootRouteName(string $name): string { return explode('.', $name, 2)[0]; diff --git a/src/LSCacheHeadersEnum.php b/src/LSCacheHeadersEnum.php new file mode 100644 index 0000000..4783fda --- /dev/null +++ b/src/LSCacheHeadersEnum.php @@ -0,0 +1,11 @@ +handle($request); $method = $request->getMethod(); - if (!in_array($method, ['GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'DELETE']) || $response->hasHeader('X-LiteSpeed-Cache-Control')) { + if (!in_array($method, ['GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'DELETE']) || $response->hasHeader(LSCacheHeadersEnum::CACHE_CONTROL)) { return $response; } @@ -35,19 +36,19 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface $params = $request->getAttribute('routeParameters'); if ($routeName === 'lscache.csrf') { - return $response->withHeader('X-LiteSpeed-Cache-Control', 'no-cache'); + return $response->withHeader(LSCacheHeadersEnum::CACHE_CONTROL, 'no-cache'); } //Purge cache if (in_array($method, ['POST', 'PUT', 'PATCH', 'DELETE'])) { - if ($response->hasHeader('X-LiteSpeed-Purge')) { + if ($response->hasHeader(LSCacheHeadersEnum::PURGE)) { return $response; } $lscachePurgeString = [$currentRoute]; if (Str::endsWith($routeName, ['.create', '.update', '.delete'])) { - $rootRouteName = Utils::extractRootRouteName($routeName); + $rootRouteName = LSCache::extractRootRouteName($routeName); array_push($lscachePurgeString, "tag=$rootRouteName.index"); if (!empty($params) && !empty($params['id'])) { @@ -77,7 +78,7 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface } } - return $response->withHeader('X-LiteSpeed-Purge', implode(',', $lscachePurgeString)); + return $response->withHeader(LSCacheHeadersEnum::PURGE, implode(',', $lscachePurgeString)); } $lscacheString = []; @@ -96,6 +97,6 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface //TODO user group cache vary https://docs.litespeedtech.com/lscache/devguide/#cache-vary //TODO private cache - return $response->withHeader('X-LiteSpeed-Cache-Control', implode(',', $lscacheString)); + return $response->withHeader(LSCacheHeadersEnum::CACHE_CONTROL, implode(',', $lscacheString)); } } diff --git a/src/Middleware/LSTagsMiddleware.php b/src/Middleware/LSTagsMiddleware.php index 67daf7c..a11c4a2 100644 --- a/src/Middleware/LSTagsMiddleware.php +++ b/src/Middleware/LSTagsMiddleware.php @@ -1,7 +1,8 @@ handle($request); - if (!in_array($request->getMethod(), ['GET', 'HEAD']) || $response->hasHeader('X-LiteSpeed-Tag')) { + if (!in_array($request->getMethod(), ['GET', 'HEAD']) || $response->hasHeader(LSCacheHeadersEnum::TAG)) { return $response; } $routeName = $request->getAttribute('routeName'); - $rootRouteName = Utils::extractRootRouteName($routeName); + $rootRouteName = LSCache::extractRootRouteName($routeName); $params = $request->getAttribute('routeParameters'); @@ -30,6 +31,6 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface $lsTagsString .= ",$rootRouteName" . $id ?: $params['id']; } - return $response->withHeader('X-LiteSpeed-Tag', $lsTagsString); + return $response->withHeader(LSCacheHeadersEnum::TAG, $lsTagsString); } } diff --git a/src/Middleware/LoginMiddleware.php b/src/Middleware/LoginMiddleware.php index 9ef0676..d728737 100644 --- a/src/Middleware/LoginMiddleware.php +++ b/src/Middleware/LoginMiddleware.php @@ -1,6 +1,7 @@ cookie->make('lscache_vary', $session->token(), $this->config['lifetime'] * 60)); + return FigResponseCookies::set($response, $this->cookie->make(LSCache::VARY_COOKIE, $session->token(), $this->config['lifetime'] * 60)); } } diff --git a/src/Middleware/LogoutMiddleware.php b/src/Middleware/LogoutMiddleware.php index f143fb7..b2f4462 100644 --- a/src/Middleware/LogoutMiddleware.php +++ b/src/Middleware/LogoutMiddleware.php @@ -1,6 +1,8 @@ url->to('forum')->route('logout')); $response = $handler->handle($request); if ($request->getUri()->getPath() === $logoutUri->getPath() && $response instanceof RedirectResponse) { - $response = $response->withHeader('X-LiteSpeed-Cache-Control', 'no-cache'); + $response = $response->withHeader(LSCacheHeadersEnum::CACHE_CONTROL, 'no-cache'); return $this->withExpiredVaryCookie($response, $request->getAttribute('session')); } @@ -38,7 +40,7 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface private function withExpiredVaryCookie(Response $response, Session $session): Response { - $response = FigResponseCookies::remove($response, 'lscache_vary'); - return FigResponseCookies::set($response, $this->cookie->make('lscache_vary', $session->token())->expire()); + $response = FigResponseCookies::remove($response, LSCache::VARY_COOKIE); + return FigResponseCookies::set($response, $this->cookie->make(LSCache::VARY_COOKIE, $session->token())->expire()); } } diff --git a/src/Middleware/VaryCookieMiddleware.php b/src/Middleware/VaryCookieMiddleware.php index 72d2024..120569a 100644 --- a/src/Middleware/VaryCookieMiddleware.php +++ b/src/Middleware/VaryCookieMiddleware.php @@ -1,6 +1,8 @@ getAttribute('session'); $response = $handler->handle($request); + $response = $response->withHeader( + LSCacheHeadersEnum::VARY, + "cookie={$this->cookie->getName(LSCache::VARY_COOKIE)},cookie={$this->cookie->getName('remember')}", + ); + $user = RequestUtil::getActor($request); $logoutUri = new Uri($this->url->to('forum')->path('/logout')); @@ -43,6 +50,6 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface private function withVaryCookie(Response $response, Session $session): Response { - return FigResponseCookies::set($response, $this->cookie->make('lscache_vary', $session->token(), $this->config['lifetime'] * 60)); + return FigResponseCookies::set($response, $this->cookie->make(LSCache::VARY_COOKIE, $session->token(), $this->config['lifetime'] * 60)); } }