From cd867c07f9b291e45073f682082bb06703077687 Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Thu, 29 May 2025 11:39:13 +0200 Subject: [PATCH] "Refactor guest templates and blueprint" --- backend/app/app.py | 30 ++ backend/app/blueprints/guest.py | 4 - backend/app/templates/calendar.html | 446 ++++++----------- backend/app/templates/guest_request.html | 589 ++++++----------------- 4 files changed, 306 insertions(+), 763 deletions(-) diff --git a/backend/app/app.py b/backend/app/app.py index 615c27771..846498e5e 100644 --- a/backend/app/app.py +++ b/backend/app/app.py @@ -50,6 +50,36 @@ app.config["WTF_CSRF_ENABLED"] = True # CSRF-Schutz initialisieren csrf = CSRFProtect(app) +# CSRF-Exemption für Guest-API-Endpunkte +@app.before_request +def csrf_exempt_for_guest_api(): + """Befreit bestimmte API-Endpunkte vom CSRF-Schutz.""" + if request.endpoint and ( + request.endpoint.startswith('guest.api_') or + request.path.startswith('/api/guest/') or + request.path.startswith('/api/jobs/start/') + ): + # CSRF-Schutz für diese Endpunkte deaktivieren + csrf._exempt_views.add(request.endpoint) + +# CSRF-Error-Handler +@csrf.error_handler +def csrf_error(reason): + """Behandelt CSRF-Fehler und gibt detaillierte Informationen zurück.""" + app_logger.error(f"CSRF-Fehler für {request.path}: {reason}") + + if request.path.startswith('/api/'): + # Für API-Anfragen: JSON-Response + return jsonify({ + "error": "CSRF-Token fehlt oder ungültig", + "reason": str(reason), + "help": "Fügen Sie ein gültiges CSRF-Token zu Ihrer Anfrage hinzu" + }), 400 + else: + # Für normale Anfragen: Weiterleitung zur Fehlerseite + flash("Sicherheitsfehler: Anfrage wurde abgelehnt. Bitte versuchen Sie es erneut.", "error") + return redirect(request.url) + # Blueprints registrieren app.register_blueprint(guest_blueprint) app.register_blueprint(calendar_blueprint) diff --git a/backend/app/blueprints/guest.py b/backend/app/blueprints/guest.py index 357d40d30..79154b14c 100644 --- a/backend/app/blueprints/guest.py +++ b/backend/app/blueprints/guest.py @@ -2,7 +2,6 @@ import json from datetime import datetime, timedelta from flask import Blueprint, render_template, request, jsonify, redirect, url_for, abort, session, flash from flask_login import current_user, login_required -from flask_wtf.csrf import exempt from functools import wraps from sqlalchemy import desc @@ -135,7 +134,6 @@ def guest_request_status(request_id): # API-Endpunkte @guest_blueprint.route('/api/guest/requests', methods=['POST']) -@exempt # CSRF-Schutz ausschließen für Guest-API def api_create_guest_request(): """Neue Gastanfrage erstellen.""" data = request.get_json() @@ -202,7 +200,6 @@ def api_create_guest_request(): return jsonify({"error": "Fehler beim Verarbeiten der Anfrage"}), 500 @guest_blueprint.route('/api/guest/requests/', methods=['GET']) -@exempt # CSRF-Schutz ausschließen für Guest-API def api_get_guest_request(request_id): """Status einer Gastanfrage abrufen.""" try: @@ -312,7 +309,6 @@ def api_deny_request(request_id): return jsonify({"error": "Fehler beim Verarbeiten der Anfrage"}), 500 @guest_blueprint.route('/api/jobs/start/', methods=['POST']) -@exempt # CSRF-Schutz ausschließen für OTP-basierte API def api_start_job_with_otp(otp): """Job mit OTP starten.""" try: diff --git a/backend/app/templates/calendar.html b/backend/app/templates/calendar.html index a51404b48..db499607e 100644 --- a/backend/app/templates/calendar.html +++ b/backend/app/templates/calendar.html @@ -7,221 +7,126 @@ - {% endblock %} {% block content %} -
- - -
-
-
- - -
-
-
- Live -
-
- -
-
- -
-
- -
- - - +
+
+ +
+
+
+

Schichtplan

+

Intelligente Planung und Überwachung Ihrer 3D-Druckprozesse

- -

- - Intelligenter Schichtplan - -

-

- Fortschrittliche Planung und Überwachung Ihrer 3D-Druckprozesse mit Mercedes-Benz Präzision -

- - -
+
{% if can_edit %} - {% endif %} - -
-
-
- - -
-
-
- -
- -
- + {% for printer in printers %} - + {% endfor %} -
- - - -
+
+ + +
+ +
- -
- -
- -
- - - -
+ +
+
+ 0 Aktiv +
+
+ 0 Wartend +
+
+ 0h Heute
- - -
-
-
- 0 Aktiv -
-
-
- 0 Wartend -
-
-
- 0h Heute -
-
-
- -
-
+ +
-
- -
-
-

- 🎯 Status-Legende + +
+

+ Status-Legende

-

Übersicht der verschiedenen Produktions-Status

-
-
-
-
-
-
Produktiv
-
Druckvorgang läuft
+
+
+
+
+
Aktiv
+
Drucker läuft
+
-
-
-
-
-
Warteschlange
-
Wartet auf Start
+ +
+
+
+
Geplant
+
Job wartet
+
-
-
-
-
-
Abgeschlossen
-
Erfolgreich gedruckt
+ +
+
+
+
Abgeschlossen
+
Erfolgreich beendet
+
-
-
-
-
-
Abgebrochen
-
Fehler aufgetreten
+ +
+
+
+
Abgebrochen
+
Fehler oder Abbruch
+
@@ -229,122 +134,75 @@
+ +
+
+
+ + +
+ +
+
+
+ + {% if can_edit %} - -