|
6 | 6 | "net/url" |
7 | 7 | "strings" |
8 | 8 | "spectra/ds3_go_sdk/ds3/models" |
| 9 | + "sort" |
9 | 10 | ) |
10 | 11 |
|
11 | 12 | const AmazonMetadataPrefix = "x-amz-meta-" |
@@ -134,14 +135,33 @@ func (builder *HttpRequestBuilder) buildUrl(conn *ConnectionInfo) string { |
134 | 135 | } |
135 | 136 |
|
136 | 137 | func (builder *HttpRequestBuilder) maybeAddAmazonCanonicalHeaders() { |
137 | | - var stringBuilder strings.Builder |
| 138 | + headerKeys := make([]string, 0) |
138 | 139 |
|
139 | 140 | for key, value := range *builder.headers { |
140 | 141 | 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 { |
142 | 162 | stringBuilder.WriteString(lowerCaseKey) |
143 | 163 | stringBuilder.WriteString(":") |
144 | | - stringBuilder.WriteString(strings.Join(value, ",")) |
| 164 | + stringBuilder.WriteString(strings.Join(headerValue, ",")) |
145 | 165 | stringBuilder.WriteString("\n") |
146 | 166 | } |
147 | 167 | } |
|
0 commit comments