this repo has no description
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}