Skip to content

Commit

Permalink
Clean up repeating code
Browse files Browse the repository at this point in the history
  • Loading branch information
rafaucau committed Nov 22, 2021
1 parent 58575c2 commit 47133a1
Show file tree
Hide file tree
Showing 8 changed files with 45 additions and 18 deletions.
3 changes: 2 additions & 1 deletion src/Api/Controller/PurgeLSCacheController.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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, '*');
}
}
5 changes: 4 additions & 1 deletion src/Utils.php → src/LSCache.php
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down
11 changes: 11 additions & 0 deletions src/LSCacheHeadersEnum.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

namespace ACPL\FlarumCache;

final class LSCacheHeadersEnum
{
const CACHE_CONTROL = 'X-LiteSpeed-Cache-Control';
const PURGE = 'X-LiteSpeed-Purge';
const TAG = 'X-LiteSpeed-Tag';
const VARY = 'X-LiteSpeed-Vary';
}
15 changes: 8 additions & 7 deletions src/Middleware/LSCacheMiddleware.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
<?php
namespace ACPL\FlarumCache\Middleware;

use ACPL\FlarumCache\Utils;
use ACPL\FlarumCache\LSCacheHeadersEnum;
use ACPL\FlarumCache\LSCache;
use Flarum\Http\RequestUtil;
use Flarum\Post\Post;
use Flarum\Settings\SettingsRepositoryInterface;
Expand All @@ -26,7 +27,7 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
$response = $handler->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;
}

Expand All @@ -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'])) {
Expand Down Expand Up @@ -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 = [];
Expand All @@ -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));
}
}
9 changes: 5 additions & 4 deletions src/Middleware/LSTagsMiddleware.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
<?php
namespace ACPL\FlarumCache\Middleware;

use ACPL\FlarumCache\Utils;
use ACPL\FlarumCache\LSCacheHeadersEnum;
use ACPL\FlarumCache\LSCache;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
Expand All @@ -13,12 +14,12 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
{
$response = $handler->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');

Expand All @@ -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);
}
}
3 changes: 2 additions & 1 deletion src/Middleware/LoginMiddleware.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?php
namespace ACPL\FlarumCache\Middleware;

use ACPL\FlarumCache\LSCache;
use Dflydev\FigCookies\FigResponseCookies;
use Flarum\Http\CookieFactory;
use Flarum\Http\UrlGenerator;
Expand Down Expand Up @@ -40,6 +41,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));
}
}
8 changes: 5 additions & 3 deletions src/Middleware/LogoutMiddleware.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
<?php
namespace ACPL\FlarumCache\Middleware;

use ACPL\FlarumCache\LSCacheHeadersEnum;
use ACPL\FlarumCache\LSCache;
use Dflydev\FigCookies\FigResponseCookies;
use Flarum\Http\CookieFactory;
use Flarum\Http\UrlGenerator;
Expand Down Expand Up @@ -29,7 +31,7 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
$logoutUri = new Uri($this->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'));
}

Expand All @@ -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());
}
}
9 changes: 8 additions & 1 deletion src/Middleware/VaryCookieMiddleware.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
<?php
namespace ACPL\FlarumCache\Middleware;

use ACPL\FlarumCache\LSCache;
use ACPL\FlarumCache\LSCacheHeadersEnum;
use Dflydev\FigCookies\FigResponseCookies;
use Flarum\Http\CookieFactory;
use Flarum\Http\RequestUtil;
Expand Down Expand Up @@ -31,6 +33,11 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
$session = $request->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'));
Expand All @@ -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));
}
}

0 comments on commit 47133a1

Please sign in to comment.