Apache OpenDAL reqsign — a Rust library for signing HTTP API requests across cloud providers (AWS, Azure, Google, Aliyun, Huawei, Tencent, Oracle, Volcengine).
The codebase is a Cargo workspace with three layers:
core (reqsign-core): traits (ProvideCredential, SignRequest, SigningCredential) and the runtime-agnostic Context / Signer types.context/*: pluggable runtime adapters (file-read-tokio, http-send-reqwest, command-execute-tokio).services/*: per-cloud signing implementations, each its own crate. AWS support is split into shared credentials/canonicalization (aws-core), SigV4 (aws-v4), and SigV4a (aws-v4a).reqsign: facade crate re-exporting everything behind feature flags; provides default_context() and per-service default_signer().Context: Context::new() wires up no-op stubs. Users (or default_context()) must explicitly plug in FileRead, HttpSend, Env, CommandExecute.MaybeSend futures: core traits use MaybeSend instead of async_trait so that the crate compiles for wasm32-unknown-unknown.Foo has a FooDyn counterpart and a blanket impl FooDyn for T: Foo, enabling Arc<dyn FooDyn> inside Signer.When working on an API area with an explicit design document, follow that document as the source of truth instead of inferring policy from the current implementation.
For security-sensitive changes, follow SECURITY.md and THREAT_MODEL.md as the source of truth for Reqsign's security boundary and its relationship to OpenDAL and other host applications.
All future refactors and API reviews around DefaultCredentialProvider must follow the authoritative design in docs/default-credential-provider-api.md.
Treat any future API change that reintroduces the following as a design regression unless explicitly approved: configure_*, disable_*(bool), fallback-based re-enabling of removed slots during build().
cargo fmt --all -- --check cargo clippy --workspace --all-targets --all-features -- -D warnings cargo test --no-fail-fast # unit tests cargo test --doc --all-features --workspace # doc tests
Integration tests live per-service under services/<name>/tests/ and are gated by REQSIGN_<SERVICE>_TEST* env vars. Secrets are loaded via 1Password Connect in CI. Some providers (IMDS, ECS, SSO, Process, Cognito) use Python mock servers checked into services/aws-v4/tests/mocks/.
reqsign-core and a subset of services (aws-v4, aws-v4a, azure, aliyun, tencent) must compile for wasm32-unknown-unknown. CI verifies this supported subset.
3.0.0).reqsign-http-send-reqwest has its own major (4.0.0).reqsign crate follows an independent scheme (0.20.0).v*.*.* tag; cargo publish --workspace publishes everything.Apache-2.0 (ASF). All source files must carry the Apache header, enforced by hawkeye via licenserc.toml.