this repo has no description
at main 1.5 kB view raw
1use super::{ 2 context::WebContext, handle_admin::handle_admin, 3 handle_describe_feed_generator::handle_describe_feed_generator, 4 handle_get_feed_skeleton::handle_get_feed_skeleton, handle_index::handle_index, 5 handle_well_known::handle_well_known, 6}; 7use axum::{ 8 http::HeaderValue, 9 routing::{get, post}, 10 Router, 11}; 12use http::{ 13 header::{ACCEPT, ACCEPT_LANGUAGE}, 14 Method, 15}; 16use std::time::Duration; 17use tower_http::cors::CorsLayer; 18use tower_http::timeout::TimeoutLayer; 19use tower_http::trace::TraceLayer; 20 21pub fn build_router(web_context: WebContext) -> Router { 22 Router::new() 23 .route("/", get(handle_index)) 24 .route("/.well-known/did.json", get(handle_well_known)) 25 .route( 26 "/xrpc/app.bsky.feed.getFeedSkeleton", 27 get(handle_get_feed_skeleton), 28 ) 29 .route( 30 "/xrpc/app.bsky.feed.describeFeedGenerator", 31 get(handle_describe_feed_generator), 32 ) 33 .route("/admin", get(handle_admin)) 34 .route("/admin", post(handle_admin)) 35 .layer(( 36 TraceLayer::new_for_http(), 37 TimeoutLayer::new(Duration::from_secs(10)), 38 )) 39 .layer( 40 CorsLayer::new() 41 .allow_origin(web_context.external_base.parse::<HeaderValue>().unwrap()) 42 .allow_methods([Method::GET]) 43 .allow_headers([ACCEPT_LANGUAGE, ACCEPT]), 44 ) 45 .with_state(web_context.clone()) 46}