From 62b3c19976602c7c91e69d9f03ebc79ecc64aaed Mon Sep 17 00:00:00 2001 From: guandeng Date: Wed, 20 Dec 2023 10:18:14 +0800 Subject: [PATCH] Added config options for ignored paths (#501) --- publish/telescope.php | 7 ++++++ src/Listener/RequestHandledListener.php | 29 +++++++++++++++++++------ src/Middleware/TelescopeMiddleware.php | 29 +++++++++++++++++++------ 3 files changed, 51 insertions(+), 14 deletions(-) diff --git a/publish/telescope.php b/publish/telescope.php index 600eb54..d76d5bd 100644 --- a/publish/telescope.php +++ b/publish/telescope.php @@ -40,4 +40,11 @@ 'save_mode' => Telescope::SYNC, 'ignore_logs' => [ ], + 'path' => env('TELESCOPE_PATH', 'telescope'), + 'only_paths' => [ + // 'api/*' + ], + 'ignore_paths' => [ + 'nova-api*', + ], ]; diff --git a/src/Listener/RequestHandledListener.php b/src/Listener/RequestHandledListener.php index f18cd6d..b17f710 100644 --- a/src/Listener/RequestHandledListener.php +++ b/src/Listener/RequestHandledListener.php @@ -134,15 +134,30 @@ public function requestHandled(RequestTerminated|RpcRequestTerminated $event) protected function incomingRequest(ServerRequestInterface $psr7Request): bool { - $target = $psr7Request->getRequestTarget(); - - if (Str::contains($target, ['telescope']) - || Str::endsWith($target, ['.ico']) - ) { - return false; + if (! empty($only = config('telescope.only_paths', []))) { + return $this->is($psr7Request, $only); } - return true; + return ! $this->is( + $psr7Request, + collect([ + 'telescope-api*', + 'vendor/telescope*', + ]) + ->merge(config('telescope.ignore_paths', [])) + ->unless(is_null(config('telescope.path', 'telescope')), function ($paths) { + return $paths->prepend(config('telescope.path', 'telescope') . '*'); + }) + ->all() + ); + } + + protected function is($psr7Request, $patterns) + { + $path = $psr7Request->getRequestTarget(); + $path = ltrim($path, '/'); + + return collect($patterns)->contains(fn ($pattern) => Str::is($pattern, $path)); } protected function response(ResponseInterface $response): string|array diff --git a/src/Middleware/TelescopeMiddleware.php b/src/Middleware/TelescopeMiddleware.php index 87f3c9d..7a552a5 100644 --- a/src/Middleware/TelescopeMiddleware.php +++ b/src/Middleware/TelescopeMiddleware.php @@ -118,15 +118,30 @@ public function requestHandled($request, $response) protected function incomingRequest(ServerRequestInterface $psr7Request): bool { - $target = $psr7Request->getRequestTarget(); - - if (Str::contains($target, ['telescope']) - || Str::endsWith($target, ['.ico']) - ) { - return false; + if (! empty($only = config('telescope.only_paths', []))) { + return $this->is($psr7Request, $only); } - return true; + return ! $this->is( + $psr7Request, + collect([ + 'telescope-api*', + 'vendor/telescope*', + ]) + ->merge(config('telescope.ignore_paths', [])) + ->unless(is_null(config('telescope.path', 'telescope')), function ($paths) { + return $paths->prepend(config('telescope.path', 'telescope') . '*'); + }) + ->all() + ); + } + + protected function is($psr7Request, $patterns) + { + $path = $psr7Request->getRequestTarget(); + $path = ltrim($path, '/'); + + return collect($patterns)->contains(fn ($pattern) => Str::is($pattern, $path)); } protected function response(ResponseInterface $response): string|array