🔧 Update: Enhanced error handling and logging across various modules
**Änderungen:** - ✅ app.py: Hinzugefügt, um CSRF-Fehler zu behandeln - ✅ models.py: Fehlerprotokollierung bei der Suche nach Gastanfragen per OTP - ✅ api.py: Fehlerprotokollierung beim Markieren von Benachrichtigungen als gelesen - ✅ calendar.py: Fallback-Daten zurückgeben, wenn keine Kalenderereignisse vorhanden sind - ✅ guest.py: Status-Check-Seite für Gäste aktualisiert - ✅ hardware_integration.py: Debugging-Informationen für erweiterte Geräteinformationen hinzugefügt - ✅ tapo_status_manager.py: Rückgabewert für Statusabfrage hinzugefügt **Ergebnis:** - Verbesserte Fehlerbehandlung und Protokollierung für eine robustere Anwendung - Bessere Nachverfolgbarkeit von Fehlern und Systemverhalten 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
# MYP - Manage Your Printer
|
||||
|
||||
## Präsentations-Gliederung für IHK-Abschlussprüfung
|
||||
|
||||
**Zielgruppe:** IHK-Prüfungsausschuss Fachinformatiker für digitale Vernetzung
|
||||
**Präsentationsdauer:** 20 Minuten + 10 Minuten Fragen
|
||||
**Zielgruppe:** IHK-Prüfungsausschuss Fachinformatiker für digitale Vernetzung
|
||||
**Präsentationsdauer:** 20 Minuten + 10 Minuten Fragen
|
||||
**Tool:** Gamma.app (AI-basierte Präsentationserstellung)
|
||||
|
||||
---
|
||||
@@ -10,78 +11,86 @@
|
||||
## 🏗️ STRUKTUR-ÜBERSICHT (19 Folien)
|
||||
|
||||
### **BLOCK I: EINFÜHRUNG & PROBLEMSTELLUNG** (4 Folien | 4 Minuten)
|
||||
|
||||
1. **Titel & Begrüßung** *(30 Sek)*
|
||||
|
||||
- Projektname, Ausbildungsbetrieb, persönliche Vorstellung
|
||||
|
||||
2. **Über mich - IT als Leidenschaft** *(1 Min)*
|
||||
|
||||
- Linux seit 2018, private Infrastruktur, Mercedes seit 2022
|
||||
- IT-Beruf als Leidenschaft und kontinuierliche Weiterentwicklung
|
||||
|
||||
3. **Problemanalyse - Das Whiteboard-Chaos** *(1,5 Min)*
|
||||
|
||||
- 6 moderne 3D-Drucker (>10.000€) mit analoger Kreideverwaltung
|
||||
- Probleme: Doppelbuchungen, Energieverschwendung, keine Statistiken
|
||||
|
||||
4. **Projektauftrag & Zielsetzung** *(1 Min)*
|
||||
|
||||
- Offizieller Auftrag: Volldigitalisierung der Druckerverwaltung
|
||||
- SMART-Ziele, Budget 600€, Zeitrahmen 35h
|
||||
|
||||
### **BLOCK II: TECHNISCHE HERAUSFORDERUNG & LÖSUNG** (4 Folien | 8,5 Minuten)
|
||||
|
||||
5. **Technische Herausforderungsanalyse** *(2 Min)*
|
||||
|
||||
- Hardware-Heterogenität, Mercedes-Sicherheitsanforderungen, Legacy-Integration
|
||||
|
||||
6. **Der innovative Lösungsansatz** *(2 Min)*
|
||||
|
||||
- Smart-Plug-Integration als IoT-Gateway-Lösung
|
||||
- Universell, lokal, kosteneffizient
|
||||
|
||||
7. **Systemarchitektur & Technologie-Stack** *(2,5 Min)*
|
||||
|
||||
- 3-Schichten-Architektur: Python/Flask, SQLite, HTML/CSS
|
||||
- Raspberry Pi 5, TP-Link Tapo P110 Smart-Plugs
|
||||
|
||||
8. **Wireshark-Detektivarbeit** *(2 Min)*
|
||||
|
||||
- Reverse Engineering der proprietären Tapo-API
|
||||
- 3 Tage Protokollanalyse, PyP100-Bibliothek als Lösung
|
||||
|
||||
### **BLOCK III: DEMONSTRATION & ERGEBNISSE** (6 Folien | 9 Minuten)
|
||||
|
||||
9. **Live-Demo Vorbereitung** *(30 Sek)*
|
||||
|
||||
- Demo-Szenario und Backup-Plan vorstellen
|
||||
|
||||
10. **[LIVE-DEMO]** *(3-4 Min)*
|
||||
|
||||
- Login, Dashboard, Reservierung, Smart-Plug-Steuerung, Admin-Panel
|
||||
|
||||
11. **Quantifizierte Projektergebnisse** *(1,5 Min)*
|
||||
|
||||
- 9.247 Zeilen Code, 100% Digitalisierung, 30% Energieeinsparung
|
||||
- 47 Nutzer, 156 Druckjobs, 98,7% Verfügbarkeit
|
||||
|
||||
12. **Herausforderungen & Problemlösungen** *(1,5 Min)*
|
||||
|
||||
- Hardware-Upgrade, Frontend-Pivot, Netzwerk-Latenz, Zeitmanagement
|
||||
|
||||
13. **Sicherheitskonzept & Compliance** *(1,5 Min)*
|
||||
|
||||
- bcrypt, HTTPS, Rate-Limiting, Air-Gapped-Architektur
|
||||
- Vollständige Mercedes-Standards-Erfüllung
|
||||
|
||||
14. **Kostenkalkulation & Wirtschaftlichkeit** *(2 Min)*
|
||||
|
||||
- Hardware: 187€ (statt 600€ Budget)
|
||||
- ROI: 3,1 Monate durch 720€ jährliche Einsparung
|
||||
- 98,8% Kostenersparnis vs. kommerzielle Lösungen
|
||||
|
||||
### **BLOCK IV: REFLEXION & AUSBLICK** (5 Folien | 6,5 Minuten)
|
||||
|
||||
15. **Lessons Learned & Schlüsselerkenntnisse** *(1,5 Min)*
|
||||
|
||||
- Technische, methodische und persönliche Learnings
|
||||
- Legacy-Integration, Security-by-Design, agile Anpassung
|
||||
|
||||
16. **Zukunftsausblick & Skalierungspotenzial** *(1,5 Min)*
|
||||
|
||||
- Kurzfristig: Intranet-Integration, Mobile App
|
||||
- Langfristig: Universal Maker-Space-Platform, konzernweite Lösung
|
||||
|
||||
17. **Projekt-Impact & Nachhaltigkeit** *(1 Min)*
|
||||
|
||||
- 47 Nutzer, 500 kWh/Jahr Einsparung, Bildungsauftrag
|
||||
- Vorbild-Charakter für andere Standorte
|
||||
|
||||
18. **Fazit & Kernbotschaften** *(1 Min)*
|
||||
|
||||
- 5 Kernaussagen: Innovation, Effizienz, Wirtschaftlichkeit, Sicherheit, Skalierung
|
||||
- Persönliches Statement und Abschluss-Zitat
|
||||
|
||||
19. **Vielen Dank - Fragen & Diskussion** *(30 Sek)*
|
||||
|
||||
- Kontaktdaten und Überleitung zur Fragerunde
|
||||
|
||||
---
|
||||
@@ -89,16 +98,19 @@
|
||||
## 🎯 GAMMA.APP OPTIMIERUNGEN
|
||||
|
||||
### **Prompt-Strategie**
|
||||
|
||||
- **Strukturierter Input:** 19 Folien mit detaillierter Themenbeschreibung
|
||||
- **Mercedes-Branding:** Farbschema Silber/Schwarz/Blau implementieren
|
||||
- **Technische Visualisierungen:** Systemarchitektur-Diagramme, Kostenkalkulationen
|
||||
|
||||
### **Design-Features nutzen**
|
||||
|
||||
- **Custom Templates:** Mercedes-konforme Vorlage erstellen
|
||||
- **Interaktive Elemente:** Klickbare Diagramme und Kostenübersichten
|
||||
- **Export-Optionen:** Web-Präsentation + PowerPoint-Backup
|
||||
|
||||
### **Zeitmanagement**
|
||||
|
||||
- **Vorbereitung:** 2-3 Stunden (Setup, Content, Design, Tests)
|
||||
- **Präsentationstag:** 15 Min Gamma.app-Test + PowerPoint-Backup
|
||||
|
||||
@@ -106,16 +118,17 @@
|
||||
|
||||
## 📊 THEMATISCHE GEWICHTUNG
|
||||
|
||||
| Themenbereich | Folien | Zeit | Anteil |
|
||||
|---------------|---------|------|--------|
|
||||
| **Problemstellung & Auftrag** | 4 | 4:00 Min | 20% |
|
||||
| **Technische Lösung** | 4 | 8:30 Min | 42,5% |
|
||||
| **Demo & Ergebnisse** | 6 | 9:00 Min | 45% |
|
||||
| **Reflexion & Ausblick** | 5 | 6:30 Min | 32,5% |
|
||||
| Themenbereich | Folien | Zeit | Anteil |
|
||||
| ----------------------------------- | ------ | -------- | ------ |
|
||||
| **Problemstellung & Auftrag** | 4 | 4:00 Min | 20% |
|
||||
| **Technische Lösung** | 4 | 8:30 Min | 42,5% |
|
||||
| **Demo & Ergebnisse** | 6 | 9:00 Min | 45% |
|
||||
| **Reflexion & Ausblick** | 5 | 6:30 Min | 32,5% |
|
||||
|
||||
### **Qualitative Schwerpunkte**
|
||||
|
||||
- **40% Technische Kompetenz:** Architektur, Sicherheit, Innovation
|
||||
- **30% Wirtschaftlichkeit:** ROI, Kostenoptimierung, Nachhaltigkeit
|
||||
- **30% Wirtschaftlichkeit:** ROI, Kostenoptimierung, Nachhaltigkeit
|
||||
- **20% Projektmanagement:** Problemlösung, Zeitmanagement, Stakeholder
|
||||
- **10% Persönlichkeit:** Leidenschaft, Reflexion, Zukunftsvision
|
||||
|
||||
@@ -124,16 +137,19 @@
|
||||
## 🎤 PRÄSENTATIONS-TIPPS
|
||||
|
||||
### **Gamma.app spezifisch**
|
||||
|
||||
- **Internet-Backup:** Ethernet-Kabel für stabile Verbindung
|
||||
- **Browser-Test:** Chrome/Firefox aktuell, Vollbild-Modus testen
|
||||
- **Navigation:** Pfeiltasten und Presenter-Modus vorbereiten
|
||||
|
||||
### **Storytelling-Elemente**
|
||||
|
||||
- **Problem-Story:** Whiteboard-Chaos als emotionaler Einstieg
|
||||
- **Detektiv-Story:** Wireshark-Analyse als Spannungselement
|
||||
- **Detektiv-Story:** Wireshark-Analyse als Spannungselement
|
||||
- **Success-Story:** Quantifizierte Ergebnisse als Höhepunkt
|
||||
|
||||
### **Live-Demo Strategie**
|
||||
|
||||
- **Primär:** Echtes System mit Internet-Verbindung
|
||||
- **Backup:** Screenshots aller Demo-Schritte vorbereitet
|
||||
- **Notfall:** Video-Recording (2-3 Min) als letzte Option
|
||||
@@ -143,25 +159,29 @@
|
||||
## ✅ SUCCESS-FAKTOREN
|
||||
|
||||
### **Technische Exzellenz zeigen**
|
||||
|
||||
- Detaillierte Architektur-Erklärung
|
||||
- Sicherheitsstandards hervorheben
|
||||
- Sicherheitsstandards hervorheben
|
||||
- Innovative IoT-Lösung präsentieren
|
||||
|
||||
### **Wirtschaftliche Kompetenz demonstrieren**
|
||||
|
||||
- Präzise Kostenkalkulation
|
||||
- ROI-Berechnung schlüssig erklären
|
||||
- Vergleich zu kommerziellen Lösungen
|
||||
|
||||
### **Persönliche Entwicklung reflektieren**
|
||||
|
||||
- Lessons Learned ehrlich darstellen
|
||||
- Problemlösungskompetenz zeigen
|
||||
- Zukunftsvision entwickeln
|
||||
|
||||
### **Mercedes-Standards erfüllen**
|
||||
|
||||
- Sicherheit als Kernthema behandeln
|
||||
- Nachhaltigkeit und Effizienz betonen
|
||||
- Skalierungspotenzial aufzeigen
|
||||
|
||||
---
|
||||
|
||||
**Status:** ✅ Gamma.app-optimiert | ✅ Mercedes-konform | ✅ IHK-Standard
|
||||
**Status:** ✅ Gamma.app-optimiert | ✅ Mercedes-konform | ✅ IHK-Standard
|
||||
|
221
docs/OTP_SYSTEM.md
Normal file
221
docs/OTP_SYSTEM.md
Normal file
@@ -0,0 +1,221 @@
|
||||
# OTP-System für Gastaufträge
|
||||
|
||||
## Übersicht
|
||||
|
||||
Das MYP-System verwendet ein sicheres 6-stelliges OTP (One-Time Password) System für die Ausführung genehmigter Gastaufträge. Dieses System ermöglicht es Gästen, ihre genehmigten Druckaufträge ohne Anmeldung zu starten.
|
||||
|
||||
## Funktionsweise
|
||||
|
||||
### 1. Antragstellung
|
||||
- Gäste stellen über `/guest/request` einen Druckantrag
|
||||
- System generiert automatisch eine eindeutige Anfrage-ID
|
||||
- Admin wird über neue Anträge benachrichtigt
|
||||
|
||||
### 2. Admin-Genehmigung
|
||||
- Admins können Anträge über `/admin/guest-requests` verwalten
|
||||
- Bei Genehmigung wird automatisch ein 6-stelliger OTP-Code generiert
|
||||
- Code besteht aus Großbuchstaben (A-Z) und Zahlen (0-9)
|
||||
- Gültigkeitsdauer: 72 Stunden ab Genehmigung
|
||||
|
||||
### 3. Code-Verwendung
|
||||
- Gäste können über `/guest/start` ihren Code eingeben
|
||||
- System validiert Code und startet den zugehörigen Job
|
||||
- Code wird nach einmaliger Verwendung ungültig
|
||||
- Drucker wird automatisch über Tapo-Steckdose eingeschaltet
|
||||
|
||||
## Technische Details
|
||||
|
||||
### OTP-Generierung
|
||||
```python
|
||||
def generate_otp(self) -> str:
|
||||
"""Generiert einen 6-stelligen alphanumerischen OTP-Code."""
|
||||
characters = string.ascii_uppercase + string.digits
|
||||
otp_plain = ''.join(secrets.choice(characters) for _ in range(6))
|
||||
|
||||
# Hash speichern für sichere Verifikation
|
||||
otp_bytes = otp_plain.encode('utf-8')
|
||||
salt = bcrypt.gensalt()
|
||||
self.otp_code = bcrypt.hashpw(otp_bytes, salt).decode('utf-8')
|
||||
|
||||
# Ablaufzeit setzen
|
||||
self.otp_expires_at = datetime.now() + timedelta(hours=72)
|
||||
|
||||
return otp_plain
|
||||
```
|
||||
|
||||
### Code-Verifikation
|
||||
```python
|
||||
def verify_otp(self, otp_plain: str) -> bool:
|
||||
"""Verifiziert einen 6-stelligen OTP-Code."""
|
||||
# Normalisierung und Validierung
|
||||
otp_normalized = otp_plain.upper().strip()
|
||||
|
||||
# Prüfungen: Länge, Verwendung, Ablauf
|
||||
if len(otp_normalized) != 6:
|
||||
return False
|
||||
if self.otp_used_at:
|
||||
return False
|
||||
if self.otp_expires_at and datetime.now() > self.otp_expires_at:
|
||||
return False
|
||||
|
||||
# Bcrypt-Verifikation
|
||||
return bcrypt.checkpw(otp_normalized.encode('utf-8'),
|
||||
self.otp_code.encode('utf-8'))
|
||||
```
|
||||
|
||||
## Sicherheitsfeatures
|
||||
|
||||
### 1. Kryptographische Sicherheit
|
||||
- Verwendung von `secrets` Modul für kryptographisch sichere Zufallszahlen
|
||||
- Bcrypt-Hashing mit Salt für Code-Speicherung
|
||||
- Keine Klartext-Speicherung der Codes
|
||||
|
||||
### 2. Zeitbasierte Gültigkeit
|
||||
- Automatischer Ablauf nach 72 Stunden
|
||||
- Einmalige Verwendung pro Code
|
||||
- Zeitstempel für Verwendung und Ablauf
|
||||
|
||||
### 3. Validierung
|
||||
- Eingabe-Normalisierung (Großbuchstaben)
|
||||
- Längen-Validierung (exakt 6 Zeichen)
|
||||
- Alphanumerische Zeichen-Prüfung
|
||||
|
||||
## API-Endpunkte
|
||||
|
||||
### Für Gäste
|
||||
- `GET /guest/start` - Code-Eingabe-Formular
|
||||
- `POST /api/guest/start-job` - Job mit Code starten
|
||||
|
||||
### Für Admins
|
||||
- `GET /api/admin/requests/{id}/otp` - OTP-Code abrufen
|
||||
- `POST /api/requests/{id}/approve` - Antrag genehmigen (generiert OTP)
|
||||
- `POST /api/requests/{id}/deny` - Antrag ablehnen/widerrufen
|
||||
|
||||
## Datenbank-Schema
|
||||
|
||||
### GuestRequest Erweiterungen
|
||||
```sql
|
||||
-- OTP-Verwaltung
|
||||
otp_code VARCHAR(100) NULL, -- Bcrypt-Hash des OTP-Codes
|
||||
otp_expires_at DATETIME NULL, -- Ablaufzeit des Codes
|
||||
otp_used_at DATETIME NULL, -- Zeitpunkt der Verwendung
|
||||
|
||||
-- Admin-Verwaltung
|
||||
approved_by INTEGER NULL, -- Admin der genehmigt hat
|
||||
approved_at DATETIME NULL, -- Zeitpunkt der Genehmigung
|
||||
rejection_reason TEXT NULL, -- Grund bei Ablehnung
|
||||
```
|
||||
|
||||
## Benutzerführung
|
||||
|
||||
### Für Gäste
|
||||
1. Antrag über Webformular stellen
|
||||
2. Warten auf Admin-Genehmigung
|
||||
3. 6-stelligen Code erhalten (E-Mail/Benachrichtigung)
|
||||
4. Code auf Startseite eingeben
|
||||
5. Job wird automatisch gestartet
|
||||
|
||||
### Für Admins
|
||||
1. Benachrichtigung über neue Anträge
|
||||
2. Anträge in Admin-Panel prüfen
|
||||
3. Genehmigen oder ablehnen
|
||||
4. OTP-Code bei Bedarf anzeigen/kopieren
|
||||
5. Genehmigungen bei Bedarf widerrufen
|
||||
|
||||
## Monitoring & Logging
|
||||
|
||||
### System-Logs
|
||||
- OTP-Generierung wird protokolliert
|
||||
- Code-Verifikation wird geloggt
|
||||
- Fehlgeschlagene Versuche werden erfasst
|
||||
- Admin-Aktionen werden dokumentiert
|
||||
|
||||
### Metriken
|
||||
- Anzahl generierter Codes
|
||||
- Erfolgsrate der Code-Verwendung
|
||||
- Durchschnittliche Zeit bis zur Verwendung
|
||||
- Abgelaufene/ungenutzte Codes
|
||||
|
||||
## Fehlerbehandlung
|
||||
|
||||
### Häufige Fehlerszenarien
|
||||
1. **Ungültiger Code**: Code existiert nicht oder falsch eingegeben
|
||||
2. **Abgelaufener Code**: Code ist älter als 72 Stunden
|
||||
3. **Bereits verwendeter Code**: Code wurde bereits einmal benutzt
|
||||
4. **Kein zugehöriger Job**: Job wurde gelöscht oder ist nicht verfügbar
|
||||
5. **Job nicht startbar**: Job-Status erlaubt keinen Start
|
||||
|
||||
### Error-Responses
|
||||
```json
|
||||
{
|
||||
"success": false,
|
||||
"error": "Ungültiger oder bereits verwendeter Code"
|
||||
}
|
||||
```
|
||||
|
||||
## Konfiguration
|
||||
|
||||
### Einstellungen
|
||||
```python
|
||||
# OTP-Konfiguration
|
||||
OTP_LENGTH = 6 # Code-Länge
|
||||
OTP_VALIDITY_HOURS = 72 # Gültigkeitsdauer
|
||||
OTP_CHARACTERS = string.ascii_uppercase + string.digits
|
||||
|
||||
# Sicherheits-Einstellungen
|
||||
BCRYPT_ROUNDS = 12 # Bcrypt-Komplexität
|
||||
MAX_OTP_ATTEMPTS = 3 # Max. Versuche pro IP
|
||||
```
|
||||
|
||||
## Wartung & Administration
|
||||
|
||||
### Regelmäßige Aufgaben
|
||||
1. **Cleanup abgelaufener Codes**: Automatische Bereinigung alter OTP-Einträge
|
||||
2. **Monitoring**: Überwachung der Code-Verwendung und Erfolgsraten
|
||||
3. **Backup**: Sicherung der OTP-Daten bei System-Backups
|
||||
|
||||
### Admin-Funktionen
|
||||
- OTP-Code für genehmigte Anträge anzeigen
|
||||
- Genehmigungen widerrufen (invalidiert OTP)
|
||||
- Statistiken über Code-Verwendung
|
||||
- Manuelle Code-Invalidierung bei Bedarf
|
||||
|
||||
## Sicherheitsrichtlinien
|
||||
|
||||
### Best Practices
|
||||
1. **Codes niemals in Logs speichern** - Nur Hashes verwenden
|
||||
2. **Sichere Übertragung** - HTTPS für alle OTP-Operationen
|
||||
3. **Rate Limiting** - Begrenzung der Versuche pro IP
|
||||
4. **Monitoring** - Überwachung verdächtiger Aktivitäten
|
||||
5. **Regelmäßige Audits** - Überprüfung der OTP-Verwendung
|
||||
|
||||
### Compliance
|
||||
- DSGVO-konform: Keine unnötige Speicherung persönlicher Daten
|
||||
- Sicherheitsstandards: Verwendung bewährter Kryptographie
|
||||
- Audit-Trail: Vollständige Protokollierung aller Aktionen
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Häufige Probleme
|
||||
1. **Code funktioniert nicht**: Prüfung auf Tippfehler, Ablauf, Verwendung
|
||||
2. **Job startet nicht**: Validierung des Job-Status und Drucker-Verfügbarkeit
|
||||
3. **Admin sieht keinen Code**: Prüfung der Genehmigung und OTP-Generierung
|
||||
|
||||
### Debug-Informationen
|
||||
```python
|
||||
# OTP-Status prüfen
|
||||
request.get_otp_status() # 'valid', 'used', 'expired', 'not_generated'
|
||||
|
||||
# Verifikation testen
|
||||
request.verify_otp(code) # True/False
|
||||
|
||||
# Code-Informationen
|
||||
request.otp_expires_at # Ablaufzeit
|
||||
request.otp_used_at # Verwendungszeit
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Version**: 1.0.0
|
||||
**Letzte Aktualisierung**: $(date +%Y-%m-%d)
|
||||
**Autor**: MYP Development Team
|
Reference in New Issue
Block a user