This is an automated email from the ASF dual-hosted git repository.
xuanwo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/opendal-reqsign.git
The following commit(s) were added to refs/heads/main by this push:
new d87031d chore: align default credential provider API style (#700)
d87031d is described below
commit d87031dc4a7e81583fe76d8f0f521da2930c89b1
Author: Xuanwo <[email protected]>
AuthorDate: Wed Mar 18 16:28:41 2026 +0800
chore: align default credential provider API style (#700)
## Summary
This PR aligns `DefaultCredentialProvider` /
`DefaultCredentialProviderBuilder` API style across services using
`aws-v4` as the baseline.
### Changes
- Fix Oracle `DefaultCredentialProvider::default()` semantics to match
`new()`.
- Add Oracle regression test to ensure `default()` and `new()` stay
equivalent.
- Export `DefaultCredentialProviderBuilder` from Volcengine
`provide_credential` module.
- Export `DefaultCredentialProviderBuilder` from Google and Oracle crate
roots.
- Make `provide_credential` module private in Oracle and Tencent (keep
public re-exports).
## Validation
- `cargo check -p reqsign-oracle -p reqsign-volcengine-tos -p
reqsign-google -p reqsign-tencent-cos`
- `cargo test -p reqsign-oracle test_default_matches_new`
---
services/google/src/lib.rs | 3 +-
services/oracle/src/lib.rs | 6 +--
services/oracle/src/provide_credential/default.rs | 50 +++++++++++++++++++++-
services/tencent-cos/src/lib.rs | 2 +-
.../volcengine-tos/src/provide_credential/mod.rs | 2 +-
5 files changed, 56 insertions(+), 7 deletions(-)
diff --git a/services/google/src/lib.rs b/services/google/src/lib.rs
index 2b3cd06..79785bd 100644
--- a/services/google/src/lib.rs
+++ b/services/google/src/lib.rs
@@ -27,5 +27,6 @@ pub use sign_request::RequestSigner;
mod provide_credential;
pub use provide_credential::{
- DefaultCredentialProvider, StaticCredentialProvider,
VmMetadataCredentialProvider,
+ DefaultCredentialProvider, DefaultCredentialProviderBuilder,
StaticCredentialProvider,
+ VmMetadataCredentialProvider,
};
diff --git a/services/oracle/src/lib.rs b/services/oracle/src/lib.rs
index 6bbc291..4632912 100644
--- a/services/oracle/src/lib.rs
+++ b/services/oracle/src/lib.rs
@@ -30,10 +30,10 @@ pub use credential::Credential;
mod sign_request;
pub use sign_request::RequestSigner;
-pub mod provide_credential;
+mod provide_credential;
#[allow(deprecated)]
pub use provide_credential::ConfigCredentialProvider;
pub use provide_credential::{
- ConfigFileCredentialProvider, DefaultCredentialProvider,
EnvCredentialProvider,
- StaticCredentialProvider,
+ ConfigFileCredentialProvider, DefaultCredentialProvider,
DefaultCredentialProviderBuilder,
+ EnvCredentialProvider, StaticCredentialProvider,
};
diff --git a/services/oracle/src/provide_credential/default.rs
b/services/oracle/src/provide_credential/default.rs
index 5d88d34..f29ce3e 100644
--- a/services/oracle/src/provide_credential/default.rs
+++ b/services/oracle/src/provide_credential/default.rs
@@ -24,11 +24,17 @@ use reqsign_core::{Context, ProvideCredential,
ProvideCredentialChain, Result};
/// This loader will try to load credentials in the following order:
/// 1. From environment variables
/// 2. From the default Oracle config file (~/.oci/config)
-#[derive(Debug, Default)]
+#[derive(Debug)]
pub struct DefaultCredentialProvider {
chain: ProvideCredentialChain<Credential>,
}
+impl Default for DefaultCredentialProvider {
+ fn default() -> Self {
+ Self::new()
+ }
+}
+
impl DefaultCredentialProvider {
/// Create a builder to configure the default credential chain.
pub fn builder() -> DefaultCredentialProviderBuilder {
@@ -147,3 +153,45 @@ impl ProvideCredential for DefaultCredentialProvider {
self.chain.provide_credential(ctx).await
}
}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::constants::{ORACLE_FINGERPRINT, ORACLE_KEY_FILE,
ORACLE_TENANCY, ORACLE_USER};
+ use reqsign_core::{Context, StaticEnv};
+ use std::collections::HashMap;
+
+ #[tokio::test]
+ async fn test_default_matches_new() {
+ let ctx = Context::new().with_env(StaticEnv {
+ home_dir: None,
+ envs: HashMap::from([
+ (ORACLE_USER.to_string(), "test_user".to_string()),
+ (ORACLE_TENANCY.to_string(), "test_tenancy".to_string()),
+ (ORACLE_KEY_FILE.to_string(), "/tmp/key.pem".to_string()),
+ (
+ ORACLE_FINGERPRINT.to_string(),
+ "test_fingerprint".to_string(),
+ ),
+ ]),
+ });
+
+ let from_default = DefaultCredentialProvider::default()
+ .provide_credential(&ctx)
+ .await
+ .expect("load must succeed")
+ .expect("credential must exist");
+ let from_new = DefaultCredentialProvider::new()
+ .provide_credential(&ctx)
+ .await
+ .expect("load must succeed")
+ .expect("credential must exist");
+
+ assert_eq!(from_default.user, from_new.user);
+ assert_eq!(from_default.tenancy, from_new.tenancy);
+ assert_eq!(from_default.key_file, from_new.key_file);
+ assert_eq!(from_default.fingerprint, from_new.fingerprint);
+ assert!(from_default.expires_in.is_some());
+ assert!(from_new.expires_in.is_some());
+ }
+}
diff --git a/services/tencent-cos/src/lib.rs b/services/tencent-cos/src/lib.rs
index 554a417..4ac18ca 100644
--- a/services/tencent-cos/src/lib.rs
+++ b/services/tencent-cos/src/lib.rs
@@ -27,5 +27,5 @@ pub use credential::Credential;
mod sign_request;
pub use sign_request::RequestSigner;
-pub mod provide_credential;
+mod provide_credential;
pub use provide_credential::*;
diff --git a/services/volcengine-tos/src/provide_credential/mod.rs
b/services/volcengine-tos/src/provide_credential/mod.rs
index 4461cd3..d9313bd 100644
--- a/services/volcengine-tos/src/provide_credential/mod.rs
+++ b/services/volcengine-tos/src/provide_credential/mod.rs
@@ -19,6 +19,6 @@ mod default;
mod env;
mod r#static;
-pub use default::DefaultCredentialProvider;
+pub use default::{DefaultCredentialProvider, DefaultCredentialProviderBuilder};
pub use env::EnvCredentialProvider;
pub use r#static::StaticCredentialProvider;