diff --git a/.env.example b/.env.example index 7411407..5ab7bba 100644 --- a/.env.example +++ b/.env.example @@ -98,6 +98,8 @@ TENNANT_KAUNTER_DB=kaunter_erahn KAUNTER_URL=http://host.docker.internal:8081 INTERNAL_NOTIFICATION_SECRET= +LOGVIEWER_PASSWORD= + WHATSAPP_TOKEN= # Paste token from Graph API explorer. WHATSAPP_PHONE_NUMBER_ID=1323449077519027 WHATSAPP_API_VERSION=v25.0 diff --git a/.env.production b/.env.production index 3411c6d..88259ea 100644 --- a/.env.production +++ b/.env.production @@ -9,6 +9,7 @@ API_ARRAHNBID_ANNUR=https://adminbid-annur.erahn.com.my/api/ LOG_CHANNEL=stack LOG_SLACK_WEBHOOK_URL= +LOGVIEWER_PASSWORD="$2y$10$k7eiUyZdm3BruwAaT1gbmelTm.PPgZptOEQT1nlBjyiR84a4KBMlm" DB_CONNECTION_2=mysql DB_HOST_2=192.168.1.216 diff --git a/.env.staging b/.env.staging index f87ad63..5aaed49 100644 --- a/.env.staging +++ b/.env.staging @@ -13,6 +13,7 @@ MYSQL_PUBLISH_PORT=3308 LOG_CHANNEL=stack LOG_LEVEL=debug LOG_SLACK_WEBHOOK_URL= +LOGVIEWER_PASSWORD= DB_CONNECTION=mysql DB_HOST=mysql diff --git a/app/Http/Middleware/LogViewerPassword.php b/app/Http/Middleware/LogViewerPassword.php new file mode 100644 index 0000000..f43d2c4 --- /dev/null +++ b/app/Http/Middleware/LogViewerPassword.php @@ -0,0 +1,32 @@ +header('Cache-Control', 'no-store'); + } + + $provided = $request->getPassword(); + if ($request->getUser() !== 'logviewer' || !is_string($provided) || + !password_verify($provided, $passwordHash)) { + return response('Kata laluan diperlukan untuk mengakses log.', 401, [ + 'WWW-Authenticate' => 'Basic realm="Log Viewer", charset="UTF-8"', + 'Cache-Control' => 'no-store', + ]); + } + + $response = $next($request); + $response->headers->set('Cache-Control', 'no-store'); + + return $response; + } +} diff --git a/bootstrap/app.php b/bootstrap/app.php index 6b99bbe..26b6559 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -88,6 +88,7 @@ $app->singleton( $app->configure('app'); $app->configure('logging'); +$app->configure('logviewer'); $app->configure('tinker'); $app->configure('tennant_database'); $app->configure('report'); @@ -110,9 +111,9 @@ $app->configure('kaunter'); // App\Http\Middleware\ExampleMiddleware::class // ]); -// $app->routeMiddleware([ -// 'auth' => App\Http\Middleware\Authenticate::class, -// ]); +$app->routeMiddleware([ + 'logviewer.password' => App\Http\Middleware\LogViewerPassword::class, +]); /* |-------------------------------------------------------------------------- diff --git a/config/logviewer.php b/config/logviewer.php new file mode 100644 index 0000000..5746448 --- /dev/null +++ b/config/logviewer.php @@ -0,0 +1,16 @@ + env('LOGVIEWER_PASSWORD'), + /* + |-------------------------------------------------------------------------- + | Pattern and storage path settings + |-------------------------------------------------------------------------- + | + | The env key for pattern and storage path with a default value + | + */ + 'max_file_size' => 52428800, // size in Byte + 'pattern' => env('LOGVIEWER_PATTERN', '*.log'), + 'storage_path' => env('LOGVIEWER_STORAGE_PATH', storage_path('logs')), +]; diff --git a/routes/web.php b/routes/web.php index e76b125..ddaa2a7 100644 --- a/routes/web.php +++ b/routes/web.php @@ -25,7 +25,10 @@ $router->get('/health', function () { return response()->json(['status' => 'ok']); }); -$router->group(['namespace' => '\Rap2hpoutre\LaravelLogViewer'], function() use ($router) { +$router->group([ + 'namespace' => '\Rap2hpoutre\LaravelLogViewer', + 'middleware' => 'logviewer.password', +], function () use ($router) { $router->get('logs', 'LogViewerController@index'); });