171 lines
6.9 KiB
Python
171 lines
6.9 KiB
Python
#!/usr/bin/env python3.11
|
|
"""
|
|
Debug-Skript für Admin-Dashboard-Probleme
|
|
"""
|
|
|
|
import sys
|
|
import traceback
|
|
from app import app
|
|
from models import User, get_cached_session
|
|
from flask import url_for
|
|
from flask_login import login_user
|
|
|
|
def test_admin_route():
|
|
"""Testet die Admin-Route mit verschiedenen Szenarien"""
|
|
|
|
print("=== ADMIN ROUTE DEBUG ===")
|
|
|
|
with app.app_context():
|
|
try:
|
|
# 1. Test ohne Login (sollte 302 redirect geben)
|
|
print("\n1. Test ohne Login:")
|
|
with app.test_client() as client:
|
|
response = client.get('/admin/')
|
|
print(f" Status: {response.status_code}")
|
|
print(f" Location: {response.headers.get('Location', 'None')}")
|
|
|
|
# 2. Admin-Benutzer finden
|
|
print("\n2. Admin-Benutzer suchen:")
|
|
with get_cached_session() as session:
|
|
admin_users = session.query(User).filter(User.role == 'admin').all()
|
|
print(f" Gefundene Admin-Benutzer: {len(admin_users)}")
|
|
|
|
if admin_users:
|
|
admin_user = admin_users[0]
|
|
print(f" Admin: {admin_user.username} (ID: {admin_user.id})")
|
|
|
|
# 3. Test mit korrektem Flask-Login
|
|
print("\n3. Test mit Flask-Login:")
|
|
with app.test_client() as client:
|
|
# Simuliere Login über POST-Request
|
|
login_data = {
|
|
'username': admin_user.username,
|
|
'password': 'admin123' # Standard-Admin-Passwort
|
|
}
|
|
|
|
# Erst einloggen
|
|
login_response = client.post('/auth/login', data=login_data, follow_redirects=False)
|
|
print(f" Login Status: {login_response.status_code}")
|
|
|
|
# Dann Admin-Dashboard aufrufen
|
|
response = client.get('/admin/', follow_redirects=False)
|
|
print(f" Admin Dashboard Status: {response.status_code}")
|
|
|
|
if response.status_code == 500:
|
|
print(" ERROR DATA:")
|
|
error_data = response.get_data(as_text=True)
|
|
print(f" {error_data[:1000]}...")
|
|
elif response.status_code == 200:
|
|
print(" SUCCESS: Admin-Dashboard lädt korrekt!")
|
|
elif response.status_code == 302:
|
|
print(f" Redirect zu: {response.headers.get('Location', 'Unknown')}")
|
|
else:
|
|
print(f" Unerwarteter Status: {response.status_code}")
|
|
|
|
# 4. Test der Admin-Dashboard-Funktion direkt
|
|
print("\n4. Test der Admin-Dashboard-Funktion direkt:")
|
|
try:
|
|
from blueprints.admin_unified import admin_dashboard
|
|
from flask import g
|
|
from flask_login import current_user
|
|
|
|
# Simuliere Request-Context
|
|
with app.test_request_context('/admin/'):
|
|
# Simuliere eingeloggten Admin
|
|
login_user(admin_user)
|
|
|
|
# Rufe Dashboard-Funktion direkt auf
|
|
result = admin_dashboard()
|
|
print(f" Direkter Aufruf erfolgreich: {type(result)}")
|
|
|
|
except Exception as e:
|
|
print(f" Direkter Aufruf fehlgeschlagen: {e}")
|
|
traceback.print_exc()
|
|
|
|
else:
|
|
print(" FEHLER: Kein Admin-Benutzer gefunden!")
|
|
|
|
# Admin-Benutzer erstellen
|
|
print("\n Erstelle Admin-Benutzer...")
|
|
from models import create_initial_admin
|
|
success = create_initial_admin()
|
|
print(f" Admin erstellt: {success}")
|
|
|
|
except Exception as e:
|
|
print(f"\nFEHLER: {e}")
|
|
traceback.print_exc()
|
|
|
|
def test_admin_decorator():
|
|
"""Testet den Admin-Decorator"""
|
|
print("\n=== ADMIN DECORATOR TEST ===")
|
|
|
|
try:
|
|
from blueprints.admin_unified import admin_required
|
|
print("✅ Admin-Decorator importiert")
|
|
|
|
# Test-Funktion mit Decorator
|
|
@admin_required
|
|
def test_func():
|
|
return "Success"
|
|
|
|
print("✅ Decorator angewendet")
|
|
|
|
except Exception as e:
|
|
print(f"❌ Decorator-Fehler: {e}")
|
|
traceback.print_exc()
|
|
|
|
def test_template():
|
|
"""Testet das Admin-Template"""
|
|
print("\n=== TEMPLATE TEST ===")
|
|
|
|
try:
|
|
with app.app_context():
|
|
with app.test_request_context('/admin/'):
|
|
from flask import render_template
|
|
|
|
# Test mit leeren Stats
|
|
result = render_template('admin.html', stats={})
|
|
print(f"✅ Template gerendert (Länge: {len(result)} Zeichen)")
|
|
|
|
except Exception as e:
|
|
print(f"❌ Template-Fehler: {e}")
|
|
traceback.print_exc()
|
|
|
|
def check_admin_user_password():
|
|
"""Überprüft das Admin-Benutzer-Passwort"""
|
|
print("\n=== ADMIN PASSWORD CHECK ===")
|
|
|
|
try:
|
|
with app.app_context():
|
|
with get_cached_session() as session:
|
|
admin_user = session.query(User).filter(User.role == 'admin').first()
|
|
if admin_user:
|
|
# Teste verschiedene Standard-Passwörter
|
|
test_passwords = ['admin123', 'admin', 'password', 'test123']
|
|
|
|
for pwd in test_passwords:
|
|
if admin_user.check_password(pwd):
|
|
print(f"✅ Admin-Passwort gefunden: {pwd}")
|
|
return pwd
|
|
|
|
print("❌ Kein Standard-Passwort funktioniert")
|
|
|
|
# Setze neues Passwort
|
|
print(" Setze neues Admin-Passwort: admin123")
|
|
admin_user.set_password('admin123')
|
|
session.commit()
|
|
print("✅ Neues Passwort gesetzt")
|
|
return 'admin123'
|
|
else:
|
|
print("❌ Kein Admin-Benutzer gefunden")
|
|
return None
|
|
|
|
except Exception as e:
|
|
print(f"❌ Passwort-Check-Fehler: {e}")
|
|
return None
|
|
|
|
if __name__ == "__main__":
|
|
test_admin_decorator()
|
|
test_template()
|
|
check_admin_user_password()
|
|
test_admin_route() |