#!/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")