about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVika <vika@fireburn.ru>2022-07-19 03:09:37 +0300
committerVika <vika@fireburn.ru>2022-07-19 03:09:37 +0300
commit6fdb4c25c4557aa0b59b5c4ba348ecab502cb57e (patch)
treefb412dc81ae1702958c3cc852cf140d9eace54b2
parentc00547c8437b992aa073378ab165aa40b073e1b4 (diff)
downloadkittybox-6fdb4c25c4557aa0b59b5c4ba348ecab502cb57e.tar.zst
Catch panics on requests
This will allow to display a prettier error page in the future.

There is a possibility of instantiating the panic handler per-module
to allow for custom panic messages expressed in the same form the
module itself gives error messages (e.g. pretty HTML for frontend,
MicropubError for Micropub messages etc.)
-rw-r--r--kittybox-rs/Cargo.toml2
-rw-r--r--kittybox-rs/src/main.rs7
2 files changed, 5 insertions, 4 deletions
diff --git a/kittybox-rs/Cargo.toml b/kittybox-rs/Cargo.toml
index 5a3ae90..1d1d9fd 100644
--- a/kittybox-rs/Cargo.toml
+++ b/kittybox-rs/Cargo.toml
@@ -72,7 +72,7 @@ sha2 = "^0.9.8"              # SHA-2 series of algorithms for Rust
 tracing = { version = "0.1.34", features = [] }
 tracing-tree = "0.2.1"
 tracing-subscriber = { version = "0.3.11", features = ["env-filter", "json"] }
-tower-http = { version = "0.3.3", features = ["trace", "cors"] }
+tower-http = { version = "0.3.3", features = ["trace", "cors", "catch-panic"] }
 tower = { version = "0.4.12", features = ["tracing"] }
 tracing-log = "0.1.3"
 [dependencies.tokio]
diff --git a/kittybox-rs/src/main.rs b/kittybox-rs/src/main.rs
index 59c3e69..4fb0eec 100644
--- a/kittybox-rs/src/main.rs
+++ b/kittybox-rs/src/main.rs
@@ -174,8 +174,8 @@ async fn main() {
                 "/.kittybox/health",
                 axum::routing::get(
                     |axum::Extension(db): axum::Extension<FileStorage>| async move {
-                    // TODO health-check the database
-                    "OK"
+                        // TODO health-check the database
+                        "OK"
                     }
                 )
                     .layer(axum::Extension(database))
@@ -195,7 +195,8 @@ async fn main() {
             .layer(axum::Extension(kittybox::tokenauth::TokenEndpoint(token_endpoint)))
             .layer(tower::ServiceBuilder::new()
                    .layer(tower_http::trace::TraceLayer::new_for_http())
-                   .into_inner());
+                   .into_inner())
+            .layer(tower_http::catch_panic::CatchPanicLayer::new());
 
         // A little dance to turn a potential file descriptor into
         // a guaranteed async network socket