Skip to content

Commit

Permalink
Add option to purge specific paths
Browse files Browse the repository at this point in the history
  • Loading branch information
rafaucau committed Jan 12, 2022
1 parent 7758131 commit 6fe6536
Show file tree
Hide file tree
Showing 6 changed files with 39 additions and 89 deletions.
14 changes: 0 additions & 14 deletions .prettierrc.json

This file was deleted.

7 changes: 5 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
{
"name": "acpl/flarum-lscache",
"description": "Speed up your forum on LiteSpeed Web server.",
"description": "Speed up your forum on LiteSpeed Web Server.",
"keywords": [
"flarum"
"flarum",
"LSCache",
"LiteSpeed",
"Cache"
],
"type": "flarum-extension",
"license": "GPL-3.0-or-later",
Expand Down
1 change: 0 additions & 1 deletion js/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
},
"devDependencies": {
"@flarum/prettier-config": "^1.0.0",
"@prettier/plugin-php": "^0.17.6",
"flarum-tsconfig": "^1.0.2",
"prettier": "^2.5.1"
},
Expand Down
61 changes: 0 additions & 61 deletions js/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ __metadata:
resolution: "@acpl/flarum-lscache@workspace:."
dependencies:
"@flarum/prettier-config": ^1.0.0
"@prettier/plugin-php": ^0.17.6
flarum-tsconfig: ^1.0.2
flarum-webpack-config: ^1.0.0
prettier: ^2.5.1
Expand Down Expand Up @@ -1432,19 +1431,6 @@ __metadata:
languageName: node
linkType: hard

"@prettier/plugin-php@npm:^0.17.6":
version: 0.17.6
resolution: "@prettier/plugin-php@npm:0.17.6"
dependencies:
linguist-languages: ^7.5.1
mem: ^8.0.0
php-parser: "git+https://github.com/glayzzle/php-parser.git#27abcb2337ac6450c068ef064982dfabf77916a5"
peerDependencies:
prettier: ^1.15.0 || ^2.0.0
checksum: 869fc7ab212984c0cbcf9ec253c370b6f285716b270771344f310944d0635118d047950610969b521f8dee1ecddd5437e944a268286b6598802e70970366d324
languageName: node
linkType: hard

"@tootallnate/once@npm:1":
version: 1.1.2
resolution: "@tootallnate/once@npm:1.1.2"
Expand Down Expand Up @@ -4004,13 +3990,6 @@ __metadata:
languageName: node
linkType: hard

"linguist-languages@npm:^7.5.1":
version: 7.15.0
resolution: "linguist-languages@npm:7.15.0"
checksum: 2f930295a291997ecf30219246f1bdb915ea53820f37410aacd0effb5a94ab6b1076ab35fa792899ac86b196ab0a9b2c40f2cc021817ccbecd4bd2efc45a1df1
languageName: node
linkType: hard

"loader-runner@npm:^2.4.0":
version: 2.4.0
resolution: "loader-runner@npm:2.4.0"
Expand Down Expand Up @@ -4123,15 +4102,6 @@ __metadata:
languageName: node
linkType: hard

"map-age-cleaner@npm:^0.1.3":
version: 0.1.3
resolution: "map-age-cleaner@npm:0.1.3"
dependencies:
p-defer: ^1.0.0
checksum: cb2804a5bcb3cbdfe4b59066ea6d19f5e7c8c196cd55795ea4c28f792b192e4c442426ae52524e5e1acbccf393d3bddacefc3d41f803e66453f6c4eda3650bc1
languageName: node
linkType: hard

"map-cache@npm:^0.2.2":
version: 0.2.2
resolution: "map-cache@npm:0.2.2"
Expand Down Expand Up @@ -4159,16 +4129,6 @@ __metadata:
languageName: node
linkType: hard

"mem@npm:^8.0.0":
version: 8.1.1
resolution: "mem@npm:8.1.1"
dependencies:
map-age-cleaner: ^0.1.3
mimic-fn: ^3.1.0
checksum: c41bc97f6f82b91899206058989e34bcb1543af40413c2ab59e5a8e97e4f8f2188d62e7bd95b2d575d5b0d823d5034a0f274a0676f6d11a0e0b973898b06c8b1
languageName: node
linkType: hard

"memory-fs@npm:^0.4.1":
version: 0.4.1
resolution: "memory-fs@npm:0.4.1"
Expand Down Expand Up @@ -4236,13 +4196,6 @@ __metadata:
languageName: node
linkType: hard

"mimic-fn@npm:^3.1.0":
version: 3.1.0
resolution: "mimic-fn@npm:3.1.0"
checksum: f7b167f9115b8bbdf2c3ee55dce9149d14be9e54b237259c4bc1d8d0512ea60f25a1b323f814eb1fe8f5a541662804bcfcfff3202ca58df143edb986849d58db
languageName: node
linkType: hard

