diff --git a/Heizung/WEBROOT/index.php b/Heizung/WEBROOT/index.php index 8315cf5..2165650 100644 --- a/Heizung/WEBROOT/index.php +++ b/Heizung/WEBROOT/index.php @@ -1,4 +1,6 @@ add('home', \MVC\Controller\HomeController::class, 'index'); $router->add('toggle_theme', \MVC\Controller\HomeController::class, 'toggle_theme'); $router->add('abgas', \MVC\Controller\AbgasController::class, 'abgas'); - $router->add('vorlauf', \MVC\Controller\VorlaufController::class, 'vorlauf'); - $router->add('puffer', \MVC\Controller\PufferController::class, 'puffer'); - $router->add('aussentemp', \MVC\Controller\AussentempController::class, 'aussentemp'); + $router->add('vorlauf', \MVC\Controller\VorlaufController::class, 'vorlauf', ['auth']); + $router->add('puffer', \MVC\Controller\PufferController::class, 'puffer', ['auth']); + $router->add('aussentemp', \MVC\Controller\AussentempController::class, 'aussentemp', ['auth']); + $router->add('login', \MVC\Controller\AuthController::class, 'login'); + $router->add('logout', \MVC\Controller\AuthController::class, 'logout'); $layout = new \MVC\Layout\Layout('main'); $layout->setBlock('title', 'MVC Starter'); $layout->setBlock('header_title', '🚀 MVC Dashboard'); - $layout->setBlock('header_actions', ''); + + $headerActions = ''; + if (isset($_SESSION['user_logged_in'])) { + $headerActions = '👤 ' . htmlspecialchars($_SESSION['username']) . '' . + '🚪 Logout ' . + $headerActions; + } else { + $headerActions = '🔑 Login ' . + $headerActions; + } + $layout->setBlock('header_actions', $headerActions); // Sidebar Block ob_start(); $navItems = [ - 'home' => '🏠 Home', - 'abgas' => '🔥 Abgas', - 'vorlauf' => '🏃‍♂️‍➡️ Vorlauf', - 'puffer' => '♨️ Puffer', - 'aussentemp' => '🌡️ Außentemperatur', + 'home' => ['label' => '🏠 Home', 'auth' => false], + 'abgas' => ['label' => '🔥 Abgas', 'auth' => false], + 'vorlauf' => ['label' => '🏃‍♂️‍➡️ Vorlauf', 'auth' => true], + 'puffer' => ['label' => '♨️ Puffer', 'auth' => true], + 'aussentemp' => ['label' => '🌡️ Außentemperatur', 'auth' => true], ]; ?> setBlock('sidebar', ob_get_clean()); $layout->setBlock('content', $router->dispatch($service)); echo $layout->render(); -} catch (\Exception $e) { - http_response_code(404); echo "

404

" . $e->getMessage() . "

"; +} catch (\Throwable $e) { + http_response_code(500); echo "

Error

" . $e->getMessage() . "

