From 3c4eb66ca5f96b8cc3289aba6c34373df1dba64a Mon Sep 17 00:00:00 2001 From: Vika Date: Thu, 1 Aug 2024 20:10:21 +0300 Subject: Move Kittybox router composition into the library Since Kittybox router composition is entirely generic, we can move it into the library. I feel like I could also split database types into their own crates, too. --- src/lib.rs | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index 1cc01c2..2d15423 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -206,3 +206,52 @@ pub mod companion { ) } } + +async fn teapot_route() -> impl axum::response::IntoResponse { + use axum::http::{header, StatusCode}; + (StatusCode::IM_A_TEAPOT, [(header::CONTENT_TYPE, "text/plain")], "Sorry, can't brew coffee yet!") +} + +async fn health_check( + axum::extract::State(data): axum::extract::State, +) -> impl axum::response::IntoResponse +where + D: crate::database::Storage +{ + (axum::http::StatusCode::OK, std::borrow::Cow::Borrowed("OK")) +} + +pub async fn compose_kittybox() -> axum::Router +where +A: AuthBackend + 'static + FromRef, +S: Storage + 'static + FromRef, +M: MediaStore + 'static + FromRef, +Q: kittybox_util::queue::JobQueue + FromRef, +reqwest::Client: FromRef, +Arc>>: FromRef, +St: Clone + Send + Sync + 'static +{ + use axum::routing::get; + axum::Router::new() + .route("/", get(crate::frontend::homepage::)) + .fallback(get(crate::frontend::catchall::)) + .route("/.kittybox/micropub", crate::micropub::router::()) + .route("/.kittybox/onboarding", crate::frontend::onboarding::router::()) + .nest("/.kittybox/media", crate::media::router::()) + .merge(crate::indieauth::router::()) + .merge(crate::webmentions::router::()) + .route("/.kittybox/health", get(health_check::)) + .route( + "/.kittybox/static/:path", + axum::routing::get(crate::frontend::statics) + ) + .route("/.kittybox/coffee", get(teapot_route)) + .nest("/.kittybox/micropub/client", crate::companion::router::()) + .layer(tower_http::trace::TraceLayer::new_for_http()) + .layer(tower_http::catch_panic::CatchPanicLayer::new()) + .layer(tower_http::sensitive_headers::SetSensitiveHeadersLayer::new([ + axum::http::header::AUTHORIZATION, + axum::http::header::COOKIE, + axum::http::header::SET_COOKIE, + ])) +} -- cgit 1.4.1