diff options
author | Alex Auvolat <lx@deuxfleurs.fr> | 2025-02-14 18:02:49 +0100 |
---|---|---|
committer | Alex Auvolat <lx@deuxfleurs.fr> | 2025-02-14 18:05:07 +0100 |
commit | 165f9316e2c1414f27d04fd7c86bf628dc6a096d (patch) | |
tree | a27d906862af41774ffe81a56922222a70e3a776 /src/api/s3/multipart.rs | |
parent | a94adf804f79f8dcc0c704b4c061b8f79df7c88a (diff) | |
download | garage-165f9316e2c1414f27d04fd7c86bf628dc6a096d.tar.gz garage-165f9316e2c1414f27d04fd7c86bf628dc6a096d.zip |
s3api: return Location in CompleteMultipartUpload (fix #852)
NB. The location returned is not guaranteed to work in all cases.
This already fixes the parse issue in #852.
Diffstat (limited to 'src/api/s3/multipart.rs')
-rw-r--r-- | src/api/s3/multipart.rs | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/api/s3/multipart.rs b/src/api/s3/multipart.rs index fe39fc93..fa053df2 100644 --- a/src/api/s3/multipart.rs +++ b/src/api/s3/multipart.rs @@ -430,7 +430,16 @@ pub async fn handle_complete_multipart_upload( // Send response saying ok we're done let result = s3_xml::CompleteMultipartUploadResult { xmlns: (), - location: None, + // FIXME: the location returned is not always correct: + // - we always return https, but maybe some people do http + // - if root_domain is not specified, a full URL is not returned + location: garage + .config + .s3_api + .root_domain + .as_ref() + .map(|rd| s3_xml::Value(format!("https://{}.{}/{}", bucket_name, rd, key))) + .or(Some(s3_xml::Value(format!("/{}/{}", bucket_name, key)))), bucket: s3_xml::Value(bucket_name.to_string()), key: s3_xml::Value(key), etag: s3_xml::Value(format!("\"{}\"", etag)), |