about summary refs log tree commit diff
path: root/kittybox-rs
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 /kittybox-rs
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.)
Diffstat (limited to 'kittybox-rs')
-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