PHP_AdminTool_Projekt/public/index.php

101 lines
3.2 KiB
PHP

<?php
// Strenge Typprüfung für Parameter- und Rückgabetypen aktivieren.
declare(strict_types=1);
// Eine neue Session wird gestartet und die entsprechende Variable ($_SESSION) angelegt oder eine bestehende wird fortgesetzt.
session_start();
/*
* Registriert eine Autoload-Funktion für Klassen mit dem Namespace-Präfix "App\".
* Statt jede Klasse manuell über "require pfad_zur_klasse.php" einzubinden,
* versucht PHP nun automatisch, die passende Datei zu laden, sobald eine Klasse
* im Namespace "App\..." verwendet wird.
*/
spl_autoload_register(
// Anonyme Funktion, die den Klassennamen prüft und den Dateipfad zur Klasse ermittelt.
static function (string $class): void {
$prefix = 'App\\';
$baseDir = __DIR__ . '/../app/';
$len = strlen($prefix);
if (strncmp($prefix, $class, $len) !== 0) {
return;
}
$relativeClass = substr($class, $len);
$file = $baseDir . str_replace('\\', DIRECTORY_SEPARATOR, $relativeClass) . '.php';
if (file_exists($file) === true) {
require $file;
}
}
);
// Pfad zur Konfigurationsdatei prüfen und Konfiguration laden
$configPath = __DIR__ . '/../config/config.php';
if (file_exists($configPath) === false) {
// Fail fast: ohne Konfiguration macht die App keinen Sinn
http_response_code(500);
echo 'Konfigurationsdatei config/config.php wurde nicht gefunden. '
. 'Bitte config.example.php kopieren und anpassen.';
exit;
}
/** @var array<string, mixed> $config */
$config = require $configPath;
use App\Controllers\AuthController;
// Hilfsfunktion für geschützte Routen
function requireLogin(array $config): void
{
// session_key_user aus dem Config-Array lesen. Wenn nicht gesetzt oder null, Standard "admin_user" verwenden.
$sessionKey = $config['security']['session_key_user'] ?? 'admin_user';
// Prüfen, ob in $_SESSION unter diesem Key ein eingeloggter Benutzer hinterlegt ist.
// Falls nicht, zurück zur Login-Seite umleiten.
if (isset($_SESSION[$sessionKey]) === false) {
header('Location: index.php?route=login');
exit;
}
}
// Route aus dem GET-Parameter lesen. Wenn nicht gesetzt, Standardroute "login" verwenden.
$route = $_GET['route'] ?? 'login';
// Neue Instanz der Klasse AuthController erstellen (wird bei Bedarf über den Autoloader geladen).
$authController = new AuthController($config);
// Anhand des Routing-Ziels (route) entscheiden, welcher Code ausgeführt wird.
switch ($route) {
case 'login':
$authController->showLoginForm();
break;
case 'login.submit':
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
header('Location: index.php?route=login');
exit;
}
$authController->processLogin();
break;
case 'logout':
$authController->logout();
break;
case 'dashboard':
requireLogin($config);
// Später: DashboardController aufrufen
echo '<h1>Dashboard (Platzhalter)</h1>';
echo '<p>Hier kommt später dein SNMP/Server-Status hin.</p>';
echo '<p><a href="index.php?route=logout">Logout</a></p>';
break;
default:
http_response_code(404);
echo 'Route nicht gefunden.';
break;
}