diff --git a/README.md b/README.md index d3d25cd..78f1929 100644 --- a/README.md +++ b/README.md @@ -273,6 +273,10 @@ protected $middleware = [ ## Configuration +After installing package, you may need to configure some options. + +### Disable Service + You would probably like to set up the local environment to get a readable output. ```php @@ -281,6 +285,22 @@ You would probably like to set up the local environment to get a readable output //Set this field to false to disable the laravel page speed service. 'enable' => env('LARAVEL_PAGE_SPEED_ENABLE', true), ``` +### Skip routes + +You would probably like to configure the package to skip some routes. + +```php +//config/laravel-page-speed.php + +//You can use * as wildcard. +'skip' => [ + '*.pdf', //Ignore all routes with final .pdf + '*/downloads/*',//Ignore all routes that contain 'downloads' +]; +``` + +By default this field comes configured with some options, so feel free to configure according to your needs... + ## Testing diff --git a/config/laravel-page-speed.php b/config/laravel-page-speed.php index 655c095..ab669b4 100644 --- a/config/laravel-page-speed.php +++ b/config/laravel-page-speed.php @@ -11,5 +11,51 @@ | You would probably replace that in your local configuration to get a readable output. | */ - 'enable' => env('LARAVEL_PAGE_SPEED_ENABLE',true), + 'enable' => env('LARAVEL_PAGE_SPEED_ENABLE', true), + + /* + |-------------------------------------------------------------------------- + | Skip Routes + |-------------------------------------------------------------------------- + | + | Skip Routes paths to exclude. + | You can use * as wildcard. + | + */ + + 'skip' => [ + '*.xml', + '*.less', + '*.pdf', + '*.doc', + '*.txt', + '*.ico', + '*.rss', + '*.zip', + '*.mp3', + '*.rar', + '*.exe', + '*.wmv', + '*.doc', + '*.avi', + '*.ppt', + '*.mpg', + '*.mpeg', + '*.tif', + '*.wav', + '*.mov', + '*.psd', + '*.ai', + '*.xls', + '*.mp4', + '*.m4a', + '*.swf', + '*.dat', + '*.dmg', + '*.iso', + '*.flv', + '*.m4v', + '*.torrent' + ], + ]; diff --git a/src/Middleware/PageSpeed.php b/src/Middleware/PageSpeed.php index cb51067..84e9f22 100644 --- a/src/Middleware/PageSpeed.php +++ b/src/Middleware/PageSpeed.php @@ -4,6 +4,7 @@ use Closure; use Config; +use Illuminate\Support\Str; abstract class PageSpeed { @@ -26,7 +27,7 @@ public function handle($request, Closure $next) { $response = $next($request); - if (! Config::get('laravel-page-speed.enable')) { + if (! $this->shouldProcessPageSpeed($request)) { return $response; } @@ -47,4 +48,37 @@ protected function replace(array $replace, $buffer) { return preg_replace(array_keys($replace), array_values($replace), $buffer); } + + /** + * Check Laravel Page Speed is enabled or not + * + * @return bool + */ + public function isEnable() + { + return Config::get('laravel-page-speed.enable'); + } + + /** + * Should Process + * + * @param \Illuminate\Http\Request $request + * @return bool + */ + protected function shouldProcessPageSpeed($request) + { + if (! $this->isEnable()) { + return false; + } + + $patterns = Config::get('laravel-page-speed.skip'); + + foreach ($patterns as $pattern) { + if ($request->is($pattern)) { + return false; + } + } + + return true; + } } diff --git a/tests/Config/ConfigTest.php b/tests/Config/ConfigTest.php new file mode 100644 index 0000000..7c715c1 --- /dev/null +++ b/tests/Config/ConfigTest.php @@ -0,0 +1,48 @@ +middleware = new TrimUrls(); + } + + public function testDisableFlag() + { + $this->app['config']->set('laravel-page-speed.enable', false); + + $response = $this->middleware->handle($this->request, $this->getNext()); + + $this->assertContains("https://", $response->getContent()); + $this->assertContains("http://", $response->getContent()); + $this->assertContains("https://code.jquery.com/jquery-3.2.1.min.js", $response->getContent()); + } + + public function testSkipRoute() + { + $this->app['config']->set('laravel-page-speed.skip', ['*/downloads/*']); + + $request = Request::create('https://foo/bar/downloads/100', 'GET'); + + $response = $this->middleware->handle($request, $this->getNext($request)); + + $this->assertEquals($this->html, $response->getContent()); + } + + public function testSkipRouteWithFileExtension() + { + $this->app['config']->set('laravel-page-speed.skip', ['*.pdf']); + + $request = Request::create('https://foo/bar/test.pdf', 'GET'); + + $response = $this->middleware->handle($request, $this->getNext($request)); + + $this->assertEquals($this->html, $response->getContent()); + } +} diff --git a/tests/Middleware/TrimUrlsWithDisableFlagTest.php b/tests/Middleware/TrimUrlsWithDisableFlagTest.php deleted file mode 100644 index df404d1..0000000 --- a/tests/Middleware/TrimUrlsWithDisableFlagTest.php +++ /dev/null @@ -1,26 +0,0 @@ -middleware = new TrimUrls(); - } - - public function testTrimUrlsWithDisableFlag() - { - $this->app['config']->set('laravel-page-speed.enable', false); - - $response = $this->middleware->handle($this->request, $this->getNext()); - - $this->assertContains("https://", $response->getContent()); - $this->assertContains("http://", $response->getContent()); - $this->assertContains("https://code.jquery.com/jquery-3.2.1.min.js", $response->getContent()); - } -} diff --git a/tests/TestCase.php b/tests/TestCase.php index c428f79..00a8b7c 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -47,5 +47,6 @@ protected function getNext() protected function getEnvironmentSetUp($app) { $app['config']->set('laravel-page-speed.enable', true); + $app['config']->set('laravel-page-speed.skip', []); } }