# MYP Druckerverwaltung

Ein umfassendes Druckerverwaltungssystem für Mercedes-Benz, optimiert für Debian/Linux-Systeme mit HTTPS-Kiosk-Modus.

## 🚀 Schnellstart

### Debian/Linux Kiosk-Installation (Empfohlen)

```bash
# Repository klonen
git clone <repository-url>
cd backend

# Konsolidiertes Setup-Skript ausführen
sudo ./setup.sh
```

**Installationsoptionen**:
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.

### Entwicklungsumgebung (Windows)

```bash
# Abhängigkeiten installieren
pip install -r requirements.txt
npm install

# Entwicklungsserver starten
python app.py --debug
```

## 📋 Systemanforderungen

### Produktionsumgebung (Kiosk)
- **Debian/Raspbian** (Raspberry Pi OS empfohlen)
- Raspberry Pi 4 mit 2GB+ RAM
- 16GB+ SD-Karte
- HDMI-Monitor
- Netzwerkverbindung

### Entwicklungsumgebung
- **Windows 10/11** (nur für Entwicklung)
- Python 3.8+
- Node.js 18+
- Git

## 🔧 Features

### Kern-Funktionalitäten
- **Druckerverwaltung** mit Smart-Plug-Integration (TP-Link Tapo)
- **Job-Management** mit Warteschlangen-System
- **Benutzerverwaltung** mit Rollen und Berechtigungen
- **Gast-Anfragen** für temporären Zugriff
- **Echtzeit-Dashboard** mit Live-Statistiken
- **Automatische Backups** und Wartung

### Kiosk-Modus Features
- **HTTPS auf Port 443** mit automatischen SSL-Zertifikaten
- **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
- **SSL/TLS-Verschlüsselung** (selbstsignierte Zertifikate)
- **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

### Backend
- **Flask 3.1.1** - Web-Framework
- **SQLAlchemy 2.0.36** - ORM und Datenbankzugriff
- **SQLite** - Eingebettete Datenbank
- **Gunicorn** - WSGI-Server für Produktion

### Frontend
- **TailwindCSS** - Utility-First CSS Framework
- **Chart.js** - Datenvisualisierung
- **FontAwesome** - Icons
- **Vanilla JavaScript** - Interaktivität

### System-Integration
- **systemd** - Service-Management
- **OpenSSL** - SSL-Zertifikat-Generierung
- **Chromium** - Kiosk-Browser
- **X11** - Minimale Grafikumgebung

## 📁 Projektstruktur

```
backend/
├── app.py                 # Hauptanwendung mit HTTPS-Support
├── models.py              # Datenbankmodelle
├── setup.sh               # Konsolidiertes Setup-Skript
├── requirements.txt       # Python-Abhängigkeiten
├── package.json           # Node.js-Abhängigkeiten
├── 
├── systemd/               # Systemd-Service-Dateien
│   ├── myp-https.service  # HTTPS-Backend-Service
│   ├── myp-kiosk.service  # Kiosk-Browser-Service
│   ├── kiosk-watchdog.service # Überwachungsservice
│   └── kiosk-watchdog-python.service # Python-Watchdog
├── 
├── blueprints/            # Flask-Blueprints
│   ├── auth.py           # Authentifizierung
│   ├── users.py          # Benutzerverwaltung
│   ├── printers.py       # Druckerverwaltung
│   ├── jobs.py           # Job-Management
│   └── guest.py          # Gast-Anfragen
├── 
├── config/               # Konfigurationsdateien
│   └── settings.py       # Hauptkonfiguration
├── 
├── utils/                # Hilfsfunktionen
│   ├── ssl_config.py     # SSL-Zertifikat-Management
│   ├── logging_config.py # Logging-Konfiguration
│   ├── queue_manager.py  # Job-Warteschlange
│   └── printer_monitor.py # Drucker-Überwachung
├── 
├── static/               # Statische Dateien
│   ├── css/             # Stylesheets
│   ├── js/              # JavaScript
│   └── icons/           # Icons und Bilder
├── 
├── templates/            # Jinja2-Templates
├── docs/                 # Dokumentation
├── logs/                 # Log-Dateien
└── uploads/              # Hochgeladene Dateien
```

## 🔧 Installation

### Option 1: Automatische Installation mit setup.sh (Empfohlen)

