🎉 Improved backend structure & added utility modules 🎨📚
This commit is contained in:
194
backend/app.py
194
backend/app.py
@ -1724,14 +1724,10 @@ def api_admin_system_health():
|
||||
"error": str(e)
|
||||
}), 500
|
||||
|
||||
# ===== INTEGRATION IN BESTEHENDE ROUTEN =====
|
||||
|
||||
# Erweitere bestehende Job-Routen um Dashboard-Events
|
||||
|
||||
@app.route("/api/admin/system-health", methods=['GET'])
|
||||
@app.route("/api/admin/system-health-dashboard", methods=['GET'])
|
||||
@login_required
|
||||
@admin_required
|
||||
def api_admin_system_health():
|
||||
def api_admin_system_health_dashboard():
|
||||
"""API-Endpunkt für System-Gesundheitscheck mit Dashboard-Integration."""
|
||||
try:
|
||||
# Basis-System-Gesundheitscheck durchführen
|
||||
@ -5064,6 +5060,192 @@ def setup_database_with_migrations():
|
||||
app_logger.error(f"❌ Fehler bei Datenbank-Setup: {str(e)}")
|
||||
raise e
|
||||
|
||||
# ===== PRIVACY UND TERMS ROUTEN =====
|
||||
|
||||
@app.route("/privacy")
|
||||
def privacy_policy():
|
||||
"""Datenschutzerklärung anzeigen"""
|
||||
try:
|
||||
return render_template("privacy_policy.html", title="Datenschutzerklärung")
|
||||
except Exception as e:
|
||||
app_logger.error(f"Fehler beim Laden der Datenschutzerklärung: {str(e)}")
|
||||
flash("Fehler beim Laden der Datenschutzerklärung", "error")
|
||||
return redirect(url_for("index"))
|
||||
|
||||
@app.route("/terms")
|
||||
def terms_of_service():
|
||||
"""Nutzungsbedingungen anzeigen"""
|
||||
try:
|
||||
return render_template("terms_of_service.html", title="Nutzungsbedingungen")
|
||||
except Exception as e:
|
||||
app_logger.error(f"Fehler beim Laden der Nutzungsbedingungen: {str(e)}")
|
||||
flash("Fehler beim Laden der Nutzungsbedingungen", "error")
|
||||
return redirect(url_for("index"))
|
||||
|
||||
@app.route("/legal")
|
||||
def legal_notice():
|
||||
"""Impressum anzeigen"""
|
||||
try:
|
||||
return render_template("legal_notice.html", title="Impressum")
|
||||
except Exception as e:
|
||||
app_logger.error(f"Fehler beim Laden des Impressums: {str(e)}")
|
||||
flash("Fehler beim Laden des Impressums", "error")
|
||||
return redirect(url_for("index"))
|
||||
|
||||
@app.route("/api/privacy/accept", methods=["POST"])
|
||||
@login_required
|
||||
def accept_privacy_policy():
|
||||
"""API-Endpunkt für Akzeptierung der Datenschutzerklärung"""
|
||||
db_session = get_db_session()
|
||||
try:
|
||||
data = request.get_json() or {}
|
||||
version = data.get("version", "1.0")
|
||||
|
||||
# Benutzer aus der Datenbank laden
|
||||
user = db_session.query(User).filter(User.id == int(current_user.id)).first()
|
||||
|
||||
if not user:
|
||||
return jsonify({"error": "Benutzer nicht gefunden"}), 404
|
||||
|
||||
# Privacy-Akzeptierung in Benutzer-Einstellungen speichern
|
||||
if hasattr(user, 'settings'):
|
||||
import json
|
||||
settings = json.loads(user.settings) if user.settings else {}
|
||||
else:
|
||||
settings = session.get('user_settings', {})
|
||||
|
||||
# Privacy-Akzeptierung hinzufügen
|
||||
if 'privacy_acceptance' not in settings:
|
||||
settings['privacy_acceptance'] = {}
|
||||
|
||||
settings['privacy_acceptance'] = {
|
||||
'accepted': True,
|
||||
'version': version,
|
||||
'timestamp': datetime.now().isoformat(),
|
||||
'ip_address': request.remote_addr
|
||||
}
|
||||
|
||||
# Einstellungen speichern
|
||||
if hasattr(user, 'settings'):
|
||||
user.settings = json.dumps(settings)
|
||||
user.updated_at = datetime.now()
|
||||
db_session.commit()
|
||||
else:
|
||||
session['user_settings'] = settings
|
||||
|
||||
user_logger.info(f"Benutzer {current_user.username} hat Datenschutzerklärung v{version} akzeptiert")
|
||||
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"message": "Datenschutzerklärung erfolgreich akzeptiert",
|
||||
"version": version,
|
||||
"timestamp": datetime.now().isoformat()
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
db_session.rollback()
|
||||
app_logger.error(f"Fehler bei Privacy-Akzeptierung: {str(e)}")
|
||||
return jsonify({"error": "Interner Serverfehler"}), 500
|
||||
finally:
|
||||
db_session.close()
|
||||
|
||||
@app.route("/api/terms/accept", methods=["POST"])
|
||||
@login_required
|
||||
def accept_terms_of_service():
|
||||
"""API-Endpunkt für Akzeptierung der Nutzungsbedingungen"""
|
||||
db_session = get_db_session()
|
||||
try:
|
||||
data = request.get_json() or {}
|
||||
version = data.get("version", "1.0")
|
||||
|
||||
# Benutzer aus der Datenbank laden
|
||||
user = db_session.query(User).filter(User.id == int(current_user.id)).first()
|
||||
|
||||
if not user:
|
||||
return jsonify({"error": "Benutzer nicht gefunden"}), 404
|
||||
|
||||
# Terms-Akzeptierung in Benutzer-Einstellungen speichern
|
||||
if hasattr(user, 'settings'):
|
||||
import json
|
||||
settings = json.loads(user.settings) if user.settings else {}
|
||||
else:
|
||||
settings = session.get('user_settings', {})
|
||||
|
||||
# Terms-Akzeptierung hinzufügen
|
||||
if 'terms_acceptance' not in settings:
|
||||
settings['terms_acceptance'] = {}
|
||||
|
||||
settings['terms_acceptance'] = {
|
||||
'accepted': True,
|
||||
'version': version,
|
||||
'timestamp': datetime.now().isoformat(),
|
||||
'ip_address': request.remote_addr
|
||||
}
|
||||
|
||||
# Einstellungen speichern
|
||||
if hasattr(user, 'settings'):
|
||||
user.settings = json.dumps(settings)
|
||||
user.updated_at = datetime.now()
|
||||
db_session.commit()
|
||||
else:
|
||||
session['user_settings'] = settings
|
||||
|
||||
user_logger.info(f"Benutzer {current_user.username} hat Nutzungsbedingungen v{version} akzeptiert")
|
||||
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"message": "Nutzungsbedingungen erfolgreich akzeptiert",
|
||||
"version": version,
|
||||
"timestamp": datetime.now().isoformat()
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
db_session.rollback()
|
||||
app_logger.error(f"Fehler bei Terms-Akzeptierung: {str(e)}")
|
||||
return jsonify({"error": "Interner Serverfehler"}), 500
|
||||
finally:
|
||||
db_session.close()
|
||||
|
||||
@app.route("/api/legal/status", methods=["GET"])
|
||||
@login_required
|
||||
def get_legal_status():
|
||||
"""API-Endpunkt für Abfrage des rechtlichen Status (Privacy/Terms Akzeptierung)"""
|
||||
try:
|
||||
# Benutzer-Einstellungen laden
|
||||
if hasattr(current_user, 'settings') and current_user.settings:
|
||||
import json
|
||||
settings = json.loads(current_user.settings)
|
||||
else:
|
||||
settings = session.get('user_settings', {})
|
||||
|
||||
privacy_acceptance = settings.get('privacy_acceptance', {})
|
||||
terms_acceptance = settings.get('terms_acceptance', {})
|
||||
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"legal_status": {
|
||||
"privacy_policy": {
|
||||
"accepted": privacy_acceptance.get('accepted', False),
|
||||
"version": privacy_acceptance.get('version'),
|
||||
"timestamp": privacy_acceptance.get('timestamp')
|
||||
},
|
||||
"terms_of_service": {
|
||||
"accepted": terms_acceptance.get('accepted', False),
|
||||
"version": terms_acceptance.get('version'),
|
||||
"timestamp": terms_acceptance.get('timestamp')
|
||||
},
|
||||
"compliance_required": not (
|
||||
privacy_acceptance.get('accepted', False) and
|
||||
terms_acceptance.get('accepted', False)
|
||||
)
|
||||
}
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
app_logger.error(f"Fehler bei Legal-Status-Abfrage: {str(e)}")
|
||||
return jsonify({"error": "Interner Serverfehler"}), 500
|
||||
|
||||
|
||||
# ===== STARTUP UND MAIN =====
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
|
Reference in New Issue
Block a user