From 374b6d465e2b0f1d699490d29cfceb6c4ee190b9 Mon Sep 17 00:00:00 2001 From: blaerf Date: Fri, 5 Dec 2025 09:23:51 +0100 Subject: [PATCH 1/2] LDAP Connection URI angepasst --- public/index.php | 48 +++++++++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/public/index.php b/public/index.php index db133fd..326c937 100644 --- a/public/index.php +++ b/public/index.php @@ -19,11 +19,12 @@ declare(strict_types=1); * - Alle neuen Routen sollten über den Switch-Block am Ende ergänzt werden. */ - -// Eine neue Session wird gestartet und die entsprechende Variable ($_SESSION) angelegt oder eine bestehende wird fortgesetzt. +// Eine neue Session wird gestartet und die entsprechende Variable ($_SESSION) angelegt +// oder eine bestehende wird fortgesetzt. session_start(); -// PHP-Fehler nur ins Log schreiben, nicht direkt im Browser anzeigen +// PHP-Fehler vollständig erfassen, aber nicht im Browser anzeigen. +// Technische Details gehen in den LoggingService. error_reporting(E_ALL); ini_set('display_errors', '0'); @@ -35,7 +36,7 @@ ini_set('display_errors', '0'); */ spl_autoload_register( static function (string $class): void { - $prefix = 'App\\'; + $prefix = 'App\\'; $baseDir = __DIR__ . '/../app/'; $len = strlen($prefix); @@ -44,7 +45,7 @@ spl_autoload_register( } $relativeClass = substr($class, $len); - $file = $baseDir . str_replace('\\', DIRECTORY_SEPARATOR, $relativeClass) . '.php'; + $file = $baseDir . str_replace('\\', DIRECTORY_SEPARATOR, $relativeClass) . '.php'; if (file_exists($file) === true) { require $file; @@ -52,11 +53,11 @@ spl_autoload_register( } ); +// Layout-Funktion einbinden (renderLayout) require __DIR__ . '/views/layout.php'; // Die Konfigurationsdatei liefert ein assoziatives Array mit den Teilbereichen -// "ldap", "snmp" und "security" (u. a. Session-Keys, Timeout-Einstellungen, OIDs). - +// "ldap", "snmp", "security" und "logging" (u. a. Session-Keys, Timeout-Einstellungen, OIDs, Log-Pfade). $configPath = __DIR__ . '/../config/config.php'; if (file_exists($configPath) === false) { // Fail fast: ohne Konfiguration macht die App keinen Sinn @@ -112,7 +113,7 @@ set_error_handler( ); set_exception_handler( - static function (Throwable $exception) use ($globalLogger): void { + static function (\Throwable $exception) use ($globalLogger): void { $globalLogger->logException( 'Unbehandelte Exception in der Anwendung.', $exception, @@ -158,20 +159,24 @@ function handleResult(?array $result): void return; } + // Redirect-Result if (isset($result['redirect']) === true) { - header('Location: ' . $result['redirect']); + header('Location: ' . (string)$result['redirect']); exit; } + // View-Result $contentView = (string)($result['view'] ?? ''); $viewData = (array)($result['data'] ?? []); + // Standard: Wir gehen davon aus, dass es KEINE Loginseite ist, // außer der Controller sagt explizit etwas anderes. - if (!array_key_exists('loginPage', $viewData)) { + if (array_key_exists('loginPage', $viewData) === false) { $viewData['loginPage'] = false; } - $pageTitle = (string)($result['pageTitle'] ?? ''); - $activeMenu = $result['activeMenu'] ?? null; + + $pageTitle = (string)($result['pageTitle'] ?? ''); + $activeMenu = $result['activeMenu'] ?? null; if ($contentView === '' || file_exists($contentView) === false) { http_response_code(500); @@ -180,30 +185,33 @@ function handleResult(?array $result): void } // Hier rufen wir jetzt die Layout-Funktion aus layout.php auf - renderLayout($contentView, $viewData, $pageTitle, is_string($activeMenu) ? $activeMenu : null); + renderLayout( + $contentView, + $viewData, + $pageTitle, + is_string($activeMenu) ? $activeMenu : null + ); } // Zentrale Controller der Anwendung initialisieren und ihnen die vollständige Konfiguration übergeben. // Die Controller holen sich daraus bei Bedarf ihre spezifischen Teilkonfigurationen (z. B. "ldap" oder "snmp"). - -$authController = new AuthController($config); -$dashboardController = new DashboardController($config); +// Jeder Controller erzeugt intern seinen eigenen LoggingService aus $config['logging']. +$authController = new AuthController($config); +$dashboardController = new DashboardController($config); $userManagementController = new UserManagementController($config); // Route aus dem Query-Parameter lesen. Standardroute ist "login", // sodass nicht angemeldete Benutzer automatisch auf die Login-Seite geführt werden. - $route = $_GET['route'] ?? 'login'; // Einfache Router-Logik: Jede Route ruft eine Controller-Methode auf und // übergibt deren View-Result an handleResult(). Neue Seiten werden hier ergänzt. - switch ($route) { case 'login': // Login-Formular anzeigen (ggf. mit Fehlermeldung) $result = $authController->showLoginForm(); handleResult($result); - break; + break; case 'login.submit': if ($_SERVER['REQUEST_METHOD'] !== 'POST') { @@ -237,5 +245,3 @@ switch ($route) { echo 'Route nicht gefunden.'; break; } - - -- 2.45.2 From 3a5b110ce7838c2c5609aa8368ef9bd782648ddb Mon Sep 17 00:00:00 2001 From: blaerf Date: Fri, 5 Dec 2025 09:28:02 +0100 Subject: [PATCH 2/2] LDAP Connection URI angepasst --- app/Controllers/AuthController.php | 3 +-- app/Controllers/UserManagementController.php | 3 +-- app/Services/Logging/LoggingService.php | 9 ++++----- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/app/Controllers/AuthController.php b/app/Controllers/AuthController.php index 36c5981..005ea59 100644 --- a/app/Controllers/AuthController.php +++ b/app/Controllers/AuthController.php @@ -7,7 +7,6 @@ namespace App\Controllers; use App\Services\Ldap\LdapAuthService; use App\Services\Logging\LoggingService; -use Throwable; /** * Zuständig für alles rund um den Login: @@ -93,7 +92,7 @@ class AuthController // true = Authentifizierung erfolgreich // false = Anmeldedaten fachlich ungültig (Benutzer/Passwort falsch) $authenticated = $this->ldapAuthService->authenticate($username, $password); - } catch (Throwable $exception) { + } catch (\Throwable $exception) { // HIER ist vorher dein Fehler entstanden: // - showLoginForm() wurde nur aufgerufen, das Ergebnis aber ignoriert // - danach kam ein "return;" ohne Rückgabewert → Rückgabetyp array wurde verletzt diff --git a/app/Controllers/UserManagementController.php b/app/Controllers/UserManagementController.php index 12a4efa..9e35640 100644 --- a/app/Controllers/UserManagementController.php +++ b/app/Controllers/UserManagementController.php @@ -7,7 +7,6 @@ namespace App\Controllers; use App\Services\Ldap\LdapDirectoryService; use App\Services\Logging\LoggingService; -use Throwable; /** * Controller für die Benutzer- und Gruppenanzeige. @@ -70,7 +69,7 @@ class UserManagementController // Benutzer- und Gruppenlisten aus dem AD laden. $users = $this->directoryService->getUsers(); $groups = $this->directoryService->getGroups(); - } catch (Throwable $exception) { + } catch (\Throwable $exception) { // Technische Details ins Log, für den Benutzer eine allgemeine Meldung. $this->logger->logException( 'Fehler beim Laden von Benutzern/Gruppen.', diff --git a/app/Services/Logging/LoggingService.php b/app/Services/Logging/LoggingService.php index 9b9b556..433d1b5 100644 --- a/app/Services/Logging/LoggingService.php +++ b/app/Services/Logging/LoggingService.php @@ -6,7 +6,6 @@ declare(strict_types=1); namespace App\Services\Logging; use DateTimeImmutable; -use Throwable; /** * Einfacher File-Logger für die AdminTool-Anwendung. @@ -31,7 +30,7 @@ class LoggingService * * @var array */ - private const array LEVEL_MAP = [ + private const LEVEL_MAP = [ 'debug' => 100, 'info' => 200, 'warning' => 300, @@ -87,7 +86,7 @@ class LoggingService return; } - $timestamp = new DateTimeImmutable()->format('Y-m-d H:i:s'); + $timestamp = (new DateTimeImmutable())->format('Y-m-d H:i:s'); $contextJson = $context === [] ? '{}' @@ -114,10 +113,10 @@ class LoggingService * Komfortmethode, um Exceptions strukturiert zu loggen. * * @param string $message Kurzer Kontexttext zur Exception - * @param Throwable $exception Die geworfene Exception + * @param \Throwable $exception Die geworfene Exception * @param array $context Zusätzlicher Kontext (Route, Benutzername, Remote-IP, ...) */ - public function logException(string $message, Throwable $exception, array $context = []): void + public function logException(string $message, \Throwable $exception, array $context = []): void { $exceptionContext = [ 'exception_class' => get_class($exception), -- 2.45.2