Ergänzung Datenschutzerklärung und Impressum, Fristenformular in Einstellungen
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user