Skip to content

Commit 851ddcb

Browse files
committed
Adding http headers that start with x-amz-meta- to authorization digest.
1 parent e15fdee commit 851ddcb

File tree

2 files changed

+29
-5
lines changed

2 files changed

+29
-5
lines changed

ds3/networking/httpRequestBuilder.go

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"net/url"
77
"strings"
88
"spectra/ds3_go_sdk/ds3/models"
9+
"sort"
910
)
1011

1112
const AmazonMetadataPrefix = "x-amz-meta-"
@@ -134,14 +135,33 @@ func (builder *HttpRequestBuilder) buildUrl(conn *ConnectionInfo) string {
134135
}
135136

136137
func (builder *HttpRequestBuilder) maybeAddAmazonCanonicalHeaders() {
137-
var stringBuilder strings.Builder
138+
headerKeys := make([]string, 0)
138139

139140
for key, value := range *builder.headers {
140141
lowerCaseKey := strings.ToLower(key)
141-
if strings.HasPrefix(lowerCaseKey, AmazonMetadataPrefix) && len(value) > 0 {
142+
if strings.HasPrefix(lowerCaseKey, models.AMZ_META_HEADER) && len(value) > 0 {
143+
headerKeys = append(headerKeys, key)
144+
}
145+
}
146+
147+
if len(headerKeys) == 0 {
148+
return
149+
}
150+
151+
sort.Strings(headerKeys)
152+
153+
var stringBuilder strings.Builder
154+
155+
var httpHeaders map[string][]string = *builder.headers
156+
157+
for _, headerKey := range headerKeys {
158+
lowerCaseKey := strings.ToLower(headerKey)
159+
headerValue := httpHeaders[headerKey]
160+
161+
if len(headerValue) > 0 {
142162
stringBuilder.WriteString(lowerCaseKey)
143163
stringBuilder.WriteString(":")
144-
stringBuilder.WriteString(strings.Join(value, ","))
164+
stringBuilder.WriteString(strings.Join(headerValue, ","))
145165
stringBuilder.WriteString("\n")
146166
}
147167
}

ds3/networking/networking_test.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,19 +39,23 @@ func TestBuildingAuthorizationDigestWithMetadata(t *testing.T) {
3939

4040
const gracie = "Gracie"
4141
const eskimo = "Eskimo"
42+
const shasta = "Shasta"
43+
const samoyed = "Samoyed"
4244

4345
connectionInfo := ConnectionInfo{
4446
Endpoint: endpointUrl,
4547
Credentials: &Credentials{AccessId: gracie, Key: eskimo},
4648
Proxy: nil}
4749

48-
httpRequestBuilder.WithHeader(AmazonMetadataPrefix + gracie, eskimo).
50+
httpRequestBuilder.
51+
WithHeader(AmazonMetadataPrefix + shasta, samoyed).
52+
WithHeader(AmazonMetadataPrefix + gracie, eskimo).
4953
Build(&connectionInfo)
5054

5155
amazonHeaders := httpRequestBuilder.signatureFields.CanonicalizedAmzHeaders
5256

5357
ds3Testing.AssertBool(t, "expected amazonHeader to have something in it", true, len(amazonHeaders) > 0)
5458

55-
expected := AmazonMetadataPrefix + strings.ToLower(gracie) + ":" + eskimo + "\n"
59+
expected := AmazonMetadataPrefix + strings.ToLower(gracie) + ":" + eskimo + "\n" + AmazonMetadataPrefix + strings.ToLower(shasta) + ":" + samoyed + "\n"
5660
ds3Testing.AssertBool(t, "amazonHeader string isn't what we expected", true, strings.Compare(amazonHeaders, expected) == 0)
5761
}

0 commit comments

Comments
 (0)