From db094d6d8bdcc8c58638cd9f23e889b6da5ccabb Mon Sep 17 00:00:00 2001 From: Hosteroid Date: Wed, 4 Mar 2026 11:16:56 +0200 Subject: [PATCH] Use Twig-only rendering and improve error fallback Remove legacy PHP view fallbacks and always render Twig templates (Controller, Router). Update ErrorHandler to attempt Twig rendering and provide a safe, escaped minimal HTML fallback on failure instead of requiring PHP views. Also pass whoisData into the domain view. These changes standardize on Twig templates and harden error output. --- app/Controllers/DomainController.php | 1 + app/Services/ErrorHandler.php | 43 ++++++++++++---------------- core/Controller.php | 19 ++---------- core/Router.php | 7 +---- 4 files changed, 23 insertions(+), 47 deletions(-) diff --git a/app/Controllers/DomainController.php b/app/Controllers/DomainController.php index 87b559d..f939b41 100644 --- a/app/Controllers/DomainController.php +++ b/app/Controllers/DomainController.php @@ -844,6 +844,7 @@ class DomainController extends Controller $this->view('domains/view', [ 'domain' => $formattedDomain, + 'whoisData' => $whoisData, 'logs' => $logs, 'availableTags' => $availableTags, 'title' => $domain['domain_name'] diff --git a/app/Services/ErrorHandler.php b/app/Services/ErrorHandler.php index 2b57662..2558805 100644 --- a/app/Services/ErrorHandler.php +++ b/app/Services/ErrorHandler.php @@ -296,33 +296,28 @@ class ErrorHandler $request_data = json_decode($errorData['request_data'], true); $session_data = json_decode($errorData['session_data'], true); - // Display debug page in development, clean 500 in production $twigTemplate = $this->isDevelopment ? 'errors/debug.twig' : 'errors/500.twig'; - $twigFile = __DIR__ . '/../Views/' . $twigTemplate; - if (file_exists($twigFile)) { - try { - $memory_usage_mb = round(($memory_usage ?? 0) / 1024 / 1024, 2); - $peak_memory_mb = round(memory_get_peak_usage(true) / 1024 / 1024, 2); - $errorContext = compact( - 'error_id', 'error_type', 'error_message', 'error_file', 'error_line', - 'stack_trace', 'request_method', 'request_uri', 'user_agent', - 'ip_address', 'php_version', 'memory_usage', 'memory_usage_mb', - 'peak_memory_mb', 'occurred_at', 'user_info', 'request_data', 'session_data' - ); - echo \Core\TwigService::getInstance()->render($twigTemplate, $errorContext); - } catch (\Throwable $e) { - // Twig itself failed — fall back to raw PHP view - if ($this->isDevelopment) { - require __DIR__ . '/../Views/errors/debug.php'; - } else { - require __DIR__ . '/../Views/errors/500.php'; - } + try { + $memory_usage_mb = round(($memory_usage ?? 0) / 1024 / 1024, 2); + $peak_memory_mb = round(memory_get_peak_usage(true) / 1024 / 1024, 2); + $errorContext = compact( + 'error_id', 'error_type', 'error_message', 'error_file', 'error_line', + 'stack_trace', 'request_method', 'request_uri', 'user_agent', + 'ip_address', 'php_version', 'memory_usage', 'memory_usage_mb', + 'peak_memory_mb', 'occurred_at', 'user_info', 'request_data', 'session_data' + ); + echo \Core\TwigService::getInstance()->render($twigTemplate, $errorContext); + } catch (\Throwable $e) { + $safeId = htmlspecialchars($error_id, ENT_QUOTES, 'UTF-8'); + if ($this->isDevelopment) { + $safeMsg = htmlspecialchars($error_message, ENT_QUOTES, 'UTF-8'); + $safeFile = htmlspecialchars($error_file, ENT_QUOTES, 'UTF-8'); + echo "

Internal Server Error

ID: {$safeId}

" + . "

{$safeMsg} in {$safeFile}:{$error_line}

"; + } else { + echo "

Internal Server Error

Reference: {$safeId}

"; } - } elseif ($this->isDevelopment) { - require __DIR__ . '/../Views/errors/debug.php'; - } else { - require __DIR__ . '/../Views/errors/500.php'; } exit; diff --git a/core/Controller.php b/core/Controller.php index 9702c71..ee961f4 100644 --- a/core/Controller.php +++ b/core/Controller.php @@ -6,23 +6,8 @@ abstract class Controller { protected function view(string $view, array $data = []): void { - $twigPath = __DIR__ . "/../app/Views/$view.twig"; - - if (file_exists($twigPath)) { - $twig = TwigService::getInstance(); - echo $twig->render("$view.twig", $data); - return; - } - - // Fallback to legacy PHP view during migration - extract($data); - $viewPath = __DIR__ . "/../app/Views/$view.php"; - - if (!file_exists($viewPath)) { - throw new \Exception("View not found: $view"); - } - - require $viewPath; + $twig = TwigService::getInstance(); + echo $twig->render("$view.twig", $data); } protected function json($data, int $status = 200): void diff --git a/core/Router.php b/core/Router.php index a936209..4b51e9c 100644 --- a/core/Router.php +++ b/core/Router.php @@ -72,12 +72,7 @@ class Router // Silently fail if logging is not available } - $twigPath = __DIR__ . '/../app/Views/errors/404.twig'; - if (file_exists($twigPath)) { - echo TwigService::getInstance()->render('errors/404.twig'); - } else { - require_once __DIR__ . '/../app/Views/errors/404.php'; - } + echo TwigService::getInstance()->render('errors/404.twig'); return; }