pub mod did_public;
pub mod health;
pub mod resolve_agent_name;
mod resolve_shared;
#[cfg(feature = "method-web")]
pub mod resolve_web;
#[cfg(feature = "method-webs")]
pub mod resolve_webs;
#[cfg(feature = "method-webvh")]
pub mod resolve_webvh;
pub mod trust_tasks;
use axum::Router;
use axum::extract::DefaultBodyLimit;
use axum::routing::{get, post};
use crate::server::AppState;
fn agent_name_routes() -> Router<AppState> {
Router::new()
.route("/@", get(resolve_agent_name::serve_community))
.route("/@{name}", get(resolve_agent_name::serve))
.route("/@{name}/{*context}", get(resolve_agent_name::serve))
}
pub const TRUST_TASKS_BODY_LIMIT_BYTES: usize = 1024 * 1024;
fn trust_task_routes(body_limit: usize) -> Router<AppState> {
Router::new()
.route(
"/trust-tasks",
post(trust_tasks::receive).layer(DefaultBodyLimit::max(
body_limit.max(TRUST_TASKS_BODY_LIMIT_BYTES),
)),
)
.layer(axum::middleware::from_fn(
trust_tasks::log_missing_connect_info,
))
}
pub fn trust_task_listener(body_limit: usize) -> Router<AppState> {
Router::new().nest("/api", trust_task_routes(body_limit))
}
pub fn router_without_fallback(body_limit: usize) -> Router<AppState> {
router_public_only().merge(trust_task_listener(body_limit))
}
pub fn router_public_only() -> Router<AppState> {
#[allow(unused_mut)]
let mut router = Router::new();
#[cfg(feature = "method-webvh")]
{
router = router
.route(
"/.well-known/did.jsonl",
get(resolve_webvh::serve_root_did_log),
)
.route(
"/.well-known/did-witness.json",
get(resolve_webvh::serve_root_witness),
);
}
#[cfg(feature = "method-web")]
{
router = router.route(
"/.well-known/did.json",
get(resolve_web::serve_root_did_web),
);
}
router.merge(agent_name_routes())
}
pub fn router(body_limit: usize) -> Router<AppState> {
router_without_fallback(body_limit).fallback(did_public::serve_public)
}