@@ -23,9 +23,17 @@ use http::Response;
2323use http:: StatusCode ;
2424use http:: Uri ;
2525use log:: debug;
26- use reqsign:: HuaweicloudObsConfig ;
27- use reqsign:: HuaweicloudObsCredentialLoader ;
28- use reqsign:: HuaweicloudObsSigner ;
26+ use opendal_core:: raw:: * ;
27+ use opendal_core:: * ;
28+ use reqsign_core:: Context ;
29+ use reqsign_core:: OsEnv ;
30+ use reqsign_core:: ProvideCredentialChain ;
31+ use reqsign_core:: Signer ;
32+ use reqsign_file_read_tokio:: TokioFileRead ;
33+ use reqsign_http_send_reqwest:: ReqwestHttpSend ;
34+ use reqsign_huaweicloud_obs:: EnvCredentialProvider ;
35+ use reqsign_huaweicloud_obs:: RequestSigner ;
36+ use reqsign_huaweicloud_obs:: StaticCredentialProvider ;
2937
3038use super :: OBS_SCHEME ;
3139use super :: config:: ObsConfig ;
@@ -36,8 +44,6 @@ use super::error::parse_error;
3644use super :: lister:: ObsLister ;
3745use super :: writer:: ObsWriter ;
3846use super :: writer:: ObsWriters ;
39- use opendal_core:: raw:: * ;
40- use opendal_core:: * ;
4147
4248/// Huawei-Cloud Object Storage Service (OBS) support
4349#[ doc = include_str ! ( "docs.md" ) ]
@@ -169,28 +175,27 @@ impl Builder for ObsBuilder {
169175 } ;
170176 debug ! ( "backend use endpoint {}" , & endpoint) ;
171177
172- let mut cfg = HuaweicloudObsConfig :: default ( ) ;
173- // Load cfg from env first.
174- cfg = cfg. from_env ( ) ;
178+ let ctx = Context :: new ( )
179+ . with_file_read ( TokioFileRead )
180+ . with_http_send ( ReqwestHttpSend :: new ( GLOBAL_REQWEST_CLIENT . clone ( ) ) )
181+ . with_env ( OsEnv ) ;
175182
176- if let Some ( v) = self . config . access_key_id {
177- cfg. access_key_id = Some ( v) ;
178- }
183+ let mut provider = ProvideCredentialChain :: new ( ) . push ( EnvCredentialProvider :: new ( ) ) ;
179184
180- if let Some ( v) = self . config . secret_access_key {
181- cfg. secret_access_key = Some ( v) ;
185+ if let ( Some ( ak) , Some ( sk) ) = ( & self . config . access_key_id , & self . config . secret_access_key ) {
186+ let static_provider = StaticCredentialProvider :: new ( ak, sk) ;
187+ provider = provider. push_front ( static_provider) ;
182188 }
183189
184- let loader = HuaweicloudObsCredentialLoader :: new ( cfg) ;
185-
186190 // Set the bucket name in CanonicalizedResource.
187191 // 1. If the bucket is bound to a user domain name, use the user domain name as the bucket name,
188192 // for example, `/obs.ccc.com/object`. `obs.ccc.com` is the user domain name bound to the bucket.
189193 // 2. If you do not access OBS using a user domain name, this field is in the format of `/bucket/object`.
190194 //
191195 // Please refer to this doc for more details:
192196 // https://support.huaweicloud.com/intl/en-us/api-obs/obs_04_0010.html
193- let signer = HuaweicloudObsSigner :: new ( if is_obs_default { & bucket } else { & endpoint } ) ;
197+ let request_signer = RequestSigner :: new ( if is_obs_default { & bucket } else { & endpoint } ) ;
198+ let signer = Signer :: new ( ctx, provider, request_signer) ;
194199
195200 debug ! ( "backend build finished" ) ;
196201 Ok ( ObsBackend {
@@ -252,7 +257,6 @@ impl Builder for ObsBuilder {
252257 root,
253258 endpoint : format ! ( "{}://{}" , & scheme, & endpoint) ,
254259 signer,
255- loader,
256260 } ) ,
257261 } )
258262 }
@@ -390,8 +394,8 @@ impl Access for ObsBackend {
390394 "operation is not supported" ,
391395 ) ) ,
392396 } ;
393- let mut req = req?;
394- self . core . sign_query ( & mut req, args. expire ( ) ) . await ?;
397+ let req = req?;
398+ let req = self . core . sign_query ( req, args. expire ( ) ) . await ?;
395399
396400 // We don't need this request anymore, consume it directly.
397401 let ( parts, _) = req. into_parts ( ) ;
0 commit comments