mirror of
https://github.com/minio/minio.git
synced 2025-01-11 15:03:22 -05:00
For streaming signature do not save content-encoding in PutObject() (#3776)
Content-Encoding is set to "aws-chunked" which is an S3 specific API value which is no meaning for an object. This is how S3 behaves as well for a streaming signature uploaded object.
This commit is contained in:
parent
0a905e1a8a
commit
6b68c0170f
@ -63,7 +63,9 @@ func isRequestPostPolicySignatureV4(r *http.Request) bool {
|
|||||||
|
|
||||||
// Verify if the request has AWS Streaming Signature Version '4'. This is only valid for 'PUT' operation.
|
// Verify if the request has AWS Streaming Signature Version '4'. This is only valid for 'PUT' operation.
|
||||||
func isRequestSignStreamingV4(r *http.Request) bool {
|
func isRequestSignStreamingV4(r *http.Request) bool {
|
||||||
return r.Header.Get("x-amz-content-sha256") == streamingContentSHA256 && r.Method == httpPUT
|
return r.Header.Get("x-amz-content-sha256") == streamingContentSHA256 &&
|
||||||
|
r.Header.Get("content-encoding") == streamingContentEncoding &&
|
||||||
|
r.Method == httpPUT
|
||||||
}
|
}
|
||||||
|
|
||||||
// Authorization type.
|
// Authorization type.
|
||||||
|
@ -43,6 +43,7 @@ func TestGetRequestAuthType(t *testing.T) {
|
|||||||
Header: http.Header{
|
Header: http.Header{
|
||||||
"Authorization": []string{"AWS4-HMAC-SHA256 <cred_string>"},
|
"Authorization": []string{"AWS4-HMAC-SHA256 <cred_string>"},
|
||||||
"X-Amz-Content-Sha256": []string{streamingContentSHA256},
|
"X-Amz-Content-Sha256": []string{streamingContentSHA256},
|
||||||
|
"Content-Encoding": []string{streamingContentEncoding},
|
||||||
},
|
},
|
||||||
Method: "PUT",
|
Method: "PUT",
|
||||||
},
|
},
|
||||||
|
@ -421,6 +421,13 @@ func (api objectAPIHandlers) PutObjectHandler(w http.ResponseWriter, r *http.Req
|
|||||||
|
|
||||||
// Extract metadata to be saved from incoming HTTP header.
|
// Extract metadata to be saved from incoming HTTP header.
|
||||||
metadata := extractMetadataFromHeader(r.Header)
|
metadata := extractMetadataFromHeader(r.Header)
|
||||||
|
if rAuthType == authTypeStreamingSigned {
|
||||||
|
// Make sure to delete the content-encoding parameter
|
||||||
|
// for a streaming signature which is set to value
|
||||||
|
// "aws-chunked"
|
||||||
|
delete(metadata, "content-encoding")
|
||||||
|
}
|
||||||
|
|
||||||
// Make sure we hex encode md5sum here.
|
// Make sure we hex encode md5sum here.
|
||||||
metadata["md5Sum"] = hex.EncodeToString(md5Bytes)
|
metadata["md5Sum"] = hex.EncodeToString(md5Bytes)
|
||||||
|
|
||||||
|
@ -682,6 +682,13 @@ func testAPIPutObjectStreamSigV4Handler(obj ObjectLayer, instanceType, bucketNam
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
objInfo, err := obj.GetObjectInfo(testCase.bucketName, testCase.objectName)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Test %d: %s: Failed to fetch the copied object: <ERROR> %s", i+1, instanceType, err)
|
||||||
|
}
|
||||||
|
if objInfo.ContentEncoding == streamingContentEncoding {
|
||||||
|
t.Fatalf("Test %d: %s: ContentEncoding is set to \"aws-chunked\" which is unexpected", i+1, instanceType)
|
||||||
|
}
|
||||||
buffer := new(bytes.Buffer)
|
buffer := new(bytes.Buffer)
|
||||||
err = obj.GetObject(testCase.bucketName, testCase.objectName, 0, int64(testCase.dataLen), buffer)
|
err = obj.GetObject(testCase.bucketName, testCase.objectName, 0, int64(testCase.dataLen), buffer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -34,9 +34,10 @@ import (
|
|||||||
|
|
||||||
// Streaming AWS Signature Version '4' constants.
|
// Streaming AWS Signature Version '4' constants.
|
||||||
const (
|
const (
|
||||||
emptySHA256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
emptySHA256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||||
streamingContentSHA256 = "STREAMING-AWS4-HMAC-SHA256-PAYLOAD"
|
streamingContentSHA256 = "STREAMING-AWS4-HMAC-SHA256-PAYLOAD"
|
||||||
signV4ChunkedAlgorithm = "AWS4-HMAC-SHA256-PAYLOAD"
|
signV4ChunkedAlgorithm = "AWS4-HMAC-SHA256-PAYLOAD"
|
||||||
|
streamingContentEncoding = "aws-chunked"
|
||||||
)
|
)
|
||||||
|
|
||||||
// getChunkSignature - get chunk signature.
|
// getChunkSignature - get chunk signature.
|
||||||
|
Loading…
Reference in New Issue
Block a user