Ergänzung Datenschutzerklärung und Impressum, Fristenformular in Einstellungen

This commit is contained in:
2026-08-10 06:44:11 +02:00
parent 8ffbda875e
commit 777e3e5447
25 changed files with 1310 additions and 139 deletions

View File

@@ -38,6 +38,7 @@ from app.models import (
User,
UserSession,
)
from app.runtime_settings import get_duration
from app.security import utcnow
from app.users import deactivate, delete_user, months_setting
@@ -45,10 +46,19 @@ log = logging.getLogger(__name__)
def run_cleanup(db: Session) -> dict[str, int]:
"""Räumt auf und gibt zurück, was entfernt wurde."""
"""Räumt auf und gibt zurück, was entfernt wurde.
Alle Fristen kommen aus der Laufzeitkonfiguration, damit das, was
hier geschieht, dem entspricht, was in der Verwaltung steht - und
dem, was die Datenschutzerklärung behauptet.
"""
now = utcnow()
counts: dict[str, int] = {}
deleted_days = get_duration(db, "cleanup_deleted_days")
ops_days = get_duration(db, "cleanup_ops_days")
product_days = get_duration(db, "product_cache_days")
def purge(model, condition, label: str) -> None:
result = db.execute(delete(model).where(condition))
if result.rowcount:
@@ -79,34 +89,33 @@ def run_cleanup(db: Session) -> dict[str, int]:
# längst über die Wiederholungsgrenze hinaus versucht.
purge(
AppliedOp,
AppliedOp.created_at < now - timedelta(days=settings.cleanup_ops_days),
AppliedOp.created_at < now - timedelta(days=ops_days),
"Outbox-Quittungen",
)
# --- Abgelaufene Einladungen und öffentliche Links ---
purge(
ListInvite,
ListInvite.expires_at < now - timedelta(days=settings.cleanup_deleted_days),
ListInvite.expires_at < now - timedelta(days=deleted_days),
"alte Einladungen",
)
purge(
PublicShare,
PublicShare.expires_at < now - timedelta(days=settings.cleanup_deleted_days),
PublicShare.expires_at < now - timedelta(days=deleted_days),
"abgelaufene öffentliche Links",
)
# --- Produktzwischenspeicher ---
purge(
ProductCache,
ProductCache.fetched_at
< now - timedelta(days=max(settings.product_cache_days * 2, 365)),
ProductCache.fetched_at < now - timedelta(days=max(product_days * 2, 365)),
"Produktzwischenspeicher",
)
# --- Endgültiges Löschen weicher Löschungen ---
# Erst jetzt verschwinden die Daten wirklich. Bis dahin konnten
# offline gebliebene Geräte erfahren, dass es sie nicht mehr gibt.
cutoff = now - timedelta(days=settings.cleanup_deleted_days)
cutoff = now - timedelta(days=deleted_days)
purge(ListItem, ListItem.deleted_at < cutoff, "gelöschte Einträge")
@@ -135,7 +144,7 @@ def run_cleanup(db: Session) -> dict[str, int]:
# --- Abgeschlossene Adressänderungen ---
purge(
EmailChange,
EmailChange.expires_at < now - timedelta(days=settings.cleanup_deleted_days),
EmailChange.expires_at < now - timedelta(days=deleted_days),
"alte Adressänderungen",
)