diff --git a/app.py b/app.py index 57b3857..8b60298 100644 --- a/app.py +++ b/app.py @@ -11,6 +11,10 @@ Betrieb gemaess ISO 27001 / DSGVO / NIS 2 (Nutzer-Vorgabe, 2026-07-13): DSGVO-Angaben (Datenschutzbeauftragter, Aufbewahrungsfristen) an. Mandantenfaehig: mehrere Organisationen auf einer Instanz, Daten strikt per tenant_id getrennt (kein Datenzugriff ueber Mandantengrenzen). + - Automatische Aufbewahrungsfrist-Bereinigung (Hintergrund-Thread, siehe + db.run_retention_cleanup) -- loescht abgeschlossene Tickets/Audit-Log- + Eintraege, die aelter als die hinterlegte Frist sind (DSGVO Speicher- + begrenzung). AES bleibt ein buchbarer Service im Katalog, integriert per HTTP (kein Code- Import) -- siehe _aes_live_status(). @@ -19,11 +23,13 @@ ENV: DATABASE_URL postgresql://user:pass@host:5432/dbname ITSM_SECRET_KEY Flask-Session-Secret AES_DASHBOARD_URL Basis-URL des AES-Dashboards fuer die Service-Integration + RETENTION_INTERVAL_SECONDS Intervall fuer die Retention-Bereinigung (Default 24h) """ import os import html -import json +import time import secrets +import threading import datetime as _dt import urllib.request import urllib.error @@ -34,6 +40,7 @@ from werkzeug.security import generate_password_hash, check_password_hash import db AES_DASHBOARD_URL = os.getenv("AES_DASHBOARD_URL", "").rstrip("/") +RETENTION_INTERVAL_SECONDS = int(os.getenv("RETENTION_INTERVAL_SECONDS", str(24 * 60 * 60))) app = Flask(__name__) app.secret_key = os.getenv("ITSM_SECRET_KEY") or secrets.token_hex(32) @@ -303,7 +310,7 @@ def setup_new():
-