Skip to main content

wowlab_sentinel/http/routes/
mod.rs

1mod 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}