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(

Reply via email to