Skip to content

Commit 79bfe71

Browse files
authored
Merge pull request #332 from opcodesio/improvement/production-authorization
better handling of the production block
2 parents 12a845d + 13cbf01 commit 79bfe71

File tree

4 files changed

+27
-8
lines changed

4 files changed

+27
-8
lines changed

config/log-viewer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212

1313
'enabled' => env('LOG_VIEWER_ENABLED', true),
1414

15+
'require_auth_in_production' => true,
16+
1517
/*
1618
|--------------------------------------------------------------------------
1719
| Log Viewer Domain

src/Http/Middleware/AuthorizeLogViewer.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,23 @@
22

33
namespace Opcodes\LogViewer\Http\Middleware;
44

5+
use Illuminate\Support\Facades\App;
6+
use Illuminate\Support\Facades\Gate;
57
use Opcodes\LogViewer\Facades\LogViewer;
68

79
class AuthorizeLogViewer
810
{
911
public function handle($request, $next)
1012
{
13+
if (
14+
config('log-viewer.require_auth_in_production', false)
15+
&& App::isProduction()
16+
&& ! Gate::has('viewLogViewer')
17+
&& ! LogViewer::hasAuthCallback()
18+
) {
19+
abort(403);
20+
}
21+
1122
LogViewer::auth();
1223

1324
return $next($request);

src/LogViewerServiceProvider.php

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -134,12 +134,6 @@ protected function defineDefaultGates()
134134
if (! Gate::has('deleteLogFolder')) {
135135
Gate::define('deleteLogFolder', fn (mixed $user, LogFolder $folder) => true);
136136
}
137-
138-
if ($this->app->isProduction() && ! Gate::has('viewLogViewer') && ! LogViewer::hasAuthCallback()) {
139-
// Disable Log Viewer in production by default. In order to allow access,
140-
// developers will have to define a "viewLogViewer" gate or an "auth" callback.
141-
LogViewer::auth(fn ($request) => false);
142-
}
143137
}
144138

145139
/**

tests/Feature/Authorization/CanViewLogViewerTest.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,27 @@
4040
test('local environment can use Log Viewer by default', function () {
4141
app()->detectEnvironment(fn () => 'local');
4242
expect(app()->isProduction())->toBeFalse();
43-
(new \Opcodes\LogViewer\LogViewerServiceProvider(app()))->boot();
4443

4544
get(route('log-viewer.index'))->assertOk();
4645
});
4746

4847
test('Log Viewer is blocked in production environment by default', function () {
4948
app()->detectEnvironment(fn () => 'production');
5049
expect(app()->isProduction())->toBeTrue();
51-
(new \Opcodes\LogViewer\LogViewerServiceProvider(app()))->boot();
5250

5351
get(route('log-viewer.index'))->assertForbidden();
52+
53+
// but if configuration allows...
54+
config(['log-viewer.require_auth_in_production' => false]);
55+
get(route('log-viewer.index'))->assertOk();
56+
});
57+
58+
test('Log Viewer is not blocked if the Log Viewer auth middleware is not used', function () {
59+
config(['log-viewer.middleware' => ['web']]);
60+
app()->detectEnvironment(fn () => 'production');
61+
expect(app()->isProduction())->toBeTrue();
62+
// need to reload the routes in order for the new middleware to take place.
63+
(new \Opcodes\LogViewer\LogViewerServiceProvider(app()))->boot();
64+
65+
get(route('log-viewer.index'))->assertOk();
5466
});

0 commit comments

Comments
 (0)