diff --git a/src/helpers/SimApiStorage.cj b/src/helpers/SimApiStorage.cj index ca1293a..fb9c2a2 100644 --- a/src/helpers/SimApiStorage.cj +++ b/src/helpers/SimApiStorage.cj @@ -207,8 +207,8 @@ public class SimApiStorage { let dateStamp = amzDate[0..8] let payloadHash = toHexString(sha256Bytes(data)) let canonicalUri = "/${_bucket}/${uriEncode(object, false)}" - let canonicalHeaders = "host:${_host}\nx-amz-content-sha256:${payloadHash}\n" - let signedHeaders = "host;x-amz-content-sha256" + let canonicalHeaders = "host:${_host}\nx-amz-content-sha256:${payloadHash}\nx-amz-date:${amzDate}\n" + let signedHeaders = "host;x-amz-content-sha256;x-amz-date" let canonicalRequest = "PUT\n${canonicalUri}\n\n${canonicalHeaders}\n${signedHeaders}\n${payloadHash}" let stringToSign = "AWS4-HMAC-SHA256\n${amzDate}\n${dateStamp}/${_region}/s3/aws4_request\n" + "${toHexString(sha256Bytes(canonicalRequest.toArray()))}" @@ -218,9 +218,11 @@ public class SimApiStorage { try { let request = HttpRequestMessage(NetHttpMethod.Put, "${_endpoint}${canonicalUri}") request.headers.add("x-amz-content-sha256", payloadHash) + request.headers.add("x-amz-date", amzDate) request.headers.add("Authorization", authorization) - request.headers.add("Content-Type", contentType) - request.content = ByteArrayContent(data) + let content = ByteArrayContent(data) + content.headers.add("Content-Type", contentType) + request.content = content let response = client.send(request) try { SimApiError.errorWhenFalse(response.isSuccessStatusCode, code: response.statusCode, @@ -240,8 +242,8 @@ public class SimApiStorage { let dateStamp = amzDate[0..8] let payloadHash = toHexString(sha256Bytes(Array(0, repeat: 0))) let canonicalUri = "/${_bucket}" - let canonicalHeaders = "host:${_host}\nx-amz-content-sha256:${payloadHash}\n" - let signedHeaders = "host;x-amz-content-sha256" + let canonicalHeaders = "host:${_host}\nx-amz-content-sha256:${payloadHash}\nx-amz-date:${amzDate}\n" + let signedHeaders = "host;x-amz-content-sha256;x-amz-date" let canonicalRequest = "HEAD\n${canonicalUri}\n\n${canonicalHeaders}\n${signedHeaders}\n${payloadHash}" let stringToSign = "AWS4-HMAC-SHA256\n${amzDate}\n${dateStamp}/${_region}/s3/aws4_request\n" + "${toHexString(sha256Bytes(canonicalRequest.toArray()))}" @@ -251,6 +253,7 @@ public class SimApiStorage { try { let request = HttpRequestMessage(NetHttpMethod.Head, "${_endpoint}${canonicalUri}") request.headers.add("x-amz-content-sha256", payloadHash) + request.headers.add("x-amz-date", amzDate) request.headers.add("Authorization", authorization) let response = client.send(request) try { @@ -270,8 +273,8 @@ public class SimApiStorage { let dateStamp = amzDate[0..8] let payloadHash = toHexString(sha256Bytes(Array(0, repeat: 0))) let canonicalUri = "/${_bucket}" - let canonicalHeaders = "host:${_host}\nx-amz-content-sha256:${payloadHash}\n" - let signedHeaders = "host;x-amz-content-sha256" + let canonicalHeaders = "host:${_host}\nx-amz-content-sha256:${payloadHash}\nx-amz-date:${amzDate}\n" + let signedHeaders = "host;x-amz-content-sha256;x-amz-date" let canonicalRequest = "PUT\n${canonicalUri}\n\n${canonicalHeaders}\n${signedHeaders}\n${payloadHash}" let stringToSign = "AWS4-HMAC-SHA256\n${amzDate}\n${dateStamp}/${_region}/s3/aws4_request\n" + "${toHexString(sha256Bytes(canonicalRequest.toArray()))}" @@ -281,6 +284,7 @@ public class SimApiStorage { try { let request = HttpRequestMessage(NetHttpMethod.Put, "${_endpoint}${canonicalUri}") request.headers.add("x-amz-content-sha256", payloadHash) + request.headers.add("x-amz-date", amzDate) request.headers.add("Authorization", authorization) request.content = ByteArrayContent(Array(0, repeat: 0)) let response = client.send(request)