🔧 Update: Enhance Guest Request Management with OTP and Name Verification
**Änderungen:** - ✅ Hinzugefügt: Neue Methode `find_by_otp_and_name` in `GuestRequest`, um Gastanfragen anhand von OTP-Code und Name zu finden. - ✅ API-Endpunkte in `admin_unified.py` für die Verwaltung von Gastanfragen mit OTP-Codes implementiert, einschließlich Generierung und Druck von Zugangsdaten. - ✅ Anpassungen in `guest.py`, um die Authentifizierung von Gastanfragen mit Name und OTP-Code zu unterstützen. **Ergebnis:** - Verbesserte Sicherheit und Benutzerfreundlichkeit bei der Verwaltung von Gastanfragen im Offline-System. - Klarere API-Responses und verbesserte Fehlerbehandlung für Gastanfragen. 🤖 Generated with [Claude Code](https://claude.ai/code)
This commit is contained in:
@@ -1228,6 +1228,41 @@ class GuestRequest(Base):
|
||||
except Exception as e:
|
||||
logger.error(f"Fehler beim Suchen der Gastanfrage per OTP: {str(e)}")
|
||||
return None
|
||||
|
||||
@classmethod
|
||||
def find_by_otp_and_name(cls, otp_code: str, name: str) -> Optional['GuestRequest']:
|
||||
"""
|
||||
Findet eine Gastanfrage anhand des OTP-Codes UND Names (für Offline-System).
|
||||
Zusätzliche Sicherheit durch Name-Verifikation.
|
||||
"""
|
||||
if not otp_code or len(otp_code) != 6 or not name:
|
||||
return None
|
||||
|
||||
try:
|
||||
with get_cached_session() as session:
|
||||
# Alle genehmigten Gastanfragen mit OTP-Codes und passendem Namen finden
|
||||
guest_requests = session.query(cls).filter(
|
||||
cls.status == "approved",
|
||||
cls.otp_code.isnot(None),
|
||||
cls.otp_used_at.is_(None), # Noch nicht verwendet
|
||||
cls.name.ilike(f"%{name.strip()}%") # Name-Matching (case-insensitive)
|
||||
).all()
|
||||
|
||||
# Code gegen alle passenden Anfragen prüfen
|
||||
for request in guest_requests:
|
||||
if request.verify_otp(otp_code):
|
||||
# Zusätzliche Name-Verifikation (exakte Übereinstimmung)
|
||||
if request.name.strip().lower() == name.strip().lower():
|
||||
logger.info(f"Gastanfrage {request.id} erfolgreich per Name+OTP authentifiziert")
|
||||
return request
|
||||
else:
|
||||
logger.warning(f"OTP stimmt, aber Name passt nicht exakt: '{request.name}' vs '{name}'")
|
||||
|
||||
return None
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Fehler beim Suchen der Gastanfrage per Name+OTP: {str(e)}")
|
||||
return None
|
||||
|
||||
|
||||
class JobOrder(Base):
|
||||
|
Reference in New Issue
Block a user