diff --git a/crates/porxie/src/server/mod.rs b/crates/porxie/src/server/mod.rs index 8ba612f..0fb35e6 100644 --- a/crates/porxie/src/server/mod.rs +++ b/crates/porxie/src/server/mod.rs @@ -21,7 +21,8 @@ use crate::{ }, xrpc_compat_get_blob_handler, xrpc_get_blob_metadata_handler, }, - xrpc_fallback_handler, xrpc_get_health_handler, xrpc_nonspec_method_handler, + xrpc_fallback_handler, xrpc_get_health_handler, xrpc_internal_error_panic_handler, + xrpc_nonspec_method_handler, }, }, }, @@ -116,7 +117,7 @@ impl PorxieServer { .route("/{rest}", post(xrpc_fallback_handler)) .route("/{rest}", any(xrpc_nonspec_method_handler)), ) - .layer(CatchPanicLayer::new()) + .layer(CatchPanicLayer::custom(xrpc_internal_error_panic_handler)) .layer(NormalizePathLayer::trim_trailing_slash()) .layer(axum_middleware::from_fn(server_headers_middleware)) .layer(CorsLayer::permissive()) diff --git a/crates/porxie/src/server/routes/xrpc/mod.rs b/crates/porxie/src/server/routes/xrpc/mod.rs index 131c96c..f967ea3 100644 --- a/crates/porxie/src/server/routes/xrpc/mod.rs +++ b/crates/porxie/src/server/routes/xrpc/mod.rs @@ -1,8 +1,10 @@ pub mod dev_blooym; - mod health; + +use axum::{body::Body, http::Response, response::IntoResponse}; pub use health::xrpc_get_health_handler; +use core::any::Any; use jacquard_axum::GenericXrpcErrorResponse; use reqwest::StatusCode; @@ -17,3 +19,12 @@ pub async fn xrpc_fallback_handler() -> GenericXrpcErrorResponse { pub async fn xrpc_nonspec_method_handler() -> StatusCode { StatusCode::METHOD_NOT_ALLOWED } + +pub fn xrpc_internal_error_panic_handler(_err: Box) -> Response { + GenericXrpcErrorResponse::new( + axum::http::StatusCode::INTERNAL_SERVER_ERROR, + "InternalServerError", + Some("Internal server error"), + ) + .into_response() +}