40 lines
1.6 KiB
Python
40 lines
1.6 KiB
Python
# retoor <retoor@molodetz.nl>
|
|
from fastapi import APIRouter, Request
|
|
|
|
from molodetz.database import generate_uid, update_user
|
|
from molodetz.responses import action_result, respond
|
|
from molodetz.schemas.account import ApiKeyOut
|
|
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.notifications import create_notification
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/api-key")
|
|
async def api_key_page(request: Request):
|
|
user = require_user(request)
|
|
seo = base_seo_context(request, "API-sleutel", robots="noindex,nofollow")
|
|
return respond(request, "profile/api_key.html", {"api_key": user["api_key"], "seo": seo}, model=ApiKeyOut)
|
|
|
|
|
|
@router.post("/api-key/regenerate")
|
|
async def api_key_regenerate(request: Request):
|
|
user = require_user(request)
|
|
key = generate_uid()
|
|
update_user(user["uid"], api_key=key)
|
|
invalidate_user_cache(propagate=True)
|
|
record(request, "profile.apikey.regenerate", targets=[("user", user["uid"])], user=user)
|
|
create_notification(user["uid"], "auth.apikey", "Je API-sleutel is vernieuwd.", "/profile/api-key")
|
|
return action_result(request, "/profile/api-key", data={"api_key": key})
|
|
|
|
|
|
@router.post("/avatar/regenerate")
|
|
async def avatar_regenerate(request: Request):
|
|
user = require_user(request)
|
|
update_user(user["uid"], avatar_seed=generate_uid())
|
|
invalidate_user_cache(propagate=True)
|
|
record(request, "profile.avatar.regenerate", targets=[("user", user["uid"])], user=user)
|
|
return action_result(request, f"/mensen/{user['username']}")
|