44 lines
1.7 KiB
Python
44 lines
1.7 KiB
Python
# retoor <retoor@molodetz.nl>
|
|
from fastapi import APIRouter, Request
|
|
|
|
from molodetz.database import get_join_request, list_join_requests, update_join_request
|
|
from molodetz.dependencies import json_or_form
|
|
from molodetz.link_check import check_repo_link
|
|
from molodetz.models import JoinStatusForm
|
|
from molodetz.responses import action_result, respond
|
|
from molodetz.routers.admin._shared import admin_seo
|
|
from molodetz.schemas.joins import JoinListOut
|
|
from molodetz.utils.audit import record
|
|
from molodetz.utils.auth import not_found, require_admin
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/joins")
|
|
async def joins_index(request: Request):
|
|
require_admin(request)
|
|
return respond(request, "admin/joins.html", {"requests": list_join_requests(), "seo": admin_seo(request, "Join requests")}, model=JoinListOut)
|
|
|
|
|
|
@router.post("/joins/{uid}/status")
|
|
async def joins_status(request: Request, uid: str):
|
|
user = require_admin(request)
|
|
row = get_join_request(uid)
|
|
if row is None:
|
|
not_found("Join request not found")
|
|
data = await json_or_form(request, JoinStatusForm)
|
|
update_join_request(uid, status=data.status)
|
|
record(request, "join.request.status", payload={"status": data.status}, targets=[("join_request", uid)], user=user)
|
|
return action_result(request, "/admin/joins", data={"uid": uid, "status": data.status})
|
|
|
|
|
|
@router.post("/joins/{uid}/check")
|
|
async def joins_check(request: Request, uid: str):
|
|
user = require_admin(request)
|
|
row = get_join_request(uid)
|
|
if row is None:
|
|
not_found("Join request not found")
|
|
result = await check_repo_link(row)
|
|
record(request, "join.request.check", payload=result, targets=[("join_request", uid)], user=user)
|
|
return action_result(request, "/admin/joins", data=result)
|