chore: Änderungen commited

This commit is contained in:
2025-05-10 23:15:08 +02:00
parent 82d03f6c48
commit 1600647bc4
4 changed files with 115 additions and 0 deletions

62
app.py
View File

@@ -5,6 +5,7 @@ import os
import logging
import traceback
from datetime import datetime, timedelta, timezone
from functools import wraps
from flask import Flask, render_template, request, redirect, url_for, flash, jsonify, session, g
from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required, current_user
from flask_sqlalchemy import SQLAlchemy
@@ -1710,20 +1711,78 @@ def get_dark_mode():
# Fehlerhandler
@app.errorhandler(404)
def page_not_found(e):
"""404 Fehler - Seite nicht gefunden"""
ErrorHandler.log_exception(e, code=404)
is_api_request = request.path.startswith('/api/')
if is_api_request:
return ErrorHandler.api_error("Die angeforderte Ressource wurde nicht gefunden.", 404)
return render_template('errors/404.html'), 404
@app.errorhandler(403)
def forbidden(e):
"""403 Fehler - Zugriff verweigert"""
ErrorHandler.log_exception(e, code=403)
is_api_request = request.path.startswith('/api/')
if is_api_request:
return ErrorHandler.api_error("Sie haben keine Berechtigung, auf diese Ressource zuzugreifen.", 403)
return render_template('errors/403.html'), 403
@app.errorhandler(500)
def internal_server_error(e):
"""500 Fehler - Interner Serverfehler"""
ErrorHandler.log_exception(e, code=500)
is_api_request = request.path.startswith('/api/')
if is_api_request:
return ErrorHandler.api_error("Ein interner Serverfehler ist aufgetreten.", 500)
return render_template('errors/500.html'), 500
@app.errorhandler(429)
def too_many_requests(e):
"""429 Fehler - Zu viele Anfragen"""
ErrorHandler.log_exception(e, code=429)
is_api_request = request.path.startswith('/api/')
if is_api_request:
return ErrorHandler.api_error("Zu viele Anfragen. Bitte versuchen Sie es später erneut.", 429)
return render_template('errors/429.html'), 429
@app.errorhandler(400)
def bad_request(e):
"""400 Fehler - Ungültige Anfrage"""
ErrorHandler.log_exception(e, code=400)
is_api_request = request.path.startswith('/api/')
if is_api_request:
return ErrorHandler.api_error("Die Anfrage konnte nicht verarbeitet werden.", 400)
flash("Die Anfrage konnte nicht verarbeitet werden. Bitte überprüfen Sie Ihre Eingaben.", "error")
return render_template('errors/400.html', error=str(e)), 400
@app.errorhandler(401)
def unauthorized(e):
"""401 Fehler - Nicht autorisiert"""
ErrorHandler.log_exception(e, code=401)
is_api_request = request.path.startswith('/api/')
if is_api_request:
return ErrorHandler.api_error("Authentifizierung erforderlich.", 401)
flash("Sie müssen sich anmelden, um auf diese Seite zuzugreifen.", "error")
return redirect(url_for('login'))
# Hilfsfunktion zur Fehlerbehandlung in API-Endpunkten
def handle_api_exception(func):
"""Decorator für API-Endpunkte zur einheitlichen Fehlerbehandlung"""
@wraps(func)
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except Exception as e:
# Log und API-Fehler zurückgeben
return ErrorHandler.handle_exception(e, is_api_request=True)
return wrapper
# OpenAI-Integration für KI-Assistenz
@app.route('/api/assistant', methods=['POST'])
def chat_with_assistant():
@@ -2383,6 +2442,7 @@ def get_public_mindmap_nodes():
# Suchfunktion für Mindmap-Knoten
@app.route('/api/search/mindmap', methods=['GET'])
@handle_api_exception
def search_mindmap_nodes():
"""
Durchsucht Mindmap-Knoten nach einem Suchbegriff.
@@ -2489,6 +2549,7 @@ def search_mindmap_nodes():
# Export/Import-Funktionen für Mindmaps
@app.route('/api/mindmap/<int:mindmap_id>/export', methods=['GET'])
@login_required
@handle_api_exception
def export_mindmap(mindmap_id):
"""
Exportiert eine Mindmap im angegebenen Format.
@@ -2620,6 +2681,7 @@ def export_mindmap(mindmap_id):
@app.route('/api/mindmap/<int:mindmap_id>/import', methods=['POST'])
@login_required
@handle_api_exception
def import_mindmap(mindmap_id):
"""
Importiert Daten in eine bestehende Mindmap.