"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1":
version: 1.0.1
resolution: "minimalistic-assert@npm:1.0.1"
Expand Down Expand Up @@ -4670,13 +4623,6 @@ __metadata:
languageName: node
linkType: hard

"p-defer@npm:^1.0.0":
version: 1.0.0
resolution: "p-defer@npm:1.0.0"
checksum: 4271b935c27987e7b6f229e5de4cdd335d808465604644cb7b4c4c95bef266735859a93b16415af8a41fd663ee9e3b97a1a2023ca9def613dba1bad2a0da0c7b
languageName: node
linkType: hard

"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0":
version: 2.3.0
resolution: "p-limit@npm:2.3.0"
Expand Down Expand Up @@ -4820,13 +4766,6 @@ __metadata:
languageName: node
linkType: hard

"php-parser@git+https://github.com/glayzzle/php-parser.git#27abcb2337ac6450c068ef064982dfabf77916a5":
version: 3.0.2
resolution: "php-parser@https://github.com/glayzzle/php-parser.git#commit=27abcb2337ac6450c068ef064982dfabf77916a5"
checksum: 4387754c41dd96efa1a7164dd696f884430e70e6557eb93b52d2e5388a93cd17f3604674bf480d5def20cb3e6c03ab60b79c4e3abd513502d1fe51e7f4b42f8f
languageName: node
linkType: hard

"picocolors@npm:^1.0.0":
version: 1.0.0
resolution: "picocolors@npm:1.0.0"
Expand Down
12 changes: 9 additions & 3 deletions src/Api/Controller/PurgeLSCacheController.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use Flarum\Http\RequestUtil;
use Flarum\Settings\SettingsRepositoryInterface;
use Flarum\User\Exception\PermissionDeniedException;
use Illuminate\Support\Arr;
use Laminas\Diactoros\Response\EmptyResponse;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
Expand Down Expand Up @@ -44,10 +45,15 @@ public function handle(ServerRequestInterface $request): ResponseInterface
throw new PermissionDeniedException();
}

$response = new EmptyResponse();
$purgeStr = $this->settings->get('acpl-lscache.serve_stale') ? 'stale,' : '';

$stale = $this->settings->get('acpl-lscache.serve_stale') ? 'stale,' : '';
$paths = Arr::get($request->getQueryParams(), 'paths');
if (! empty($paths)) {
$purgeStr .= implode(',', $paths);
} else {
$purgeStr .= '*';
}

return $response->withHeader(LSCacheHeadersEnum::PURGE, "$stale*");
return (new EmptyResponse())->withHeader(LSCacheHeadersEnum::PURGE, $purgeStr);
}
}
33 changes: 25 additions & 8 deletions src/Command/LSCacheClearCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@
use Flarum\Settings\SettingsRepositoryInterface;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
use Symfony\Component\Console\Input\InputOption;

class LSCacheClearCommand extends AbstractCommand
{
protected UrlGenerator $url;
private SettingsRepositoryInterface $settings;

public function __construct(UrlGenerator $url, SettingsRepositoryInterface $settings)
{
Expand All @@ -22,26 +24,39 @@ public function __construct(UrlGenerator $url, SettingsRepositoryInterface $sett

public function configure()
{
$this->setName('lscache:clear')->setDescription('Purge all LsCache.');
$this->setName('lscache:clear')
->setDescription('Purge LsCache.')
->addOption(
'path',
null,
InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY,
'The path whose cache you want to purge. E.g. "--path=/test"',
);
}

protected function fire()
protected function fire(): int
{
$this->info('Sending a request to purge all LSCache entries...');
$this->info('Sending a request to purge LSCache entries...');

//Create a temporary API key to authorize a request
$apiKey = new ApiKey();
$key = $apiKey::generate()->key;
//The key is saved temporarily in the settings. The native Flarum API key is not used because it requires a user ID and in the case of the command the user is not logged in.
$this->settings->set('acpl-lscache.purgeKey', $key);

$client = new Client();
$options = [
'headers' => ['LSCachePurgeKey' => $key],
];

$paths = $this->input->getOption('path');
if (!empty($paths)) {
$options['query']['paths'] = $paths;
}

$client = new Client();
try {
//GET does not require the Flarum API key
$client->request('GET', $this->url->to('api')->route('lscache.purge'), [
'headers' => ['LSCachePurgeKey' => $key],
]);
$client->request('GET', $this->url->to('api')->route('lscache.purge'), $options);
} catch (GuzzleException $exception) {
$this->deleteKey();
$this->error('Something went wrong while sending the request.');
Expand All @@ -50,7 +65,9 @@ protected function fire()
}

$this->deleteKey();
$this->info('Notified LiteSpeed Web Server to purge all LSCache entries');
$this->info('Notified LiteSpeed Web Server to purge' . (empty($paths) ? ' all' : '') . ' LSCache entries');

return 0;
}

private function deleteKey()
Expand Down

0 comments on commit 6fe6536

Please sign in to comment.