diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index fe58d017..7321efb6 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -8,13 +8,17 @@ on: jobs: publish: runs-on: ubuntu-latest + environment: crates.io + permissions: + id-token: write steps: - uses: actions/checkout@v6 - - uses: taiki-e/install-action@just - uses: dtolnay/rust-toolchain@nightly + - uses: rust-lang/crates-io-auth-action@v1 + id: auth - name: Publish all crates env: - CARGO_REGISTRY_TOKEN: ${{ secrets.CRATES_IO_API_TOKEN }} + CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }} run: | cargo publish -p s3s --dry-run cargo publish --workspace diff --git a/Cargo.lock b/Cargo.lock index ac9ccbf6..61383c71 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2932,7 +2932,7 @@ checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "s3s" -version = "0.14.0-dev" +version = "0.14.0-alpha.1" dependencies = [ "arc-swap", "arrayvec", @@ -2989,7 +2989,7 @@ dependencies = [ [[package]] name = "s3s-aws" -version = "0.14.0-dev" +version = "0.14.0-alpha.1" dependencies = [ "async-trait", "aws-sdk-s3", @@ -3022,7 +3022,7 @@ dependencies = [ [[package]] name = "s3s-e2e" -version = "0.14.0-dev" +version = "0.14.0-alpha.1" dependencies = [ "aws-config", "aws-credential-types", @@ -3041,7 +3041,7 @@ dependencies = [ [[package]] name = "s3s-fs" -version = "0.14.0-dev" +version = "0.14.0-alpha.1" dependencies = [ "anyhow", "async-trait", @@ -3081,7 +3081,7 @@ dependencies = [ [[package]] name = "s3s-model" -version = "0.14.0-dev" +version = "0.14.0-alpha.1" dependencies = [ "anyhow", "numeric_cast", @@ -3091,7 +3091,7 @@ dependencies = [ [[package]] name = "s3s-policy" -version = "0.14.0-dev" +version = "0.14.0-alpha.1" dependencies = [ "indexmap", "serde", @@ -3101,7 +3101,7 @@ dependencies = [ [[package]] name = "s3s-proxy" -version = "0.14.0-dev" +version = "0.14.0-alpha.1" dependencies = [ "aws-config", "aws-credential-types", @@ -3117,7 +3117,7 @@ dependencies = [ [[package]] name = "s3s-test" -version = "0.14.0-dev" +version = "0.14.0-alpha.1" dependencies = [ "backtrace", "clap", diff --git a/codegen/Cargo.toml b/codegen/Cargo.toml index f5f7c02a..0895b52c 100644 --- a/codegen/Cargo.toml +++ b/codegen/Cargo.toml @@ -19,5 +19,5 @@ regex = "1.12.3" serde.workspace = true serde_json = { workspace = true, features = ["preserve_order"] } serde_urlencoded = "0.7.1" -s3s-model = { version = "0.14.0-dev", path = "../crates/s3s-model" } +s3s-model = { version = "0.14.0-alpha.1", path = "../crates/s3s-model" } http.workspace = true diff --git a/crates/s3s-aws/Cargo.toml b/crates/s3s-aws/Cargo.toml index 98c38537..f4c8b2f0 100644 --- a/crates/s3s-aws/Cargo.toml +++ b/crates/s3s-aws/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "s3s-aws" -version = "0.14.0-dev" +version = "0.14.0-alpha.1" description = "S3 service adapter integrated with aws-sdk-s3" readme = "../../README.md" keywords = ["s3"] @@ -23,7 +23,7 @@ aws-smithy-runtime-api = { workspace = true, features = ["client", "http-1x"] } aws-smithy-types = { workspace = true, features = ["http-body-1-x"] } aws-smithy-types-convert = { workspace = true, features = ["convert-time"] } hyper.workspace = true -s3s = { version = "0.14.0-dev", path = "../s3s", default-features = false } +s3s = { version = "0.14.0-alpha.1", path = "../s3s", default-features = false } std-next.workspace = true sync_wrapper = "1.0.2" tracing.workspace = true diff --git a/crates/s3s-e2e/Cargo.toml b/crates/s3s-e2e/Cargo.toml index 71c21c7a..38b33434 100644 --- a/crates/s3s-e2e/Cargo.toml +++ b/crates/s3s-e2e/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "s3s-e2e" -version = "0.14.0-dev" +version = "0.14.0-alpha.1" description = "s3s test suite" readme = "../../README.md" keywords = ["s3"] @@ -14,7 +14,7 @@ rust-version.workspace = true workspace = true [dependencies] -s3s-test = { version = "0.14.0-dev", path = "../s3s-test" } +s3s-test = { version = "0.14.0-alpha.1", path = "../s3s-test" } tracing.workspace = true aws-config = { workspace = true, features = ["behavior-version-latest"] } aws-credential-types.workspace = true @@ -29,4 +29,4 @@ base64-simd.workspace = true reqwest.workspace = true [build-dependencies] -s3s-test = { version = "0.14.0-dev", path = "../s3s-test" } +s3s-test = { version = "0.14.0-alpha.1", path = "../s3s-test" } diff --git a/crates/s3s-fs/Cargo.toml b/crates/s3s-fs/Cargo.toml index a8ba8640..4ba745fd 100644 --- a/crates/s3s-fs/Cargo.toml +++ b/crates/s3s-fs/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "s3s-fs" -version = "0.14.0-dev" +version = "0.14.0-alpha.1" description = "An experimental S3 server based on file system" readme = "../../README.md" keywords = ["s3"] @@ -39,7 +39,7 @@ hyper-util = { workspace = true, optional = true, features = [ mime.workspace = true numeric_cast.workspace = true path-absolutize.workspace = true -s3s = { version = "0.14.0-dev", path = "../s3s" } +s3s = { version = "0.14.0-alpha.1", path = "../s3s" } serde.workspace = true serde_json.workspace = true std-next.workspace = true @@ -63,6 +63,6 @@ futures-util.workspace = true hyper = { workspace = true, features = ["http1", "http2"] } hyper-util = { workspace = true, features = ["server-auto", "server-graceful", "http1", "http2", "tokio"] } opendal = { workspace = true, default-features = false, features = ["services-s3", "executors-tokio", "reqwest-rustls-tls"] } -s3s-aws = { version = "0.14.0-dev", path = "../s3s-aws" } +s3s-aws = { version = "0.14.0-alpha.1", path = "../s3s-aws" } tokio = { workspace = true, features = ["full"] } tracing-subscriber.workspace = true diff --git a/crates/s3s-model/Cargo.toml b/crates/s3s-model/Cargo.toml index 5d513baa..1df56ebf 100644 --- a/crates/s3s-model/Cargo.toml +++ b/crates/s3s-model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "s3s-model" -version = "0.14.0-dev" +version = "0.14.0-alpha.1" description = "S3 Protocol Model" readme = "../../README.md" keywords = ["s3"] diff --git a/crates/s3s-policy/Cargo.toml b/crates/s3s-policy/Cargo.toml index 03eeb93b..bfb0cc2d 100644 --- a/crates/s3s-policy/Cargo.toml +++ b/crates/s3s-policy/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "s3s-policy" -version = "0.14.0-dev" +version = "0.14.0-alpha.1" description = "S3 Policy Language" readme = "../../README.md" keywords = ["s3"] diff --git a/crates/s3s-proxy/Cargo.toml b/crates/s3s-proxy/Cargo.toml index f9ba2e91..3f4d537d 100644 --- a/crates/s3s-proxy/Cargo.toml +++ b/crates/s3s-proxy/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "s3s-proxy" -version = "0.14.0-dev" +version = "0.14.0-alpha.1" description = "S3 Proxy" readme = "../../README.md" keywords = ["s3"] @@ -25,8 +25,8 @@ hyper-util = { workspace = true, features = [ "http2", "tokio", ] } -s3s = { version = "0.14.0-dev", path = "../s3s" } -s3s-aws = { version = "0.14.0-dev", path = "../s3s-aws" } +s3s = { version = "0.14.0-alpha.1", path = "../s3s" } +s3s-aws = { version = "0.14.0-alpha.1", path = "../s3s-aws" } tokio = { workspace = true, features = ["full"] } tracing.workspace = true tracing-subscriber.workspace = true diff --git a/crates/s3s-test/Cargo.toml b/crates/s3s-test/Cargo.toml index f4d86f88..b6a290c3 100644 --- a/crates/s3s-test/Cargo.toml +++ b/crates/s3s-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "s3s-test" -version = "0.14.0-dev" +version = "0.14.0-alpha.1" description = "s3s test suite" readme = "../../README.md" keywords = ["s3"] diff --git a/crates/s3s-wasm/Cargo.toml b/crates/s3s-wasm/Cargo.toml index cc047087..32294991 100644 --- a/crates/s3s-wasm/Cargo.toml +++ b/crates/s3s-wasm/Cargo.toml @@ -11,7 +11,7 @@ publish = false futures = { workspace = true, features = ["executor"] } getrandom = { version = "0.4.2", features = ["wasm_js"] } http.workspace = true -s3s = { version = "0.14.0-dev", path = "../s3s", default-features = false } +s3s = { version = "0.14.0-alpha.1", path = "../s3s", default-features = false } [lints] workspace = true diff --git a/crates/s3s/Cargo.toml b/crates/s3s/Cargo.toml index 546e9f61..95329cde 100644 --- a/crates/s3s/Cargo.toml +++ b/crates/s3s/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "s3s" -version = "0.14.0-dev" +version = "0.14.0-alpha.1" description = "S3 Service Adapter" readme = "../../README.md" keywords = ["s3"] diff --git a/crates/s3s/src/ops/signature.rs b/crates/s3s/src/ops/signature.rs index 4da4edda..93be7814 100644 --- a/crates/s3s/src/ops/signature.rs +++ b/crates/s3s/src/ops/signature.rs @@ -1,10 +1,11 @@ use crate::auth::S3Auth; use crate::auth::SecretKey; -use crate::config::S3ConfigProvider; +use crate::config::{S3Config, S3ConfigProvider}; use crate::error::*; use crate::http; use crate::http::{AwsChunkedStream, Body, Multipart, MultipartLimits}; use crate::http::{OrderedHeaders, OrderedQs}; +use crate::post_policy::PostPolicy; use crate::protocol::TrailingHeaders; use crate::sig_v2; use crate::sig_v2::{AuthorizationV2, PostSignatureV2, PresignedUrlV2}; @@ -24,6 +25,7 @@ use std::sync::Arc; use hyper::Method; use hyper::Uri; use mime::Mime; +use subtle::ConstantTimeEq; use tracing::debug; /// Maximum allowed size for STS request body (8KB should be enough for operations like `AssumeRole`) @@ -35,10 +37,7 @@ fn extract_amz_content_sha256<'a>(hs: &'_ OrderedHeaders<'a>) -> S3Result