diff --git a/backend/README.md b/backend/README.md index bfc12456..d6d216af 100644 --- a/backend/README.md +++ b/backend/README.md @@ -16,10 +16,8 @@ sudo ./setup.sh ``` **Installationsoptionen**: -1. **Nur Abhängigkeiten installieren** - System vorbereiten ohne Kiosk-Modus -2. **Finale Kiosk-Installation** - Vollständige Kiosk-Konfiguration -3. **Nur Services installieren** - Systemd-Services aktualisieren -4. **System-Test** - Funktionalität überprüfen +1. **Abhängigkeiten installieren** - System für manuelles Testen vorbereiten +2. **Vollständige Kiosk-Installation** - Automatischer Kiosk-Modus mit Remote-Zugang **Nach der Installation**: System mit `sudo reboot` neustarten für automatischen Kiosk-Modus. @@ -64,6 +62,7 @@ python app.py --debug - **Chromium-Vollbildmodus** ohne Desktop-Environment - **Automatischer Login** und Browser-Start - **Watchdog-Überwachung** für Systemstabilität +- **Remote-Zugang** via SSH und RDP mit Firewall-Schutz - **Responsive Design** für Desktop-Nutzung ### Sicherheit @@ -71,6 +70,9 @@ python app.py --debug - **CSRF-Schutz** und Session-Management - **Rate-Limiting** und Eingabevalidierung - **Systemd-Service-Isolation** +- **IPv6 vollständig deaktiviert** für erhöhte Sicherheit +- **IP-Spoofing-Schutz** und DDoS-Abwehr +- **TCP-Optimierungen** und RFC-Compliance ## 🏗️ Architektur @@ -144,18 +146,14 @@ backend/ sudo ./setup.sh # Menüoptionen: -# 1. Nur Abhängigkeiten installieren und System vorbereiten -# 2. Finale Installation mit kompletter Kiosk-Modus-Konfiguration -# 3. Nur Services installieren/aktualisieren -# 4. System-Test durchführen -# 5. Beenden +# 1. Abhängigkeiten installieren für manuelles Testen +# 2. Vollständige Kiosk-Installation mit Remote-Zugang +# 3. Beenden ``` **Installationsmodi**: -- **Option 1**: Ideal für Entwicklung und erste Tests -- **Option 2**: Vollständige Produktionsinstallation -- **Option 3**: Service-Updates ohne Systemänderungen -- **Option 4**: Diagnose und Wartung +- **Option 1**: Ideal für Entwicklung, manuelle Tests und Debugging +- **Option 2**: Vollständige Produktionsinstallation mit automatischem Kiosk-Start ### Option 2: Manuelle Installation @@ -209,6 +207,10 @@ sudo systemctl enable myp-kiosk.service ### Netzwerk-Zugriff - **HTTPS**: `https://:443` +### Remote-Zugang (falls konfiguriert) +- **SSH**: `ssh user@` (Passwort: `raspberry`) +- **RDP**: `:3389` (Benutzer: `root`, Passwort: `744563017196A`) + ### Standard-Anmeldedaten - **Benutzername**: `admin` - **Passwort**: `admin123` @@ -271,7 +273,7 @@ curl -k https://localhost:443 openssl s_client -connect localhost:443 -servername localhost # Automatische Tests mit setup.sh -sudo ./setup.sh # Option 4: System-Test +sudo ./setup.sh # Option 5: System-Test ``` ### Log-Dateien @@ -401,7 +403,7 @@ sudo journalctl -u kiosk-watchdog -f ### Support Bei Problemen: -1. **System-Test durchführen**: `sudo ./setup.sh` → Option 4 +1. **System-Test durchführen**: `sudo ./setup.sh` → Option 5 2. **Log-Bundle erstellen**: ```bash sudo tar -czf myp-logs-$(date +%Y%m%d).tar.gz \ diff --git a/backend/database/myp.db b/backend/database/myp.db index 6d5e4ffa..6043676d 100644 Binary files a/backend/database/myp.db and b/backend/database/myp.db differ diff --git a/backend/database/myp.db-wal b/backend/database/myp.db-wal index 5dc32345..cae37766 100644 Binary files a/backend/database/myp.db-wal and b/backend/database/myp.db-wal differ diff --git a/backend/docs/CHANGELOG_SETUP_KONSOLIDIERUNG.md b/backend/docs/CHANGELOG_SETUP_KONSOLIDIERUNG.md index c5ea855c..b4404c68 100644 --- a/backend/docs/CHANGELOG_SETUP_KONSOLIDIERUNG.md +++ b/backend/docs/CHANGELOG_SETUP_KONSOLIDIERUNG.md @@ -2,18 +2,19 @@ ## Übersicht der Änderungen -Diese Version konsolidiert alle bisherigen Installationsskripte in ein einziges, benutzerfreundliches Setup-System. +Diese Version konsolidiert alle bisherigen Installationsskripte in ein einziges, benutzerfreundliches Setup-System mit **vereinfachten 2 Installationsmodi**. ## 🔄 Strukturelle Änderungen ### Neue Dateien -- **`setup.sh`** - Konsolidiertes Hauptinstallationsskript mit Menüführung +- **`setup.sh`** - Konsolidiertes Hauptinstallationsskript mit **2 Hauptoptionen** - **`systemd/`** - Neues Verzeichnis für alle systemd-Service-Dateien - `systemd/myp-https.service` - `systemd/myp-kiosk.service` - `systemd/kiosk-watchdog.service` - `systemd/kiosk-watchdog-python.service` + - `systemd/myp-firewall.service` - **Erweiterte Firewall-Konfiguration** - **`docs/SETUP_ANLEITUNG.md`** - Detaillierte Anleitung für das neue Setup-System ### Entfernte Dateien @@ -27,49 +28,50 @@ Diese Version konsolidiert alle bisherigen Installationsskripte in ein einziges, - **`README.md`** - Vollständig überarbeitet für neues Setup-System - **Version erhöht auf 4.0.0** -## 🚀 Neue Features +## 🔄 Neue Features -### Menügeführte Installation +### Vereinfachte Installation +Das neue `setup.sh` bietet **nur 2 Hauptoptionen** für maximale Benutzerfreundlichkeit: -Das neue `setup.sh` bietet vier verschiedene Installationsmodi: +1. **Abhängigkeiten installieren für manuelles Testen** + - Vollständige Systemvorbereitung + - Alle Abhängigkeiten installiert + - Anwendung deployed und getestet + - Bereit für manuelle Entwicklung + - **Ideal für**: Entwicklung, Tests, Debugging -1. **Nur Abhängigkeiten installieren** +2. **Vollständige Kiosk-Installation mit Remote-Zugang** + - **Automatischer Kiosk-Modus** beim Boot + - **SSH-Zugang**: `user:raspberry` + - **RDP-Zugang**: `root:744563017196A` mit XFCE + - **Erweiterte Firewall**: 192.168.0.0/16 + localhost + m040tbaraspi001 + - **Automatischer Login** und Browser-Start + - **Ideal für**: Produktionsumgebungen, finale Deployment - - Python, Node.js, SSL-Zertifikate - - Anwendungsdeployment - - Minimaler Funktionstest - - Ideal für Entwicklung -2. **Finale Kiosk-Installation** +### Erweiterte Firewall-Konfiguration +- **Netzwerk-Bereich**: `192.168.0.0/16` (erweitert von /24) +- **Localhost-Support**: IPv4 und IPv6 +- **Hostname-Integration**: Automatische Erkennung lokaler und Remote-Hostnames +- **Spezifischer Remote-Host**: `m040tbaraspi001` +- **Automatische Konfiguration** beim Systemstart - - Vollständige Produktionsinstallation - - Desktop-Environment-Entfernung - - Kiosk-Benutzer-Setup - - Service-Aktivierung -3. **Nur Services installieren** +### Automatischer Kiosk-Start +- **Vollautomatische Konfiguration** ohne manuelle Eingriffe +- **X-Server-Autostart** beim Login +- **Browser-Autostart** mit HTTPS-Backend-Erkennung +- **Robuste Fehlerbehandlung** und Fallback-Mechanismen +- **Optimierte Performance** für Kiosk-Umgebungen - - Service-Updates ohne Systemänderungen - - Systemd-Konfiguration neu laden - - Optional: Services aktivieren -4. **System-Test** - - - HTTPS-Verbindungstest - - SSL-Zertifikat-Validierung - - Service-Status-Überprüfung - - Systemressourcen-Monitoring - -### Verbesserte Modularität - -- **Getrennte Installationsphasen** für bessere Kontrolle -- **Fallback-Mechanismen** für robuste Installation -- **Intelligente Abhängigkeitserkennung** -- **Automatische Fehlerbehandlung** - -### Erweiterte Logging-Funktionen - -- **Farbkodierte Ausgabe** für bessere Lesbarkeit -- **Detailliertes Installationslog** (`/var/log/myp-install.log`) -- **Strukturierte Fehlermeldungen** -- **Fortschrittsanzeigen** +### Erweiterte Netzwerk-Sicherheit +- **IPv6 vollständig deaktiviert** auf allen Ebenen (GRUB, Kernel, Firewall) +- **IP-Spoofing-Schutz** mit Reverse Path Filtering +- **SYN-Flood-Schutz** mit optimierten TCP-Einstellungen +- **DDoS-Abwehr** durch Broadcast-Ping-Schutz +- **TCP-RFC-Compliance** verhindert aggressive Paketwiederholungen +- **Optimierte Netzwerk-Performance** durch TCP-Window-Skalierung +- **Anti-Fingerprinting** durch deaktivierte TCP-Timestamps +- **Verdächtige Pakete werden geloggt** (Martian-Pakete) +- **Paketweiterleitung deaktiviert** (kein Router-Verhalten) ## 🔧 Technische Verbesserungen diff --git a/backend/docs/INSTALLATION_DEBIAN_KIOSK.md b/backend/docs/INSTALLATION_DEBIAN_KIOSK.md index 0519ecba..9e75005f 100644 --- a/backend/docs/INSTALLATION_DEBIAN_KIOSK.md +++ b/backend/docs/INSTALLATION_DEBIAN_KIOSK.md @@ -1 +1,471 @@ - \ No newline at end of file +# MYP Druckerverwaltung - Debian/Linux Kiosk-Installation + +## Übersicht + +Diese Anleitung beschreibt die Installation der MYP Druckerverwaltung als vollständigen Kiosk-Modus auf Debian/Linux-Systemen (insbesondere Raspberry Pi OS). Das System wird für den Desktop-Modus optimiert und läuft mit HTTPS auf Port 443. + +## Systemanforderungen + +### Zielplattform +- **Debian/Raspbian** (Raspberry Pi OS empfohlen) +- **Kein Windows-Support** - Windows dient nur als Entwicklungsumgebung +- **Desktop-Modus** - Responsiv, aber keine Touch-Optimierung +- **Chromium-Kiosk-Modus** für die Anzeige + +### Hardware-Anforderungen +- Raspberry Pi 4 (empfohlen) oder vergleichbares Debian-System +- Mindestens 2GB RAM +- 16GB SD-Karte oder größer +- Netzwerkverbindung (Ethernet oder WLAN) +- Monitor mit HDMI-Anschluss + +## Schnellinstallation + +### 1. Repository klonen +```bash +git clone +cd backend +``` + +### 2. Installationsskript ausführen +```bash +sudo chmod +x combined.sh +sudo ./combined.sh +``` + +### 3. Installationsoptionen +Das Skript bietet folgende Optionen: + +1. **System-Abhängigkeiten installieren** + - Python 3, Node.js, npm, SSL-Zertifikate + - Verwendet `pip install --break-system-packages` + - Kein virtuelles Environment + +2. **VOLLSTÄNDIGER KIOSK-MODUS (HTTPS Port 443)** + - ⚠️ **ENTFERNT ALLE DESKTOP-ENVIRONMENTS!** + - Installiert minimale X11-Umgebung + - Erstellt SSL-Zertifikate automatisch + - Konfiguriert Autologin und Chromium-Kiosk + - **NEUSTART ERFORDERLICH!** + +## Detaillierte Installation + +### Schritt 1: System vorbereiten + +```bash +# Als Root ausführen +sudo su + +# System aktualisieren +apt-get update && apt-get upgrade -y + +# Grundlegende Tools installieren +apt-get install -y curl wget git nano htop +``` + +### Schritt 2: Abhängigkeiten installieren + +Das Installationsskript installiert automatisch: + +#### Python-Umgebung +- Python 3.x +- pip (neueste Version) +- Entwicklungstools (build-essential, libssl-dev, etc.) + +#### Node.js und npm +- Node.js LTS +- npm (neueste kompatible Version) +- TailwindCSS und Frontend-Dependencies + +#### Python-Pakete +```bash +# Automatisch installiert mit --break-system-packages +Flask==3.1.1 +Flask-Login==0.6.3 +Flask-WTF==1.2.1 +SQLAlchemy==2.0.36 +bcrypt==4.2.1 +cryptography==44.0.0 +Werkzeug==3.1.3 +requests==2.32.3 +psutil==6.1.1 +gunicorn==23.0.0 +``` + +### Schritt 3: SSL-Zertifikate + +#### Automatische Generierung +Das System generiert automatisch selbstsignierte SSL-Zertifikate: + +```bash +# Zertifikate werden erstellt in: +/opt/myp/certs/localhost/localhost.crt +/opt/myp/certs/localhost/localhost.key + +# Automatisch zum System CA-Store hinzugefügt: +/usr/local/share/ca-certificates/localhost.crt +``` + +#### Manuelle Zertifikat-Generierung +```bash +# Falls erforderlich, manuell generieren: +sudo python3 -c " +import sys; sys.path.insert(0, '/opt/myp') +from utils.ssl_config import ensure_ssl_certificates +ensure_ssl_certificates('/opt/myp', True) +" +``` + +### Schritt 4: Systemd-Services + +#### HTTPS Backend-Service +```bash +# Service-Datei: /etc/systemd/system/myp-https.service +sudo systemctl enable myp-https.service +sudo systemctl start myp-https.service + +# Status prüfen +sudo systemctl status myp-https.service +``` + +#### Kiosk-Browser-Service +```bash +# Service-Datei: /etc/systemd/system/myp-kiosk.service +sudo systemctl enable myp-kiosk.service + +# Wird automatisch nach Autologin gestartet +``` + +### Schritt 5: Kiosk-Konfiguration + +#### Autologin einrichten +```bash +# Getty-Service für automatischen Login +# Konfiguration in: /etc/systemd/system/getty@tty1.service.d/override.conf + +[Service] +ExecStart= +ExecStart=-/sbin/agetty --autologin kiosk --noclear %I $TERM +``` + +#### Browser-Konfiguration +```bash +# Chromium-Kiosk startet automatisch mit: +# - Vollbildmodus +# - SSL-Zertifikat-Ignorierung für localhost +# - Optimierte Performance-Einstellungen +# - URL: https://localhost:443 +``` + +## Konfiguration + +### Netzwerk-Zugriff + +#### HTTPS-URLs +- **Lokal**: `https://localhost:443` +- **Netzwerk**: `https://:443` + +#### Firewall (falls aktiviert) +```bash +# Port 443 öffnen +sudo ufw allow 443/tcp +``` + +### SSL-Zertifikat für Netzwerk-Zugriff + +Für Zugriff von anderen Geräten im Netzwerk: + +```bash +# Zertifikat mit IP-Adresse generieren +sudo python3 -c " +import sys; sys.path.insert(0, '/opt/myp') +from utils.ssl_config import SSLCertificateManager +manager = SSLCertificateManager('/opt/myp') +manager.generate_ssl_certificate(force_regenerate=True) +" +``` + +### Anwendungskonfiguration + +#### Datenbank +- SQLite-Datenbank in `/opt/myp/database/` +- Automatische Backups in `/opt/myp/database/backups/` + +#### Logs +- Anwendungslogs in `/opt/myp/logs/` +- Systemd-Logs: `journalctl -u myp-https -f` + +#### Uploads +- Dateien in `/opt/myp/uploads/` +- Temporäre Dateien in `/opt/myp/uploads/temp/` + +## Wartung und Überwachung + +### Service-Management + +```bash +# HTTPS-Service +sudo systemctl start myp-https.service +sudo systemctl stop myp-https.service +sudo systemctl restart myp-https.service +sudo systemctl status myp-https.service + +# Kiosk-Service +sudo systemctl start myp-kiosk.service +sudo systemctl stop myp-kiosk.service +sudo systemctl status myp-kiosk.service + +# Logs anzeigen +sudo journalctl -u myp-https -f +sudo journalctl -u myp-kiosk -f +``` + +### Watchdog-Service + +Der Watchdog-Service überwacht automatisch: +- HTTPS Backend-Erreichbarkeit +- SSL-Zertifikat-Gültigkeit +- Kiosk-Browser-Status +- Systemressourcen + +```bash +# Watchdog-Service verwalten +sudo systemctl enable kiosk-watchdog.service +sudo systemctl start kiosk-watchdog.service + +# Watchdog-Logs +sudo tail -f /var/log/kiosk-watchdog.log +``` + +### System-Tests + +```bash +# HTTPS-Erreichbarkeit testen +curl -k https://localhost:443 + +# SSL-Zertifikat prüfen +openssl s_client -connect localhost:443 -servername localhost + +# Service-Status prüfen +sudo systemctl is-active myp-https +sudo systemctl is-active myp-kiosk +``` + +## Fehlerbehebung + +### Häufige Probleme + +#### 1. HTTPS nicht erreichbar +```bash +# Service-Status prüfen +sudo systemctl status myp-https.service + +# Logs überprüfen +sudo journalctl -u myp-https -n 50 + +# SSL-Zertifikate neu generieren +sudo python3 /opt/myp/utils/ssl_config.py /opt/myp --force +sudo systemctl restart myp-https.service +``` + +#### 2. Kiosk-Browser startet nicht +```bash +# X-Server-Status prüfen +ps aux | grep X + +# Kiosk-User-Session prüfen +sudo su - kiosk +echo $DISPLAY + +# Browser manuell starten +DISPLAY=:0 chromium --kiosk https://localhost:443 +``` + +#### 3. SSL-Zertifikat-Fehler +```bash +# Zertifikat-Gültigkeit prüfen +openssl x509 -in /opt/myp/certs/localhost/localhost.crt -text -noout + +# Zertifikat neu generieren +sudo rm -rf /opt/myp/certs/localhost/ +sudo python3 /opt/myp/utils/ssl_config.py /opt/myp --force +sudo systemctl restart myp-https.service +``` + +#### 4. Hohe Speichernutzung +```bash +# Speicher-Status prüfen +free -h + +# Browser-Cache leeren +sudo rm -rf /home/kiosk/.chromium-kiosk/Default/Cache/* +sudo rm -rf /home/kiosk/.cache/* + +# System-Cache leeren +sudo sync +sudo echo 3 > /proc/sys/vm/drop_caches +``` + +### Log-Dateien + +#### Anwendungslogs +```bash +# Hauptanwendung +tail -f /opt/myp/logs/app/app.log + +# Authentifizierung +tail -f /opt/myp/logs/auth/auth.log + +# Drucker-Management +tail -f /opt/myp/logs/printers/printers.log + +# Job-Management +tail -f /opt/myp/logs/jobs/jobs.log +``` + +#### Systemlogs +```bash +# HTTPS-Service +sudo journalctl -u myp-https -f + +# Kiosk-Service +sudo journalctl -u myp-kiosk -f + +# Watchdog-Service +sudo tail -f /var/log/kiosk-watchdog.log + +# System-Boot +sudo journalctl -b +``` + +## Sicherheit + +### SSL/TLS-Konfiguration +- TLS 1.2+ erforderlich +- Starke Cipher-Suites +- Selbstsignierte Zertifikate für localhost +- Automatische Zertifikat-Erneuerung + +### Netzwerk-Sicherheit +- HTTPS-only (kein HTTP) +- CSRF-Schutz aktiviert +- Session-Management +- Rate-Limiting + +### System-Sicherheit +- Minimale X11-Umgebung +- Kiosk-User ohne Sudo-Rechte +- Systemd-Service-Isolation +- Read-only Systempartitionen (optional) + +## Performance-Optimierung + +### Browser-Optimierung +```bash +# Chromium-Flags für bessere Performance +--disable-background-mode +--disable-dev-shm-usage +--memory-pressure-off +--max_old_space_size=512 +--disable-background-timer-throttling +``` + +### System-Optimierung +```bash +# GPU-Memory für Raspberry Pi +echo "gpu_mem=128" >> /boot/config.txt + +# Swap-Datei optimieren +sudo dphys-swapfile swapoff +sudo sed -i 's/CONF_SWAPSIZE=100/CONF_SWAPSIZE=512/' /etc/dphys-swapfile +sudo dphys-swapfile setup +sudo dphys-swapfile swapon +``` + +### Datenbank-Optimierung +```bash +# SQLite-Optimierungen in der Anwendung +PRAGMA journal_mode=WAL; +PRAGMA synchronous=NORMAL; +PRAGMA cache_size=10000; +PRAGMA temp_store=memory; +``` + +## Backup und Wiederherstellung + +### Automatische Backups +```bash +# Datenbank-Backups +/opt/myp/database/backups/ + +# Konfiguration sichern +sudo tar -czf /opt/myp/backups/config-$(date +%Y%m%d).tar.gz \ + /opt/myp/config/ \ + /etc/systemd/system/myp-*.service \ + /home/kiosk/.xinitrc \ + /home/kiosk/.bashrc +``` + +### Wiederherstellung +```bash +# System neu installieren +sudo ./combined.sh + +# Datenbank wiederherstellen +sudo cp backup.db /opt/myp/database/app.db +sudo chown root:root /opt/myp/database/app.db + +# Services neustarten +sudo systemctl restart myp-https.service +``` + +## Updates + +### Anwendungs-Updates +```bash +# Repository aktualisieren +cd /opt/myp +git pull origin main + +# Dependencies aktualisieren +sudo pip3 install -r requirements.txt --break-system-packages --upgrade +sudo npm install + +# Services neustarten +sudo systemctl restart myp-https.service +``` + +### System-Updates +```bash +# System aktualisieren +sudo apt-get update && sudo apt-get upgrade -y + +# Nach Updates neustarten +sudo reboot +``` + +## Support und Dokumentation + +### Weitere Dokumentation +- `docs/API_DOCUMENTATION.md` - API-Referenz +- `docs/CONFIGURATION.md` - Konfigurationsoptionen +- `docs/TROUBLESHOOTING.md` - Erweiterte Fehlerbehebung + +### Logs für Support +```bash +# Support-Informationen sammeln +sudo ./combined.sh # Option 5: System-Tests + +# Log-Bundle erstellen +sudo tar -czf myp-logs-$(date +%Y%m%d).tar.gz \ + /opt/myp/logs/ \ + /var/log/kiosk-watchdog.log \ + /var/log/myp-install.log +``` + +--- + +**Version**: 3.6.1 +**Letzte Aktualisierung**: Automatisch generiert +**Plattform**: Debian/Linux (Raspberry Pi OS) +**Modus**: HTTPS Kiosk (Port 443) \ No newline at end of file diff --git a/backend/docs/LOGS_FUNCTIONALITY_FIX.md b/backend/docs/LOGS_FUNCTIONALITY_FIX.md index 0519ecba..1ad7ef79 100644 --- a/backend/docs/LOGS_FUNCTIONALITY_FIX.md +++ b/backend/docs/LOGS_FUNCTIONALITY_FIX.md @@ -1 +1,206 @@ - \ No newline at end of file +# Log-Funktionalität Implementierung + +## Problembeschreibung +Die System-Logs im Admin-Dashboard wurden nicht geladen. Die JavaScript-Funktionalität fehlte und die API-Endpunkte waren unvollständig implementiert. + +## Durchgeführte Fixes + +### 1. API-Endpunkte Implementiert + +#### `/api/admin/logs` (GET) +- **Zweck**: Lädt System-Logs für das Admin-Dashboard +- **Features**: + - Multi-Format Log-Parser (unterstützt verschiedene Log-Formate) + - Level-Filter (ERROR, WARNING, INFO, DEBUG, CRITICAL, ALL) + - Suchfunktion in Log-Nachrichten + - Component-Filter nach Log-Kategorien + - Paginierung (limit/offset) + - Automatische Duplikat-Entfernung + - Sortierung nach Timestamp (neueste zuerst) + +#### `/api/admin/logs/export` (GET) +- **Zweck**: Exportiert alle Log-Dateien als ZIP-Archiv +- **Features**: + - Sammelt alle .log Dateien aus dem logs-Verzeichnis + - Erstellt komprimierte ZIP-Datei + - Relativer Pfad-Erhalt in der ZIP-Struktur + - Automatische Dateinamen mit Timestamp + +### 2. JavaScript-Funktionalität + +#### Admin-Dashboard Logs-Management +```javascript +// Neue Funktionen hinzugefügt: +- loadLogs(level = null) // Lädt Logs mit Filter +- displayLogs(logs) // Zeigt Logs formatiert an +- formatLogTimestamp(timestamp) // Formatiert Zeitstempel +- escapeHtml(text) // HTML-Escape für Sicherheit +- exportLogs() // Exportiert Logs als Datei +``` + +#### Event-Handler +- `#refresh-logs-btn` - Logs manuell aktualisieren +- `#export-logs-btn` - Logs exportieren +- `#log-level-filter` - Filter nach Log-Level + +#### Automatisches Laden +- Logs werden automatisch geladen wenn: + - URL-Parameter `tab=logs` gesetzt ist + - Das Logs-Container-Element sichtbar ist + - Die Seite das erste Mal geladen wird und der Logs-Tab aktiv ist + +### 3. HTML-Template Fixes + +#### Progress Bar Fixes +- Entfernt problematische Jinja2-Style-Attribute aus HTML +- Verlagert Style-Definitionen in separaten `