Die Dateien wurden geändert oder hinzugefügt:

This commit is contained in:
2025-06-13 07:17:00 +02:00
parent ae95d82afc
commit 691a4f2d41
137 changed files with 2354 additions and 29 deletions

View File

@@ -691,6 +691,16 @@ def inject_now():
"""Injiziert die aktuelle Zeit in alle Templates"""
return {'now': datetime.now}
@app.context_processor
def inject_current_route():
"""
Stellt current_route für alle Templates bereit.
Verhindert Template-Fehler wenn request.endpoint None ist (z.B. bei 404-Fehlern).
"""
current_route = getattr(request, 'endpoint', None) or ''
return {'current_route': current_route}
@app.template_filter('format_datetime')
def format_datetime_filter(value, format='%d.%m.%Y %H:%M'):
"""Template-Filter für Datums-Formatierung"""
@@ -1093,7 +1103,8 @@ def api_stats():
try:
from models import get_db_session, User, Printer, Job
with get_cached_session() as db_session:
db_session = get_db_session()
try:
# Grundlegende Counts
total_users = db_session.query(User).count()
total_printers = db_session.query(Printer).count()
@@ -1116,6 +1127,8 @@ def api_stats():
online_printers = db_session.query(Printer).filter(
Printer.active == True
).count()
finally:
db_session.close()
stats = {
'total_users': total_users,
@@ -1199,7 +1212,13 @@ def forbidden_error(error):
"message": "Sie haben keine Berechtigung für diese Aktion",
"status_code": 403
}), 403
return render_template('errors/403.html'), 403
try:
return render_template('errors/403.html'), 403
except Exception as template_error:
# Fallback bei Template-Fehlern
app_logger.error(f"Template-Fehler in 403-Handler: {str(template_error)}")
return f"<h1>403 - Zugriff verweigert</h1><p>Sie haben keine Berechtigung für diese Aktion.</p>", 403
@app.errorhandler(404)
def not_found_error(error):
@@ -1211,7 +1230,13 @@ def not_found_error(error):
"message": "Die angeforderte Ressource wurde nicht gefunden",
"status_code": 404
}), 404
return render_template('errors/404.html'), 404
try:
return render_template('errors/404.html'), 404
except Exception as template_error:
# Fallback bei Template-Fehlern
app_logger.error(f"Template-Fehler in 404-Handler: {str(template_error)}")
return f"<h1>404 - Nicht gefunden</h1><p>Die angeforderte Seite wurde nicht gefunden.</p>", 404
@app.errorhandler(405)
def method_not_allowed_error(error):
@@ -1271,7 +1296,12 @@ def internal_error(error):
"status_code": 500
}), 500
return render_template('errors/500.html', error_id=error_id), 500
try:
return render_template('errors/500.html', error_id=error_id), 500
except Exception as template_error:
# Fallback bei Template-Fehlern
app_logger.error(f"Template-Fehler in 500-Handler: {str(template_error)}")
return f"<h1>500 - Interner Serverfehler</h1><p>Ein unerwarteter Fehler ist aufgetreten. Fehler-ID: {error_id}</p>", 500
@app.errorhandler(502)
def bad_gateway_error(error):
@@ -1338,7 +1368,12 @@ def handle_exception(error):
"status_code": 500
}), 500
return render_template('errors/500.html', error_id=error_id), 500
try:
return render_template('errors/500.html', error_id=error_id), 500
except Exception as template_error:
# Fallback bei Template-Fehlern
app_logger.error(f"Template-Fehler im Exception-Handler: {str(template_error)}")
return f"<h1>500 - Unerwarteter Fehler</h1><p>Ein unerwarteter Fehler ist aufgetreten. Fehler-ID: {error_id}</p>", 500
# ===== HAUPTFUNKTION =====
def main():
@@ -1506,5 +1541,17 @@ def production_info():
"""Stellt Production-Informationen für Templates bereit"""
return get_production_info()
# Nach der Initialisierung der Blueprints und vor dem App-Start
try:
# Admin-Berechtigungen beim Start korrigieren
from utils.permissions import fix_all_admin_permissions
result = fix_all_admin_permissions()
if result['success']:
app_logger.info(f"Admin-Berechtigungen beim Start korrigiert: {result['created']} erstellt, {result['corrected']} aktualisiert")
else:
app_logger.warning(f"Fehler beim Korrigieren der Admin-Berechtigungen: {result.get('error', 'Unbekannter Fehler')}")
except Exception as e:
app_logger.error(f"Fehler beim Korrigieren der Admin-Berechtigungen beim Start: {str(e)}")
if __name__ == "__main__":
main()