# retoor from fastapi import APIRouter, Request from molodetz.database import all_settings, get_setting, set_setting from molodetz.dependencies import json_or_form from molodetz.models import SettingsForm from molodetz.responses import action_result, respond from molodetz.routers.admin._shared import admin_seo from molodetz.schemas.admin import SettingsOut from molodetz.utils.audit import record from molodetz.utils.auth import require_admin router = APIRouter() NUMERIC = ("rate_limit_per_minute", "rate_limit_window_seconds", "session_max_age_days", "session_remember_days", "audit_retention_days") BOOLEAN = ("maintenance_mode", "friendly_404") @router.get("/settings") async def settings_index(request: Request): require_admin(request) return respond(request, "admin/settings.html", {"settings": all_settings(), "seo": admin_seo(request, "Instellingen")}, model=SettingsOut) @router.post("/settings") async def settings_save(request: Request): user = require_admin(request) data = await json_or_form(request, SettingsForm) changed = [] for key, value in data.model_dump(exclude_none=True).items(): if value == "": continue if key in NUMERIC: try: value = str(max(1, int(value))) except ValueError: continue if key in BOOLEAN and value not in ("0", "1"): continue if get_setting(key) != value: set_setting(key, value) changed.append(key) record(request, "admin.settings.save", payload={"keys": changed}, user=user) return action_result(request, "/admin/settings", data={"changed": changed})