This is an automated email from the ASF dual-hosted git repository. xuanwo pushed a commit to branch signing-failed in repository https://gitbox.apache.org/repos/asf/opendal-reqsign.git
commit b8365b6c2d4f7ab17c519efb5e39d0523e26accd Author: Xuanwo <[email protected]> AuthorDate: Mon Oct 13 17:48:13 2025 +0800 Return error if credetnial failed to find Signed-off-by: Xuanwo <[email protected]> --- core/src/signer.rs | 10 ++++++++-- services/aws-v4/src/sign_request.rs | 6 +++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/core/src/signer.rs b/core/src/signer.rs index c178659..6ba2508 100644 --- a/core/src/signer.rs +++ b/core/src/signer.rs @@ -15,7 +15,8 @@ // specific language governing permissions and limitations // under the License. -use crate::{Context, ProvideCredential, Result, SignRequest, SigningCredential}; +use crate::{Context, Error, ProvideCredential, Result, SignRequest, SigningCredential}; +use std::any::type_name; use std::sync::{Arc, Mutex}; use std::time::Duration; @@ -81,8 +82,13 @@ impl<K: SigningCredential> Signer<K> { ctx }; + let credential_ref = credential.as_ref().ok_or_else(|| { + Error::credential_invalid("failed to load signing credential") + .with_context(format!("credential_type: {}", type_name::<K>())) + })?; + self.builder - .sign_request(&self.ctx, req, credential.as_ref(), expires_in) + .sign_request(&self.ctx, req, Some(credential_ref), expires_in) .await } } diff --git a/services/aws-v4/src/sign_request.rs b/services/aws-v4/src/sign_request.rs index 10c583f..49144ad 100644 --- a/services/aws-v4/src/sign_request.rs +++ b/services/aws-v4/src/sign_request.rs @@ -77,13 +77,13 @@ impl SignRequest for RequestSigner { credential: Option<&Self::Credential>, expires_in: Option<Duration>, ) -> Result<()> { - let now = self.time.unwrap_or_else(Timestamp::now); - let mut signed_req = SigningRequest::build(req)?; - let Some(cred) = credential else { return Ok(()); }; + let now = self.time.unwrap_or_else(Timestamp::now); + let mut signed_req = SigningRequest::build(req)?; + // canonicalize context canonicalize_header(&mut signed_req, cred, expires_in, now)?; canonicalize_query(