" . $e->getTraceAsString() . "
"; } \ No newline at end of file diff --git a/Heizung/WEBROOT/src/MVC/Controller/AuthController.php b/Heizung/WEBROOT/src/MVC/Controller/AuthController.php new file mode 100644 index 0000000..b6482a7 --- /dev/null +++ b/Heizung/WEBROOT/src/MVC/Controller/AuthController.php @@ -0,0 +1,42 @@ + 'password123', + 'user' => 'user123' + ]; + + if (isset($users[$username]) && $users[$username] === $password) { + $_SESSION['user_logged_in'] = true; + $_SESSION['username'] = $username; + header('Location: ?service=home'); + exit; + } else { + return $this->render('login', ['error' => 'Ungültige Anmeldedaten']); + } + } + + return $this->render('login'); + } + + public function logout() { + session_destroy(); + header('Location: ?service=login'); + exit; + } +} diff --git a/Heizung/WEBROOT/src/MVC/Core/Router.php b/Heizung/WEBROOT/src/MVC/Core/Router.php index 44f059f..7bf7cba 100644 --- a/Heizung/WEBROOT/src/MVC/Core/Router.php +++ b/Heizung/WEBROOT/src/MVC/Core/Router.php @@ -51,7 +51,7 @@ class Router { if ($middleware === 'auth') { if (empty($_SESSION['user_logged_in'])) { - header('Location: login.php'); + header('Location: ?service=login'); exit; } } diff --git a/Heizung/WEBROOT/src/MVC/Layout/Templates/main.php b/Heizung/WEBROOT/src/MVC/Layout/Templates/main.php index 90b6640..a102b45 100644 --- a/Heizung/WEBROOT/src/MVC/Layout/Templates/main.php +++ b/Heizung/WEBROOT/src/MVC/Layout/Templates/main.php @@ -8,19 +8,86 @@ --bg: #ffffff; --text: #333; --sidebar: #f4f4f4; - --header: #007bff; --accent: #007bff; --border: #ddd; } - .dark-mode { --bg: #1a1a1a; --text: #f4f4f4; --sidebar: #252525; --header: #111; --accent: #3498db; --border: #333; } - body { font-family: 'Segoe UI', sans-serif; margin: 0; background: var(--bg); color: var(--text); transition: 0.3s; height: 100vh; overflow: hidden; display: flex; flex-direction: column; } - .main-header { height: 60px; background: var(--header); color: white; display: flex; align-items: center; justify-content: space-between; padding: 0 20px; box-shadow: 0 2px 5px rgba(0,0,0,0.1); z-index: 10; } - .main-container { flex: 1; display: flex; overflow: hidden; } - .sidebar { width: 260px; background: var(--sidebar); padding: 20px; border-right: 1px solid var(--border); overflow-y: auto; } - .content { flex: 1; padding: 40px; overflow-y: auto; } - .btn-toggle { padding: 8px 15px; border: 1px solid rgba(255,255,255,0.3); border-radius: 5px; cursor: pointer; background: transparent; color: white; font-size: 0.9rem; } - .btn-toggle:hover { background: rgba(255,255,255,0.1); } - nav a { display: block; padding: 12px; text-decoration: none; color: inherit; border-radius: 5px; margin-bottom: 5px; } - nav a:hover { background: rgba(0,0,0,0.05); } - nav a.active { background: rgba(0,0,0,0.25); } - .logo { font-size: 1.4rem; font-weight: bold; } + --header: #007bff; + --accent: #007bff; + --border: #ddd; + } + .dark-mode { + --bg: #1a1a1a; + --text: #f4f4f4; + --sidebar: #252525; + --header: #111; + --accent: #3498db; + --border: #333; + } + body { + font-family: 'Segoe UI', sans-serif; + margin: 0; + background: var(--bg); + color: var(--text); + transition: 0.3s; + height: 100vh; + overflow: hidden; + display: flex; + flex-direction: column; + } + .main-header { + height: 60px; + background: var(--header); + color: white; + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 20px; + box-shadow: 0 2px 5px rgba(0,0,0,0.1); + z-index: 10; + } + .main-container { + flex: 1; + display: flex; + overflow: hidden; + } + .sidebar { + width: 260px; + background: var(--sidebar); + padding: 20px; + border-right: 1px solid var(--border); + overflow-y: auto; + } + .content { + flex: 1; + padding: 40px; + overflow-y: auto; + } + .btn-toggle { + padding: 8px 15px; + border: 1px solid rgba(255,255,255,0.3); + border-radius: 5px; + cursor: pointer; + background: transparent; + color: white; + font-size: 0.9rem; + } + .btn-toggle:hover { + background: rgba(255,255,255,0.1); + } + nav a { + display: block; + padding: 12px; + text-decoration: none; + color: inherit; + border-radius: 5px; + margin-bottom: 5px; + } + nav a:hover { + background: rgba(0,0,0,0.05); + } + nav a.active { + background: rgba(0,0,0,0.25); + } + .logo { + font-size: 1.4rem; font-weight: bold; + } diff --git a/Heizung/WEBROOT/src/MVC/View/login.php b/Heizung/WEBROOT/src/MVC/View/login.php new file mode 100644 index 0000000..a1d2a65 --- /dev/null +++ b/Heizung/WEBROOT/src/MVC/View/login.php @@ -0,0 +1,60 @@ + + +
+

🔑 Login

+ +
+ +
+
+ + +
+
+ + +
+ +
+