Skip to content

Commit fb2df27

Browse files
committed
refactor: isolate console dashboard routes
1 parent 28434d6 commit fb2df27

2 files changed

Lines changed: 108 additions & 60 deletions

File tree

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
"""Authenticated read-only administration console page routes."""
2+
3+
from __future__ import annotations
4+
5+
from collections.abc import Callable
6+
from typing import Any
7+
8+
from starlette.requests import Request
9+
from starlette.responses import HTMLResponse, Response
10+
from starlette.routing import Route
11+
12+
from agentnet.console.read_service import ConsoleReadService
13+
from agentnet.console.render import ConsoleRenderer
14+
from agentnet.console.session import ConsoleSessionStatus
15+
16+
17+
SessionResolver = Callable[[Request], ConsoleSessionStatus]
18+
MutationAuthorizer = Callable[[Request], Any]
19+
PageResponse = Callable[..., HTMLResponse]
20+
21+
22+
def create_console_dashboard_routes(
23+
*,
24+
read_service: ConsoleReadService,
25+
renderer: ConsoleRenderer,
26+
session_for: SessionResolver,
27+
mutation_authorizer: MutationAuthorizer,
28+
page_response: PageResponse,
29+
) -> list[Route]:
30+
"""Mount authenticated read-only console pages."""
31+
32+
async def home(request: Request) -> Response:
33+
status = session_for(request)
34+
return page_response(
35+
renderer.home(
36+
read_service.home(actor=status.actor),
37+
mutation_authorizer(request),
38+
)
39+
)
40+
41+
async def servers_page(request: Request) -> Response:
42+
status = session_for(request)
43+
return page_response(
44+
renderer.servers(
45+
read_service.servers(actor=status.actor),
46+
mutation_authorizer(request),
47+
)
48+
)
49+
50+
async def people_page(request: Request) -> Response:
51+
status = session_for(request)
52+
return page_response(
53+
renderer.people(
54+
read_service.people(actor=status.actor),
55+
mutation_authorizer(request),
56+
)
57+
)
58+
59+
async def approvals_page(request: Request) -> Response:
60+
status = session_for(request)
61+
return page_response(
62+
renderer.approvals(
63+
read_service.approvals(actor=status.actor),
64+
mutation_authorizer(request),
65+
)
66+
)
67+
68+
async def security_page(request: Request) -> Response:
69+
status = session_for(request)
70+
return page_response(
71+
renderer.security(
72+
read_service.security(actor=status.actor),
73+
mutation_authorizer(request),
74+
)
75+
)
76+
77+
async def activity_page(request: Request) -> Response:
78+
status = session_for(request)
79+
return page_response(
80+
renderer.activity(
81+
read_service.activity(actor=status.actor),
82+
mutation_authorizer(request),
83+
)
84+
)
85+
86+
return [
87+
Route("/", home, methods=["GET"]),
88+
Route("/servers", servers_page, methods=["GET"]),
89+
Route("/people", people_page, methods=["GET"]),
90+
Route("/approvals", approvals_page, methods=["GET"]),
91+
Route("/security", security_page, methods=["GET"]),
92+
Route("/activity", activity_page, methods=["GET"]),
93+
]
94+
95+
96+
__all__ = ["create_console_dashboard_routes"]

src/agentnet/console/http.py

Lines changed: 12 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from starlette.responses import HTMLResponse, JSONResponse, RedirectResponse, Response, StreamingResponse
1818
from starlette.routing import Route
1919

20+
from agentnet.console.dashboard_http import create_console_dashboard_routes
2021
from agentnet.console.headers import protected_headers
2122
from agentnet.console.models import InvitationCreationForm
2223
from agentnet.console.mutations import ConsoleMutationService
@@ -236,60 +237,6 @@ async def script(_request: Request) -> Response:
236237
},
237238
)
238239

239-
async def home(request: Request) -> Response:
240-
status = session_for(request)
241-
return page_response(
242-
renderer.home(
243-
read_service.home(actor=status.actor),
244-
mutation_authorizer(request),
245-
)
246-
)
247-
248-
async def servers_page(request: Request) -> Response:
249-
status = session_for(request)
250-
return page_response(
251-
renderer.servers(
252-
read_service.servers(actor=status.actor),
253-
mutation_authorizer(request),
254-
)
255-
)
256-
257-
async def people_page(request: Request) -> Response:
258-
status = session_for(request)
259-
return page_response(
260-
renderer.people(
261-
read_service.people(actor=status.actor),
262-
mutation_authorizer(request),
263-
)
264-
)
265-
266-
async def approvals_page(request: Request) -> Response:
267-
status = session_for(request)
268-
return page_response(
269-
renderer.approvals(
270-
read_service.approvals(actor=status.actor),
271-
mutation_authorizer(request),
272-
)
273-
)
274-
275-
async def security_page(request: Request) -> Response:
276-
status = session_for(request)
277-
return page_response(
278-
renderer.security(
279-
read_service.security(actor=status.actor),
280-
mutation_authorizer(request),
281-
)
282-
)
283-
284-
async def activity_page(request: Request) -> Response:
285-
status = session_for(request)
286-
return page_response(
287-
renderer.activity(
288-
read_service.activity(actor=status.actor),
289-
mutation_authorizer(request),
290-
)
291-
)
292-
293240
async def sign_out(request: Request) -> Response:
294241
status, _ = await mutation_form(request)
295242
token = request.cookies.get(SESSION_COOKIE, "")
@@ -623,12 +570,17 @@ async def extension_error(_request: Request, exc: Exception) -> Response:
623570
)
624571
routes += [
625572
Route("/v1/console/sign-out", sign_out, methods=["POST"]),
626-
Route("/", home, methods=["GET"]),
627-
Route("/servers", servers_page, methods=["GET"]),
628-
Route("/people", people_page, methods=["GET"]),
629-
Route("/approvals", approvals_page, methods=["GET"]),
630-
Route("/security", security_page, methods=["GET"]),
631-
Route("/activity", activity_page, methods=["GET"]),
573+
]
574+
routes.extend(
575+
create_console_dashboard_routes(
576+
read_service=read_service,
577+
renderer=renderer,
578+
session_for=session_for,
579+
mutation_authorizer=mutation_authorizer,
580+
page_response=page_response,
581+
)
582+
)
583+
routes += [
632584
Route("/invitations/new", new_invitation, methods=["GET"]),
633585
Route("/invitations", create_invitation, methods=["POST"]),
634586
Route("/invitations/{invitation_id}", invitation_detail, methods=["GET"]),

0 commit comments

Comments
 (0)