From fe3a4a840e91ee1433534005e2bbcc198edbbf43 Mon Sep 17 00:00:00 2001 From: Zakariya Stasa Date: Wed, 5 Aug 2026 17:29:53 +0100 Subject: [PATCH 1/2] feat(services/azdls): support custom credential providers --- core/services/azdls/src/backend.rs | 42 +++++++++++++++++++++++++----- core/services/azdls/src/config.rs | 5 +++- 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/core/services/azdls/src/backend.rs b/core/services/azdls/src/backend.rs index 59819d356247..ecb0c22b9fd7 100644 --- a/core/services/azdls/src/backend.rs +++ b/core/services/azdls/src/backend.rs @@ -20,12 +20,15 @@ use std::sync::Arc; use http::StatusCode; use log::debug; +use reqsign_azure_storage::Credential; use reqsign_azure_storage::DefaultCredentialProvider; use reqsign_azure_storage::RequestSigner; use reqsign_azure_storage::StaticCredentialProvider; use reqsign_core::Context; use reqsign_core::Env as _; use reqsign_core::OsEnv; +use reqsign_core::ProvideCredential; +use reqsign_core::ProvideCredentialChain; use reqsign_core::Signer; use reqsign_core::StaticEnv; use reqsign_file_read_tokio::TokioFileRead; @@ -69,6 +72,7 @@ impl From for AzdlsConfig { #[derive(Default)] pub struct AzdlsBuilder { pub(super) config: AzdlsConfig, + pub(super) credential_providers: Option>, } impl Debug for AzdlsBuilder { @@ -187,6 +191,25 @@ impl AzdlsBuilder { self } + /// Add a custom credential provider. + /// + /// Custom providers replace the default Azure credential chain. Repeated + /// calls push the newest provider to the front of the custom chain. + pub fn credential_provider( + mut self, + provider: impl ProvideCredential + 'static, + ) -> Self { + let chain = self.credential_providers.unwrap_or_default(); + self.credential_providers = Some(chain.push_front(provider)); + self + } + + /// Replace the credential providers with a custom chain. + pub fn credential_provider_chain(mut self, chain: ProvideCredentialChain) -> Self { + self.credential_providers = Some(chain); + self + } + /// Set authority_host of this backend. /// /// - If authority_host is set, we will take user's input first. @@ -300,22 +323,27 @@ impl Builder for AzdlsBuilder { envs, }); - let mut credential = DefaultCredentialProvider::new(); + let mut credential_providers = + ProvideCredentialChain::new().push(DefaultCredentialProvider::new()); if let (Some(account_name), Some(account_key)) = (account_name.as_deref(), self.config.account_key.as_deref()) { - credential = credential.push_front(StaticCredentialProvider::new_shared_key( - account_name, - account_key, - )); + credential_providers = credential_providers.push_front( + StaticCredentialProvider::new_shared_key(account_name, account_key), + ); } if let Some(sas_token) = self.config.sas_token.as_deref() { - credential = credential.push_front(StaticCredentialProvider::new_sas_token(sas_token)); + credential_providers = + credential_providers.push_front(StaticCredentialProvider::new_sas_token(sas_token)); + } + + if let Some(customized_credential_chain) = self.credential_providers { + credential_providers = customized_credential_chain; } let sign_ctx = ctx; - let signer = Signer::new(sign_ctx.clone(), credential, RequestSigner::new()); + let signer = Signer::new(sign_ctx.clone(), credential_providers, RequestSigner::new()); let info = ServiceInfo::new(AZDLS_SCHEME, &root, filesystem); let capability = Capability { diff --git a/core/services/azdls/src/config.rs b/core/services/azdls/src/config.rs index b2b8051322b6..cfaffdaa1fad 100644 --- a/core/services/azdls/src/config.rs +++ b/core/services/azdls/src/config.rs @@ -124,7 +124,10 @@ impl opendal_core::Configurator for AzdlsConfig { #[allow(deprecated)] fn into_builder(self) -> Self::Builder { - AzdlsBuilder { config: self } + AzdlsBuilder { + config: self, + credential_providers: None, + } } } From 94e5504cc902cdcb0d855c773ccfa4bc714f8a25 Mon Sep 17 00:00:00 2001 From: Zakariya Stasa Date: Fri, 7 Aug 2026 15:52:15 +0100 Subject: [PATCH 2/2] refactor(services/azdls): expose only provider chains --- core/services/azdls/src/backend.rs | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/core/services/azdls/src/backend.rs b/core/services/azdls/src/backend.rs index ecb0c22b9fd7..b3d37253f379 100644 --- a/core/services/azdls/src/backend.rs +++ b/core/services/azdls/src/backend.rs @@ -27,7 +27,6 @@ use reqsign_azure_storage::StaticCredentialProvider; use reqsign_core::Context; use reqsign_core::Env as _; use reqsign_core::OsEnv; -use reqsign_core::ProvideCredential; use reqsign_core::ProvideCredentialChain; use reqsign_core::Signer; use reqsign_core::StaticEnv; @@ -191,19 +190,6 @@ impl AzdlsBuilder { self } - /// Add a custom credential provider. - /// - /// Custom providers replace the default Azure credential chain. Repeated - /// calls push the newest provider to the front of the custom chain. - pub fn credential_provider( - mut self, - provider: impl ProvideCredential + 'static, - ) -> Self { - let chain = self.credential_providers.unwrap_or_default(); - self.credential_providers = Some(chain.push_front(provider)); - self - } - /// Replace the credential providers with a custom chain. pub fn credential_provider_chain(mut self, chain: ProvideCredentialChain) -> Self { self.credential_providers = Some(chain);