From c9adfd9a2b41da34c645a1b564dae3307f49304d Mon Sep 17 00:00:00 2001 From: Zyy Date: Wed, 14 Oct 2026 17:54:43 +0800 Subject: [PATCH] fix(admin): exclude public plugin routes from compression Keep public plugin resources and OAuth callbacks outside the admin compression layer while preserving cache and method error handling. Co-authored-by: Codex --- backend/crates/gateway-api/src/admin/mod.rs | 3 ++- .../gateway-api/src/admin/plugins/management.rs | 15 +++++++++++++-- .../crates/gateway-api/src/admin/plugins/mod.rs | 2 +- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/backend/crates/gateway-api/src/admin/mod.rs b/backend/crates/gateway-api/src/admin/mod.rs index be15f0718..273af23b1 100644 --- a/backend/crates/gateway-api/src/admin/mod.rs +++ b/backend/crates/gateway-api/src/admin/mod.rs @@ -56,12 +56,13 @@ where .method_not_allowed_fallback(method_not_allowed) .route("/api/admin", any(admin_not_found)) .route("/api/admin/{*path}", any(admin_not_found)) - .layer(middleware::map_response(no_store)) .layer( CompressionLayer::new() .quality(CompressionLevel::Fastest) .compress_when(compression::AdminJson), ) + .merge(plugins::public_router().method_not_allowed_fallback(method_not_allowed)) + .layer(middleware::map_response(no_store)) } async fn method_not_allowed() -> AdminError { diff --git a/backend/crates/gateway-api/src/admin/plugins/management.rs b/backend/crates/gateway-api/src/admin/plugins/management.rs index 9d2348f7c..4110e54af 100644 --- a/backend/crates/gateway-api/src/admin/plugins/management.rs +++ b/backend/crates/gateway-api/src/admin/plugins/management.rs @@ -53,8 +53,19 @@ pub(super) fn router() -> Route .route("/api/admin/plugins/extensions/{instance_id}/{artifact_sha256}/{revision}/callback-tickets", post(start_callback::)) .route("/api/admin/plugins/extensions/{instance_id}/{artifact_sha256}/{revision}/api/{*path}", any(handle::)) .route("/api/admin/plugins/extensions/{instance_id}/{artifact_sha256}/{revision}/resources/{*path}", get(resource::)) - .route("/plugins/resources/{instance_id}/{artifact_sha256}/{revision}/{*path}", get(public_resource::)) - .route("/plugins/callbacks/{instance_id}/{artifact_sha256}/{revision}/{*path}", get(callback::)) +} + +pub(in crate::admin) fn public_router() -> Router +{ + Router::new() + .route( + "/plugins/resources/{instance_id}/{artifact_sha256}/{revision}/{*path}", + get(public_resource::), + ) + .route( + "/plugins/callbacks/{instance_id}/{artifact_sha256}/{revision}/{*path}", + get(callback::), + ) } pub(in crate::admin) fn model_router() -> Router { diff --git a/backend/crates/gateway-api/src/admin/plugins/mod.rs b/backend/crates/gateway-api/src/admin/plugins/mod.rs index 26b2960f4..971141055 100644 --- a/backend/crates/gateway-api/src/admin/plugins/mod.rs +++ b/backend/crates/gateway-api/src/admin/plugins/mod.rs @@ -5,7 +5,7 @@ mod distribution; mod instances; mod management; -pub(super) use management::model_router; +pub(super) use management::{model_router, public_router}; #[derive(serde::Deserialize)] #[serde(deny_unknown_fields)]