wowlab_sentinel/http/routes/
mod.rs1mod chunks;
2mod favicon;
3mod index;
4mod metrics;
5mod nodes;
6mod status;
7mod webhooks;
8mod work_context;
9
10use std::sync::Arc;
11
12use axum::{Router, middleware, routing::get};
13
14use crate::{
15 http::auth::{self, verify_token_api},
16 state::ServerState,
17};
18
19pub(super) fn router(state: &Arc<ServerState>) -> Router<Arc<ServerState>> {
20 let node_api = Router::new()
21 .merge(nodes::router())
22 .merge(chunks::router())
23 .merge(work_context::router())
24 .layer(middleware::from_fn(auth::verify_node));
25
26 let public = Router::new()
27 .route("/", get(index::handler))
28 .route("/favicon.ico", get(favicon::handler))
29 .route("/status", get(status::handler))
30 .route("/metrics", get(metrics::handler));
31
32 let mut router = Router::new()
33 .merge(public)
34 .merge(node_api)
35 .merge(webhooks::router());
36
37 if state.config.mcp_enabled {
38 let mcp_service = crate::mcp::create_service(
39 state.dbs.get::<crate::mcp::McpDb>().clone(),
40 Arc::clone(&state.mcp),
41 );
42 let mcp_router = Router::new()
43 .nest_service("/mcp", mcp_service)
44 .layer(middleware::from_fn(crate::mcp::capture_user_middleware))
45 .layer(middleware::from_fn_with_state(
46 Arc::clone(state),
47 verify_token_api,
48 ));
49
50 router = router.merge(mcp_router);
51 tracing::info!("MCP server enabled at /mcp (authentication required)");
52 }
53
54 router
55}