From 3a97b13e2fea259426879c7b29f581516c804a74 Mon Sep 17 00:00:00 2001 From: Gwen Lg Date: Tue, 3 Mar 2026 16:44:08 +0100 Subject: [PATCH] wip: add percent_decode before uri_encode for check signature this avoid error when request uri is not encoded for signature --- Cargo.lock | 1 + src/api/common/Cargo.toml | 1 + src/api/common/signature/payload.rs | 6 +++++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index a1be0ae2..015e1df3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1548,6 +1548,7 @@ dependencies = [ "md-5", "nom", "opentelemetry", + "percent-encoding", "pin-project", "quick-xml", "serde", diff --git a/src/api/common/Cargo.toml b/src/api/common/Cargo.toml index 8e9d074f..5e58577e 100644 --- a/src/api/common/Cargo.toml +++ b/src/api/common/Cargo.toml @@ -27,6 +27,7 @@ thiserror.workspace = true hex.workspace = true hmac.workspace = true md-5.workspace = true +percent-encoding.workspace = true tracing.workspace = true nom.workspace = true pin-project.workspace = true diff --git a/src/api/common/signature/payload.rs b/src/api/common/signature/payload.rs index 0b0e8de6..532fa04b 100644 --- a/src/api/common/signature/payload.rs +++ b/src/api/common/signature/payload.rs @@ -340,7 +340,11 @@ pub fn canonical_request( let canonical_uri: std::borrow::Cow = if service != "s3" { uri_encode(canonical_uri, false).into() } else { - canonical_uri.into() + //TODO: decode is already do for construct Api::EndPoint, should be better to be able to keep it instead of compute it again. + let key = percent_encoding::percent_decode_str(canonical_uri) + .decode_utf8() + .unwrap(); + uri_encode(&key, false).into() }; // Canonical query string from passed HeaderMap