```bash
# Als Root ausführen
sudo ./setup.sh

# Menüoptionen:
# 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, manuelle Tests und Debugging
- **Option 2**: Vollständige Produktionsinstallation mit automatischem Kiosk-Start

### Option 2: Manuelle Installation

#### Schritt 1: System vorbereiten
```bash
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install -y python3 python3-pip nodejs npm git
```

#### Schritt 2: Abhängigkeiten installieren
```bash
# Python-Pakete (ohne virtuelles Environment)
pip3 install -r requirements.txt --break-system-packages

# Node.js-Pakete
npm install

# TailwindCSS kompilieren
npm run build:css
```

#### Schritt 3: SSL-Zertifikate generieren
```bash
python3 -c "
import sys; sys.path.insert(0, '.')
from utils.ssl_config import ensure_ssl_certificates
ensure_ssl_certificates('.', True)
"
```

#### Schritt 4: Services einrichten
```bash
# Services aus systemd/ Verzeichnis kopieren
sudo cp systemd/*.service /etc/systemd/system/
sudo systemctl daemon-reload

# HTTPS-Service aktivieren
sudo systemctl enable myp-https.service
sudo systemctl start myp-https.service

# Kiosk-Service aktivieren (optional)
sudo systemctl enable myp-kiosk.service
```

## 🌐 Zugriff

### Lokaler Zugriff
- **HTTPS**: `https://localhost:443`
- **HTTP (Entwicklung)**: `http://localhost:5000`

### Netzwerk-Zugriff
- **HTTPS**: `https://<raspberry-pi-ip>:443`

### Remote-Zugang (falls konfiguriert)
- **SSH**: `ssh user@<raspberry-pi-ip>` (Passwort: `raspberry`)
- **RDP**: `<raspberry-pi-ip>:3389` (Benutzer: `root`, Passwort: `744563017196A`)

### Standard-Anmeldedaten
- **Benutzername**: `admin`
- **Passwort**: `admin123`

⚠️ **Wichtig**: Ändern Sie das Standard-Passwort nach der ersten Anmeldung!

## 🔧 Konfiguration

### Umgebungsvariablen
```bash
# Produktionsumgebung
export FLASK_ENV=production
export FLASK_HOST=0.0.0.0
export FLASK_PORT=443

# Entwicklungsumgebung
export FLASK_ENV=development
export FLASK_HOST=127.0.0.1
export FLASK_PORT=5000
```

### SSL-Konfiguration
```bash
# Automatische Zertifikat-Generierung
python3 utils/ssl_config.py /opt/myp

# Manuelle Zertifikat-Erneuerung
python3 utils/ssl_config.py /opt/myp --force
```

### Drucker-Konfiguration
1. **Admin-Panel** → **Drucker** → **Neuer Drucker**
2. IP-Adresse und TP-Link Tapo-Zugangsdaten eingeben
3. Drucker-Test durchführen
4. Smart-Plug-Integration aktivieren

## 📊 Überwachung

### Service-Status
```bash
# HTTPS-Service
sudo systemctl status myp-https.service
sudo journalctl -u myp-https -f

# Kiosk-Service
sudo systemctl status myp-kiosk.service
sudo journalctl -u myp-kiosk -f

# Watchdog-Service
sudo systemctl status kiosk-watchdog.service
sudo tail -f /var/log/kiosk-watchdog.log
```

### System-Tests
```bash
# HTTPS-Erreichbarkeit
curl -k https://localhost:443

# SSL-Zertifikat prüfen
openssl s_client -connect localhost:443 -servername localhost

# Automatische Tests mit setup.sh
sudo ./setup.sh # Option 5: System-Test
```

### Log-Dateien
```bash
# Anwendungslogs
tail -f logs/app/app.log
tail -f logs/auth/auth.log
tail -f logs/printers/printers.log

# Systemlogs
sudo journalctl -u myp-https -f
sudo tail -f /var/log/kiosk-watchdog.log

# Installationslog
sudo tail -f /var/log/myp-install.log
```

## 🛠️ Entwicklung

### Entwicklungsserver starten
```bash
# HTTP-Entwicklungsserver (Port 5000)
python app.py --debug

# HTTPS-Produktionsserver (Port 443)
python app.py
```

### Frontend-Entwicklung
```bash
# TailwindCSS im Watch-Modus
npm run watch:css

# CSS kompilieren
npm run build:css

# Alle Assets bauen
npm run build
```

### Datenbank-Management
```bash
# Datenbank initialisieren
python -c "from models import init_database; init_database()"

# Backup erstellen
python -c "from utils.backup_manager import BackupManager; BackupManager().create_backup()"
```

## 🔒 Sicherheit

### SSL/TLS
- **TLS 1.2+** erforderlich
- **Starke Cipher-Suites** konfiguriert
- **Selbstsignierte Zertifikate** für localhost
- **Automatische Erneuerung** bei Ablauf

### Anwendungssicherheit
- **CSRF-Schutz** aktiviert
- **Session-Management** mit Timeout
- **Rate-Limiting** für API-Endpunkte
- **Eingabevalidierung** und Sanitization

### System-Sicherheit
- **Minimale X11-Umgebung** ohne Desktop
- **Kiosk-User** ohne Sudo-Rechte
- **Systemd-Service-Isolation**
- **Read-only Systempartitionen** (optional)

## 📚 Dokumentation

### Detaillierte Anleitungen
- [`docs/SETUP_ANLEITUNG.md`](docs/SETUP_ANLEITUNG.md) - Konsolidiertes Setup-System
- [`docs/INSTALLATION_DEBIAN_KIOSK.md`](docs/INSTALLATION_DEBIAN_KIOSK.md) - Vollständige Kiosk-Installation
- [`docs/API_DOCUMENTATION.md`](docs/API_DOCUMENTATION.md) - API-Referenz
- [`docs/CONFIGURATION.md`](docs/CONFIGURATION.md) - Konfigurationsoptionen
- [`docs/TROUBLESHOOTING.md`](docs/TROUBLESHOOTING.md) - Fehlerbehebung

### API-Endpunkte
- **Authentifizierung**: `/auth/login`, `/auth/logout`
- **Drucker**: `/api/printers`, `/api/printers/{id}`
- **Jobs**: `/api/jobs`, `/api/jobs/{id}`
- **Benutzer**: `/api/users`, `/api/users/{id}`
- **Dashboard**: `/api/dashboard/refresh`, `/api/stats`

## 🐛 Fehlerbehebung

### Häufige Probleme

#### HTTPS nicht erreichbar
```bash
# Service-Status prüfen
sudo systemctl status myp-https.service

# SSL-Zertifikate neu generieren
sudo python3 utils/ssl_config.py /opt/myp --force
sudo systemctl restart myp-https.service

# Oder mit setup.sh
sudo ./setup.sh # Option 1 für Zertifikat-Neugenerierung
```

#### Kiosk-Browser startet nicht
```bash
# X-Server prüfen
ps aux | grep X

# Browser manuell starten
sudo su - kiosk
DISPLAY=:0 chromium --kiosk https://localhost:443

# Service-Status prüfen
sudo systemctl status myp-kiosk.service
```

#### Hohe Speichernutzung
```bash
# Browser-Cache leeren
sudo rm -rf /home/kiosk/.chromium-kiosk/Default/Cache/*

# System-Cache leeren
sudo sync && sudo echo 3 > /proc/sys/vm/drop_caches

# Watchdog überwacht automatisch Speichernutzung
sudo journalctl -u kiosk-watchdog -f
```

### Support
Bei Problemen:
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 \
  logs/ \
  /var/log/kiosk-watchdog.log \
  /var/log/myp-install.log
```

## 🔄 Updates

### Anwendungs-Updates
```bash
cd /opt/myp
git pull origin main
sudo pip3 install -r requirements.txt --break-system-packages --upgrade
sudo npm install

# Services mit setup.sh aktualisieren
sudo ./setup.sh # Option 3: Nur Services installieren

sudo systemctl restart myp-https.service
```

### System-Updates
```bash
sudo apt-get update && sudo apt-get upgrade -y
sudo reboot
```

## 📄 Lizenz

Dieses Projekt ist für den internen Gebrauch bei Mercedes-Benz entwickelt.

## 🤝 Beitragen

1. Fork des Repositories erstellen
2. Feature-Branch erstellen (`git checkout -b feature/AmazingFeature`)
3. Änderungen committen (`git commit -m 'Add some AmazingFeature'`)
4. Branch pushen (`git push origin feature/AmazingFeature`)
5. Pull Request erstellen

## 📞 Support

- **Dokumentation**: [`docs/`](docs/) Verzeichnis
- **Setup-Anleitung**: [`docs/SETUP_ANLEITUNG.md`](docs/SETUP_ANLEITUNG.md)
- **Issues**: GitHub Issues für Bug-Reports
- **Logs**: Automatische Log-Sammlung mit `setup.sh`

---

**Version**: 4.0.0  
**Plattform**: Debian/Linux (Raspberry Pi OS)  
**Modus**: HTTPS Kiosk (Port 443)  
**Setup**: Konsolidiertes `setup.sh` System  
**Entwickelt für**: Mercedes-Benz MYP 