from fastapi import APIRouter, Depends, Form, Request from fastapi.responses import RedirectResponse from anode_client import anode_request from auth import require_admin from templating import templates router = APIRouter(prefix="/admin/flows") @router.get("") def index(request: Request, user: dict = Depends(require_admin)): result = anode_request("GET", "/api/v1/organizations") organizations = result.get("organizations", []) if result.get("success") else [] return templates.TemplateResponse( request, "admin/flows_index.html", {"user": user, "organizations": organizations} ) @router.get("/{organization_id}") def organisation_flows(request: Request, organization_id: str, user: dict = Depends(require_admin)): orgs_result = anode_request("GET", "/api/v1/organizations") organizations = orgs_result.get("organizations", []) if orgs_result.get("success") else [] organization = next((o for o in organizations if o["id"] == organization_id), None) unassigned_result = anode_request( "GET", f"/api/v1/organizations/{organization_id}/devices/unassigned" ) unassigned_devices = unassigned_result.get("devices", []) if unassigned_result.get("success") else [] sessions_result = anode_request( "GET", f"/api/v1/organizations/{organization_id}/enrollment-sessions" ) enrollment_sessions = sessions_result.get("enrollment_sessions", []) if sessions_result.get("success") else [] templates_result = anode_request( "GET", f"/api/v1/organizations/{organization_id}/bereitstellungsvorlagen" ) bereitstellungsvorlagen = templates_result.get("bereitstellungsvorlagen", []) if templates_result.get("success") else [] return templates.TemplateResponse( request, "admin/flows_organisation.html", { "user": user, "organization": organization, "organization_id": organization_id, "unassigned_devices": unassigned_devices, "enrollment_sessions": enrollment_sessions, "bereitstellungsvorlagen": bereitstellungsvorlagen, }, ) @router.post("/{organization_id}/geraete/{device_id}/bestaetigen") def geraet_bestaetigen( organization_id: str, device_id: str, bereitstellungsvorlage_id: str = Form(...), user: dict = Depends(require_admin), ): anode_request( "POST", f"/api/v1/templates/{bereitstellungsvorlage_id}/resolve", json={"device_id": device_id}, ) return RedirectResponse(f"/admin/flows/{organization_id}", status_code=303) @router.post("/{organization_id}/enrollment-sessions") def enrollment_session_anlegen( organization_id: str, bereitstellungsvorlage_id: str = Form(...), max_devices: int = Form(...), expires_at: str = Form(...), user: dict = Depends(require_admin), ): anode_request( "POST", f"/api/v1/organizations/{organization_id}/enrollment-sessions", json={ "bereitstellungsvorlage_id": bereitstellungsvorlage_id, "max_devices": max_devices, "expires_at": expires_at, }, ) return RedirectResponse(f"/admin/flows/{organization_id}", status_code=303) @router.post("/{organization_id}/enrollment-sessions/{session_id}/widerrufen") def enrollment_session_widerrufen( organization_id: str, session_id: str, user: dict = Depends(require_admin) ): anode_request("POST", f"/api/v1/enrollment-sessions/{session_id}/revoke") return RedirectResponse(f"/admin/flows/{organization_id}", status_code=303)