modified: web/app.py
modified: web/config.py modified: web/templates/privacy_policy.html
This commit is contained in:
17
web/app.py
17
web/app.py
@@ -3,6 +3,7 @@ MCLogger – Flask Web-Panel
|
||||
Multi-Tenant mit Gruppen, Rollen & verschlüsselten DB-Zugangsdaten.
|
||||
Coolify-kompatibel: alle Einstellungen via ENV.
|
||||
"""
|
||||
import os
|
||||
import secrets
|
||||
from datetime import datetime
|
||||
from flask import Flask, abort, render_template, request, session, url_for
|
||||
@@ -20,6 +21,21 @@ from blueprints.panel import panel
|
||||
|
||||
def create_app() -> Flask:
|
||||
app = Flask(__name__)
|
||||
|
||||
# ── Datenschutz-Version automatisch aus Template-Hash berechnen ──────────
|
||||
# Wenn PRIVACY_POLICY_VERSION nicht per ENV gesetzt ist, wird der SHA-256
|
||||
# des Template-Inhalts berechnet und die ersten 6 Zeichen als Version
|
||||
# verwendet. Ändert sich der Seiteninhalt, ändert sich der Hash →
|
||||
# alle Nutzer müssen beim nächsten Login erneut zustimmen.
|
||||
if not os.getenv("PRIVACY_POLICY_VERSION"):
|
||||
import hashlib
|
||||
_policy_path = os.path.join(app.root_path, "templates", "privacy_policy.html")
|
||||
try:
|
||||
with open(_policy_path, "rb") as _f:
|
||||
Config.PRIVACY_POLICY_VERSION = hashlib.sha256(_f.read()).hexdigest()[:6].upper()
|
||||
except OSError:
|
||||
pass # Fallback auf den Config-Default
|
||||
|
||||
app.secret_key = Config.SECRET_KEY
|
||||
app.config.update(
|
||||
SESSION_COOKIE_HTTPONLY=Config.SESSION_COOKIE_HTTPONLY,
|
||||
@@ -129,6 +145,7 @@ def create_app() -> Flask:
|
||||
last_updated="April 15, 2026",
|
||||
invite_expiry_hours=Config.INVITE_EXPIRY_HOURS,
|
||||
audit_retention_days=Config.AUDIT_LOG_RETENTION_DAYS,
|
||||
policy_version=Config.PRIVACY_POLICY_VERSION,
|
||||
)
|
||||
|
||||
@app.errorhandler(400)
|
||||
|
||||
@@ -60,10 +60,12 @@ class Config:
|
||||
PROXY_COUNT = int(os.getenv("PROXY_COUNT") or "1")
|
||||
|
||||
# ── Datenschutz / DSGVO ───────────────────────────────────
|
||||
# Version der Datenschutzerklärung (ISO-Datum + Revision). Wenn sich dieser
|
||||
# Wert ändert, werden alle Nutzer beim nächsten Login zur erneuten Zustimmung
|
||||
# aufgefordert. ENV-Variable PRIVACY_POLICY_VERSION überschreibt den Default.
|
||||
PRIVACY_POLICY_VERSION = os.getenv("PRIVACY_POLICY_VERSION") or "2026-04-15-r2"
|
||||
# Version der Datenschutzerklärung. Wird in create_app() automatisch als
|
||||
# SHA-256-Hash der privacy_policy.html berechnet (erste 6 Zeichen, Großbuchstaben).
|
||||
# Ändert sich der Seiteninhalt, ändert sich der Hash → alle Nutzer müssen
|
||||
# beim nächsten Login erneut zustimmen.
|
||||
# Kann über die ENV-Variable PRIVACY_POLICY_VERSION manuell überschrieben werden.
|
||||
PRIVACY_POLICY_VERSION = os.getenv("PRIVACY_POLICY_VERSION") or "INIT00"
|
||||
|
||||
# ── Standard-Berechtigungen neuer Gruppenmitglieder ───────
|
||||
INVITE_EXPIRY_HOURS = int(os.getenv("INVITE_EXPIRY_HOURS") or "72")
|
||||
|
||||
@@ -20,6 +20,12 @@
|
||||
<i class="bi bi-database-fill-gear fs-1 text-success"></i>
|
||||
<h1 class="fw-bold mt-2 h3">MCLogger — Privacy Policy</h1>
|
||||
<p class="text-muted small">Last updated: {{ last_updated }}</p>
|
||||
<p class="text-muted small">
|
||||
<i class="bi bi-fingerprint me-1"></i>Document ID:
|
||||
<span class="font-monospace fw-bold text-secondary">{{ policy_version }}</span>
|
||||
<span class="text-muted"> — this ID changes automatically when the policy content changes.
|
||||
Your consent is tied to this ID.</span>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="card border-secondary mb-4">
|
||||
|
||||
Reference in New Issue
Block a user