Skip to content

Commit 6c65d7a

Browse files
committed
Merge branch 'main' into wip_opfs_3
2 parents d8eeacf + 4dabc46 commit 6c65d7a

File tree

12 files changed

+508
-92
lines changed

12 files changed

+508
-92
lines changed

.github/services/swift/swift/action.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ runs:
3434
token=$(echo "$response" | grep X-Auth-Token | head -n1 | awk '{print $2}' | tr -d '[:space:]')
3535
endpoint=$(echo "$response" | grep X-Storage-Url | head -n1 | awk '{print $2}' | tr -d '[:space:]')
3636
curl --location --request PUT "${endpoint}/testing" --header "X-Auth-Token: $token"
37+
# Configure TempURL key on the account for presigned URL tests
38+
curl -s -X POST -H "X-Auth-Token: $token" -H "X-Account-Meta-Temp-URL-Key: opendal-swift-test-key" "${endpoint}"
3739
echo "OPENDAL_SWIFT_TOKEN=${token}" >> $GITHUB_ENV
3840
echo "OPENDAL_SWIFT_ENDPOINT=${endpoint}" >> $GITHUB_ENV
3941
@@ -42,5 +44,6 @@ runs:
4244
run: |
4345
cat << EOF >> $GITHUB_ENV
4446
OPENDAL_SWIFT_CONTAINER=testing
47+
OPENDAL_SWIFT_TEMP_URL_KEY=opendal-swift-test-key
4548
OPENDAL_SWIFT_ROOT=/
4649
EOF

core/Cargo.lock

Lines changed: 25 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

core/services/obs/Cargo.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ http = { workspace = true }
3636
log = { workspace = true }
3737
opendal-core = { path = "../../core", version = "0.55.0", default-features = false }
3838
quick-xml = { workspace = true, features = ["serialize", "overlapped-lists"] }
39-
reqsign = { workspace = true, features = [
40-
"services-huaweicloud",
41-
"reqwest_request",
42-
] }
39+
reqsign-core = "2.0.2"
40+
reqsign-file-read-tokio = "2.0.2"
41+
reqsign-http-send-reqwest = "2.0.1"
42+
reqsign-huaweicloud-obs = "2.0.2"
4343
serde = { workspace = true, features = ["derive"] }
4444

4545
[dev-dependencies]

core/services/obs/src/backend.rs

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,17 @@ use http::Response;
2323
use http::StatusCode;
2424
use http::Uri;
2525
use 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

3038
use super::OBS_SCHEME;
3139
use super::config::ObsConfig;
@@ -36,8 +44,6 @@ use super::error::parse_error;
3644
use super::lister::ObsLister;
3745
use super::writer::ObsWriter;
3846
use 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

Comments
 (0)