diff --git a/backend/app/database/myp.db b/backend/app/database/myp.db index 472bd635..f69bc3a2 100644 Binary files a/backend/app/database/myp.db and b/backend/app/database/myp.db differ diff --git a/backend/app/database/myp.db-wal b/backend/app/database/myp.db-wal index 2d7f1f82..4a7915b1 100644 Binary files a/backend/app/database/myp.db-wal and b/backend/app/database/myp.db-wal differ diff --git a/backend/app/debug_login.py b/backend/app/debug_login.py index 0519ecba..875fd484 100644 --- a/backend/app/debug_login.py +++ b/backend/app/debug_login.py @@ -1 +1,199 @@ - \ No newline at end of file +#!/usr/bin/env python3.11 +""" +Debug-Script für Login-Probleme +Prüft Admin-Benutzer und Passwort-Hashing +""" + +import os +import sys +from datetime import datetime + +# Path für imports setzen +sys.path.append(os.path.dirname(os.path.abspath(__file__))) + +from models import get_db_session, User, create_initial_admin +import bcrypt + +def debug_admin_user(): + """Prüft den Admin-Benutzer in der Datenbank""" + print("=== DEBUG: Admin-Benutzer Analyse ===") + + try: + db_session = get_db_session() + + # Alle Benutzer anzeigen + users = db_session.query(User).all() + print(f"\n📊 Gefundene Benutzer: {len(users)}") + + for user in users: + print(f"\n👤 Benutzer ID: {user.id}") + print(f" Email: {user.email}") + print(f" Username: {user.username}") + print(f" Name: {user.name}") + print(f" Role: {user.role}") + print(f" Is Admin: {user.is_admin}") + print(f" Active: {user.active}") + print(f" Password Hash: {user.password_hash[:20]}...") + print(f" Created: {user.created_at}") + + # Admin-Benutzer spezifisch prüfen + admin_email = "admin@mercedes-benz.com" + admin_username = "admin" + + print(f"\n🔍 Suche nach Admin-Benutzer:") + print(f" Email: {admin_email}") + print(f" Username: {admin_username}") + + # Suche nach E-Mail + admin_by_email = db_session.query(User).filter(User.email == admin_email).first() + if admin_by_email: + print(f"✅ Admin gefunden per E-Mail: {admin_by_email.email}") + else: + print(f"❌ Kein Admin mit E-Mail {admin_email} gefunden") + + # Suche nach Username + admin_by_username = db_session.query(User).filter(User.username == admin_username).first() + if admin_by_username: + print(f"✅ Admin gefunden per Username: {admin_by_username.username}") + else: + print(f"❌ Kein Admin mit Username {admin_username} gefunden") + + db_session.close() + + return admin_by_email or admin_by_username + + except Exception as e: + print(f"❌ Fehler beim Datenbankzugriff: {str(e)}") + return None + +def test_password_verification(user, test_password="744563017196A"): + """Testet die Passwort-Verifikation""" + print(f"\n=== DEBUG: Passwort-Test ===") + print(f"Test-Passwort: {test_password}") + + if not user: + print("❌ Kein Benutzer für Passwort-Test vorhanden") + return False + + try: + # Manueller bcrypt-Test + password_bytes = test_password.encode('utf-8') + hash_bytes = user.password_hash.encode('utf-8') + + print(f"Password Bytes: {password_bytes}") + print(f"Hash (first 50 chars): {user.password_hash[:50]}") + + # Test mit bcrypt + is_valid_bcrypt = bcrypt.checkpw(password_bytes, hash_bytes) + print(f"✅ bcrypt.checkpw() Ergebnis: {is_valid_bcrypt}") + + # Test mit User-Methode + is_valid_user_method = user.check_password(test_password) + print(f"✅ user.check_password() Ergebnis: {is_valid_user_method}") + + return is_valid_bcrypt and is_valid_user_method + + except Exception as e: + print(f"❌ Fehler beim Passwort-Test: {str(e)}") + return False + +def recreate_admin(): + """Erstellt den Admin-Benutzer neu""" + print(f"\n=== DEBUG: Admin-Benutzer neu erstellen ===") + + try: + success = create_initial_admin( + email="admin@mercedes-benz.com", + password="744563017196A", + name="System Administrator", + username="admin" + ) + + if success: + print("✅ Admin-Benutzer erfolgreich erstellt/aktualisiert") + else: + print("❌ Fehler beim Erstellen des Admin-Benutzers") + + return success + + except Exception as e: + print(f"❌ Fehler beim Erstellen des Admins: {str(e)}") + return False + +def test_login_credentials(): + """Testet verschiedene Login-Kombinationen""" + print(f"\n=== DEBUG: Login-Kombinationen testen ===") + + test_combinations = [ + ("admin@mercedes-benz.com", "744563017196A"), + ("admin", "744563017196A"), + ] + + db_session = get_db_session() + + for email_or_username, password in test_combinations: + print(f"\n🔍 Teste: {email_or_username} / {password}") + + # Simuliere Login-Logic aus app.py + user = db_session.query(User).filter( + (User.username == email_or_username) | (User.email == email_or_username) + ).first() + + if user: + print(f"✅ Benutzer gefunden: {user.email} ({user.username})") + + if user.check_password(password): + print(f"✅ Passwort korrekt!") + print(f"✅ Login wäre erfolgreich für: {user.email}") + else: + print(f"❌ Passwort falsch!") + else: + print(f"❌ Kein Benutzer mit {email_or_username} gefunden") + + db_session.close() + +def check_rate_limiting(): + """Prüft Rate Limiting Status""" + print(f"\n=== DEBUG: Rate Limiting Status ===") + + # Simuliere localStorage-Werte (die wären normalerweise im Browser) + # In einer echten Anwendung würden diese aus der Datenbank oder einem Cache kommen + print("ℹ️ Rate Limiting wird client-seitig im localStorage verwaltet") + print("ℹ️ Überprüfen Sie Ihren Browser-localStorage:") + print(" - loginAttempts: sollte < 5 sein") + print(" - lastAttemptTime: Zeit des letzten Versuchs") + print("\n💡 Tipp: Öffnen Sie Entwicklertools > Application > Local Storage") + print(" und löschen Sie 'loginAttempts' und 'lastAttemptTime' Einträge") + +if __name__ == "__main__": + print("🚀 MYP Login Debug-Tool gestartet") + print("=" * 50) + + # 1. Admin-Benutzer prüfen + admin_user = debug_admin_user() + + # 2. Passwort-Verifikation testen + if admin_user: + test_password_verification(admin_user) + + # 3. Admin neu erstellen falls Probleme + if not admin_user: + print("\n⚠️ Kein Admin gefunden - erstelle neuen Admin...") + recreate_admin() + admin_user = debug_admin_user() + if admin_user: + test_password_verification(admin_user) + + # 4. Login-Kombinationen testen + test_login_credentials() + + # 5. Rate Limiting prüfen + check_rate_limiting() + + print("\n" + "=" * 50) + print("🎯 Debug abgeschlossen!") + print("\n💡 Lösungsvorschläge:") + print("1. Verwenden Sie admin@mercedes-benz.com + 744563017196A") + print("2. Oder verwenden Sie admin + 744563017196A") + print("3. Löschen Sie Rate-Limiting im Browser localStorage") + print("4. Prüfen Sie die Browser-Konsole auf JavaScript-Fehler") \ No newline at end of file diff --git a/backend/app/templates/guest_request.html b/backend/app/templates/guest_request.html index 8554b325..be1ecdb0 100644 --- a/backend/app/templates/guest_request.html +++ b/backend/app/templates/guest_request.html @@ -445,12 +445,12 @@