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

@@ -24,6 +24,7 @@ from app.security import hash_token, new_token, normalize_email, utcnow
log = logging.getLogger(__name__)
# Vorgabewerte; maßgeblich ist, was in der Verwaltung eingestellt ist.
WELCOME_DAYS = 14
EMAIL_CHANGE_HOURS = 48
@@ -32,22 +33,18 @@ EMAIL_CHANGE_HOURS = 48
# Einstellungen zur automatischen Bereinigung
# ==========================================================================
def months_setting(db: Session, key: str, fallback: int) -> int:
"""Liest einen Monatswert aus der Laufzeitkonfiguration.
def months_setting(db: Session, key: str, fallback: int = 0) -> int:
"""Monatswert aus der Laufzeitkonfiguration.
0 bedeutet ausdrücklich "abgeschaltet" - nicht "sofort". Ein
Tippfehler soll nicht dazu führen, dass beim nächsten Durchlauf alle
Konten verschwinden.
Nur noch eine Weiterleitung - die Fristen liegen gesammelt in
app/runtime_settings.py. Der Name bleibt, damit die vorhandenen
Aufrufstellen unverändert weiterlaufen.
0 bedeutet ausdrücklich "abgeschaltet", nicht "sofort".
"""
raw = get_setting(db, key, "")
if not raw:
return fallback
try:
value = int(raw)
except ValueError:
log.warning("Einstellung %s ist keine Zahl (%r) - verwende %d", key, raw, fallback)
return fallback
return max(0, min(value, 600))
from app.runtime_settings import get_duration
return get_duration(db, key)
# ==========================================================================
@@ -77,6 +74,12 @@ def issue_token(db: Session, user: User, purpose: str, hours: int) -> str:
return raw
def welcome_days(db: Session) -> int:
from app.runtime_settings import get_duration
return get_duration(db, "welcome_days")
def create_user(
db: Session, *, email: str, display_name: str | None, is_admin: bool = False
) -> tuple[User, str]:
@@ -99,7 +102,7 @@ def create_user(
)
db.add(user)
db.flush()
token = issue_token(db, user, "welcome", hours=WELCOME_DAYS * 24)
token = issue_token(db, user, "welcome", hours=welcome_days(db) * 24)
return user, token
@@ -133,6 +136,10 @@ def start_email_change(
).all():
pending.cancelled_at = utcnow()
from app.runtime_settings import get_duration
hours = get_duration(db, "email_change_hours")
raw_new = new_token()
raw_old = new_token() if user.is_admin else None
@@ -144,7 +151,7 @@ def start_email_change(
token_old_hash=hash_token(raw_old) if raw_old else None,
requires_old=user.is_admin,
requested_by=requested_by,
expires_at=utcnow() + timedelta(hours=EMAIL_CHANGE_HOURS),
expires_at=utcnow() + timedelta(hours=hours),
)
db.add(change)
db.flush()