101 lines
3.2 KiB
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;
|
|
}
|