Christian Mueller 8a578fbe8d feat: compact dashboard + login system for admin pages
Dashboard:
- Much smaller cards (col-xl-2), compact badges
- Short labels (Buero, HO, DND, OoO, etc.)
- Optimized for small screens

Login:
- Password-protected admin pages (all except dashboard)
- Dashboard remains public (read-only status view)
- Login page with redirect back to requested page
- Session cookie (24h, regenerated on restart)
- Password set via Settings page (SHA256 hashed)
- Sidebar shows only Dashboard when not logged in
- Login/Logout link in sidebar footer

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-24 13:48:58 +02:00

88 lines
4.1 KiB
HTML

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}Busylight Manager{% endblock %}</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.2/font/bootstrap-icons.min.css" rel="stylesheet">
<link href="/static/style.css" rel="stylesheet">
{% block head %}{% endblock %}
</head>
<body>
<div class="d-flex">
<nav class="sidebar bg-dark text-white d-flex flex-column">
<div class="p-3 border-bottom border-secondary">
<h5 class="mb-0"><i class="bi bi-lightbulb-fill text-warning"></i> Busylight</h5>
<small class="text-secondary">cynfo GmbH</small>
</div>
<ul class="nav flex-column mt-2 flex-grow-1">
<li class="nav-item">
<a class="nav-link text-white {% if page == 'dashboard' %}active{% endif %}" href="/">
<i class="bi bi-speedometer2"></i> Dashboard
</a>
</li>
{% if logged_in %}
<li class="nav-item">
<a class="nav-link text-white {% if page == 'users' %}active{% endif %}" href="/users">
<i class="bi bi-people"></i> Benutzer
</a>
</li>
<li class="nav-item">
<a class="nav-link text-white {% if page == 'devices' %}active{% endif %}" href="/devices">
<i class="bi bi-router"></i> Tuerschilder
</a>
</li>
<li class="nav-item">
<a class="nav-link text-white {% if page == 'assignments' %}active{% endif %}" href="/assignments">
<i class="bi bi-link-45deg"></i> Zuordnungen
</a>
</li>
<li class="nav-item">
<a class="nav-link text-white {% if page == 'colors' %}active{% endif %}" href="/colors">
<i class="bi bi-palette"></i> Farb-Regeln
</a>
</li>
<li class="nav-item">
<a class="nav-link text-white {% if page == 'backup' %}active{% endif %}" href="/backup">
<i class="bi bi-download"></i> Backup
</a>
</li>
<li class="nav-item">
<a class="nav-link text-white {% if page == 'settings' %}active{% endif %}" href="/settings">
<i class="bi bi-gear"></i> Einstellungen
</a>
</li>
<li class="nav-item">
<a class="nav-link text-white {% if page == 'log' %}active{% endif %}" href="/log">
<i class="bi bi-journal-text"></i> Protokoll
</a>
</li>
{% endif %}
</ul>
<div class="p-3 border-top border-secondary">
{% if authenticated %}
<small class="text-success"><i class="bi bi-check-circle"></i> Azure verbunden</small>
{% else %}
<small class="text-danger"><i class="bi bi-x-circle"></i> Azure getrennt</small>
{% endif %}
<div class="mt-2">
{% if logged_in %}
<a href="/logout" class="text-light small"><i class="bi bi-box-arrow-left"></i> Abmelden</a>
{% else %}
<a href="/login" class="text-light small"><i class="bi bi-box-arrow-in-right"></i> Anmelden</a>
{% endif %}
</div>
</div>
</nav>
<main class="main-content flex-grow-1">
{% block content %}{% endblock %}
</main>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
{% block scripts %}{% endblock %}
</body>
</html>