Molodetz blogrol volgens DPP-template
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
# retoor <retoor@molodetz.nl>
|
||||
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})
|
||||
Reference in New Issue
Block a user