diff --git a/src/porchlight/admin/routes.py b/src/porchlight/admin/routes.py index a8423b0..57809f5 100644 --- a/src/porchlight/admin/routes.py +++ b/src/porchlight/admin/routes.py @@ -1,4 +1,4 @@ -from fastapi import APIRouter, Request, Response +from fastapi import APIRouter, Form, Request, Response from fastapi.responses import HTMLResponse, RedirectResponse from porchlight.dependencies import get_session_user @@ -58,3 +58,30 @@ async def users_list(request: Request) -> Response: templates = request.app.state.templates return templates.TemplateResponse(request, "admin/users.html", context) + + +@router.post("/invite", response_class=HTMLResponse) +async def create_invite( + request: Request, + username: str = Form(), +) -> Response: + session_user = get_session_user(request) + if session_user is None: + return RedirectResponse("/login", status_code=303) + + admin = await _get_admin_user(request) + if admin is None: + return HTMLResponse("Forbidden", status_code=403) + + username = username.strip() + if not username: + return HTMLResponse('
Username is required
') + + magic_link_service = request.app.state.magic_link_service + settings = request.app.state.settings + link = await magic_link_service.create(username=username, created_by=admin.username, note="admin invite") + url = f"{settings.issuer}/register/{link.token}" + + return HTMLResponse( + f'
Invite created for {username}:
{url}
' + )