31 lines
1.3 KiB
Python
31 lines
1.3 KiB
Python
# retoor <retoor@molodetz.nl>
|
|
from fastapi import APIRouter, Request
|
|
|
|
from molodetz.database import get_setting, update_user
|
|
from molodetz.responses import action_result, respond
|
|
from molodetz.schemas.account import PageOut
|
|
from molodetz.seo import base_seo_context
|
|
from molodetz.utils.audit import record
|
|
from molodetz.utils.auth import invalidate_user_cache, require_user
|
|
from molodetz.utils.request_meta import safe_next
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("")
|
|
async def terms(request: Request):
|
|
seo = base_seo_context(request, "Voorwaarden", breadcrumbs=[("Molodetz", "/"), ("Voorwaarden", "/voorwaarden")])
|
|
ctx = {"title": "Voorwaarden", "terms_version": get_setting("terms_version", "1"), "next": safe_next(request.query_params.get("next"), "/"), "seo": seo}
|
|
return respond(request, "voorwaarden.html", ctx, model=PageOut)
|
|
|
|
|
|
@router.post("/accept")
|
|
async def accept_terms(request: Request):
|
|
user = require_user(request)
|
|
version = get_setting("terms_version", "1")
|
|
update_user(user["uid"], terms_version=version)
|
|
invalidate_user_cache(propagate=True)
|
|
record(request, "auth.terms.accept", payload={"version": version}, user=user)
|
|
form = await request.form() if not request.headers.get("content-type", "").startswith("application/json") else {}
|
|
return action_result(request, safe_next(form.get("next") if form else None, "/"))
|