aboutsummaryrefslogtreecommitdiff
path: root/src/api/s3/multipart.rs
diff options
context:
space:
mode:
authorAlex Auvolat <lx@deuxfleurs.fr>2025-02-17 18:47:06 +0100
committerAlex Auvolat <lx@deuxfleurs.fr>2025-02-17 18:47:06 +0100
commitc5df820e2c2b4bff5e239b8e99f07178b98b3f5a (patch)
tree26fa3dd297ee1c8bb55f5f7573a5c3396b030507 /src/api/s3/multipart.rs
parenta04d6cd5b8a3acffb8daeee00aed744fb1a78ea3 (diff)
downloadgarage-c5df820e2c2b4bff5e239b8e99f07178b98b3f5a.tar.gz
garage-c5df820e2c2b4bff5e239b8e99f07178b98b3f5a.zip
api: start refactor of signature to calculate checksums earlier
Diffstat (limited to 'src/api/s3/multipart.rs')
-rw-r--r--src/api/s3/multipart.rs14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/api/s3/multipart.rs b/src/api/s3/multipart.rs
index 7f8d6440..f381d670 100644
--- a/src/api/s3/multipart.rs
+++ b/src/api/s3/multipart.rs
@@ -17,7 +17,6 @@ use garage_model::s3::version_table::*;
use garage_api_common::helpers::*;
use garage_api_common::signature::checksum::*;
-use garage_api_common::signature::verify_signed_content;
use crate::api_server::{ReqBody, ResBody};
use crate::checksum::*;
@@ -114,7 +113,11 @@ pub async fn handle_put_part(
let key = key.to_string();
let (req_head, req_body) = req.into_parts();
- let stream = body_stream(req_body);
+
+ let (stream, checksums) = req_body.streaming_with_checksums(true);
+ let stream = stream.map_err(Error::from);
+ // TODO checksums
+
let mut chunker = StreamChunker::new(stream, garage.config.block_size);
let ((_, object_version, mut mpu), first_block) =
@@ -249,7 +252,6 @@ pub async fn handle_complete_multipart_upload(
req: Request<ReqBody>,
key: &str,
upload_id: &str,
- content_sha256: Option<Hash>,
) -> Result<Response<ResBody>, Error> {
let ReqCtx {
garage,
@@ -261,11 +263,7 @@ pub async fn handle_complete_multipart_upload(
let expected_checksum = request_checksum_value(&req_head.headers)?;
- let body = http_body_util::BodyExt::collect(req_body).await?.to_bytes();
-
- if let Some(content_sha256) = content_sha256 {
- verify_signed_content(content_sha256, &body[..])?;
- }
+ let body = req_body.collect().await?;
let body_xml = roxmltree::Document::parse(std::str::from_utf8(&body)?)?;
let body_list_of_parts = parse_complete_multipart_upload_body(&body_xml)