diff options
author | trinity-1686a <trinity@deuxfleurs.fr> | 2022-03-11 17:35:08 +0100 |
---|---|---|
committer | Gitea <gitea@fake.local> | 2022-03-23 10:22:36 +0100 |
commit | 1eb7fdb08fed59a9e78adc24df2d96fda746c560 (patch) | |
tree | 4dd507a8676011c0793938cb37408870e93193a7 /src/api | |
parent | e934934f149da1f4288359dcc3b6d9b9b284525e (diff) | |
download | garage-1eb7fdb08fed59a9e78adc24df2d96fda746c560.tar.gz garage-1eb7fdb08fed59a9e78adc24df2d96fda746c560.zip |
add test framework for arbitraty S3 requests
and implement some basic test with it
Diffstat (limited to 'src/api')
-rw-r--r-- | src/api/lib.rs | 3 | ||||
-rw-r--r-- | src/api/signature/payload.rs | 14 |
2 files changed, 8 insertions, 9 deletions
diff --git a/src/api/lib.rs b/src/api/lib.rs index f865325e..de60ec53 100644 --- a/src/api/lib.rs +++ b/src/api/lib.rs @@ -10,7 +10,8 @@ mod encoding; mod api_server; pub use api_server::run_api_server; -mod signature; +/// This mode is public only to help testing. Don't expect stability here +pub mod signature; pub mod helpers; mod s3_bucket; diff --git a/src/api/signature/payload.rs b/src/api/signature/payload.rs index 88b58922..88ec1f00 100644 --- a/src/api/signature/payload.rs +++ b/src/api/signature/payload.rs @@ -51,8 +51,7 @@ pub async fn check_payload_signature( let canonical_request = canonical_request( request.method(), - request.uri().path(), - &canonical_query_string(request.uri()), + request.uri(), &headers, &authorization.signed_headers, &authorization.content_sha256, @@ -215,7 +214,7 @@ fn parse_credential(cred: &str) -> Result<(String, String), Error> { )) } -fn string_to_sign(datetime: &DateTime<Utc>, scope_string: &str, canonical_req: &str) -> String { +pub fn string_to_sign(datetime: &DateTime<Utc>, scope_string: &str, canonical_req: &str) -> String { let mut hasher = Sha256::default(); hasher.update(canonical_req.as_bytes()); [ @@ -227,18 +226,17 @@ fn string_to_sign(datetime: &DateTime<Utc>, scope_string: &str, canonical_req: & .join("\n") } -fn canonical_request( +pub fn canonical_request( method: &Method, - url_path: &str, - canonical_query_string: &str, + uri: &hyper::Uri, headers: &HashMap<String, String>, signed_headers: &str, content_sha256: &str, ) -> String { [ method.as_str(), - url_path, - canonical_query_string, + &uri.path().to_string(), + &canonical_query_string(uri), &canonical_header_string(headers, signed_headers), "", signed_headers, |