From 18e6eafb41a1c4616020e466fff97b0fd7a7bdbc Mon Sep 17 00:00:00 2001 From: Pinga <121483313+getpinga@users.noreply.github.com> Date: Mon, 31 Mar 2025 13:00:34 +0300 Subject: [PATCH] Improved CP error handling and audit log --- cp/app/Lib/Logger.php | 29 +++++++++++++ cp/app/Middleware/AuditMiddleware.php | 22 ++++++++++ cp/bootstrap/app.php | 1 + cp/resources/error.html | 60 +++++++++++++++++++++++++++ cp/routes/web.php | 4 +- 5 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 cp/app/Middleware/AuditMiddleware.php create mode 100644 cp/resources/error.html diff --git a/cp/app/Lib/Logger.php b/cp/app/Lib/Logger.php index 9026504..111a07e 100644 --- a/cp/app/Lib/Logger.php +++ b/cp/app/Lib/Logger.php @@ -128,6 +128,35 @@ class Logger extends \Monolog\Logger } else { $logger = new Logger('errors'); ErrorHandler::register($logger); + + set_exception_handler(function ($e) use ($logger) { + http_response_code(500); + + $logger->error("Unhandled exception", [ + 'message' => $e->getMessage(), + 'file' => $e->getFile(), + 'line' => $e->getLine(), + 'trace' => $e->getTraceAsString() + ]); + + include '/var/www/cp/resources/error.html'; + }); + + register_shutdown_function(function () use ($logger) { + $error = error_get_last(); + if ($error && in_array($error['type'], [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR])) { + http_response_code(500); + + $logger->error("Fatal error", [ + 'message' => $error['message'], + 'file' => $error['file'], + 'line' => $error['line'], + 'type' => $error['type'] + ]); + + include '/var/www/cp/resources/error.html'; + } + }); } } diff --git a/cp/app/Middleware/AuditMiddleware.php b/cp/app/Middleware/AuditMiddleware.php new file mode 100644 index 0000000..dd434bd --- /dev/null +++ b/cp/app/Middleware/AuditMiddleware.php @@ -0,0 +1,22 @@ +container->get('db')->exec("SET @audit_usr_id = $userId"); + $this->container->get('db')->exec("SET @audit_ses_id = " . crc32(\Pinga\Session\Session::id())); + } + return $handler->handle($request); + } + +} diff --git a/cp/bootstrap/app.php b/cp/bootstrap/app.php index 0b95b49..021b0fc 100644 --- a/cp/bootstrap/app.php +++ b/cp/bootstrap/app.php @@ -261,6 +261,7 @@ $container->set('csrf', function($container) use ($responseFactory) { return new Slim\Csrf\Guard($responseFactory); }); +$app->add(new \App\Middleware\AuditMiddleware($container)); $app->add(new \App\Middleware\ValidationErrorsMiddleware($container)); $app->add(new \App\Middleware\OldInputMiddleware($container)); $app->add(new \App\Middleware\CsrfViewMiddleware($container)); diff --git a/cp/resources/error.html b/cp/resources/error.html new file mode 100644 index 0000000..c903062 --- /dev/null +++ b/cp/resources/error.html @@ -0,0 +1,60 @@ + + +
+ + + +Please try again shortly
+If the problem persists, please contact support.
+ +