Skip to content

Commit 9acdb20

Browse files
authored
Merge pull request awslabs#62 from Bryanide/master
Handling multi-value request headers
2 parents c08fff8 + 0f22bb2 commit 9acdb20

File tree

2 files changed

+54
-4
lines changed

2 files changed

+54
-4
lines changed

core/request.go

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -190,11 +190,22 @@ func (r *RequestAccessor) EventToRequest(req events.APIGatewayProxyRequest) (*ht
190190
log.Println(err)
191191
return nil, err
192192
}
193-
for h := range req.Headers {
194-
httpRequest.Header.Add(h, req.Headers[h])
193+
194+
if req.MultiValueHeaders != nil {
195+
for k, values := range req.MultiValueHeaders {
196+
for _, value := range values {
197+
httpRequest.Header.Add(k, value)
198+
}
199+
}
200+
} else {
201+
for h := range req.Headers {
202+
httpRequest.Header.Add(h, req.Headers[h])
203+
}
195204
}
196-
httpRequest.RequestURI = httpRequest.URL.RequestURI()
197-
return httpRequest, nil
205+
206+
httpRequest.RequestURI = httpRequest.URL.RequestURI()
207+
208+
return httpRequest, nil
198209
}
199210

200211
func addToHeader(req *http.Request, apiGwRequest events.APIGatewayProxyRequest) (*http.Request, error) {

core/request_test.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"io/ioutil"
77
"math/rand"
88
"os"
9+
"strings"
910

1011
"github.com/aws/aws-lambda-go/events"
1112
"github.com/aws/aws-lambda-go/lambdacontext"
@@ -117,6 +118,44 @@ var _ = Describe("RequestAccessor tests", func() {
117118
Expect("2").To(Equal(query["world"][0]))
118119
})
119120

121+
mvhRequest := getProxyRequest("/hello", "GET")
122+
mvhRequest.MultiValueHeaders = map[string][]string{
123+
"hello": {"1"},
124+
"world": {"2", "3"},
125+
}
126+
It("Populates multiple value headers correctly", func() {
127+
httpReq, err := accessor.EventToRequestWithContext(context.Background(), mvhRequest)
128+
Expect(err).To(BeNil())
129+
Expect("/hello").To(Equal(httpReq.URL.Path))
130+
Expect("GET").To(Equal(httpReq.Method))
131+
132+
headers := httpReq.Header
133+
Expect(2).To(Equal(len(headers)))
134+
135+
for k, value := range headers {
136+
Expect(value).To(Equal(mvhRequest.MultiValueHeaders[strings.ToLower(k)]))
137+
}
138+
})
139+
140+
svhRequest := getProxyRequest("/hello", "GET")
141+
svhRequest.Headers = map[string]string{
142+
"hello": "1",
143+
"world": "2",
144+
}
145+
It("Populates single value headers correctly", func() {
146+
httpReq, err := accessor.EventToRequestWithContext(context.Background(), svhRequest)
147+
Expect(err).To(BeNil())
148+
Expect("/hello").To(Equal(httpReq.URL.Path))
149+
Expect("GET").To(Equal(httpReq.Method))
150+
151+
headers := httpReq.Header
152+
Expect(2).To(Equal(len(headers)))
153+
154+
for k, value := range headers {
155+
Expect(value[0]).To(Equal(svhRequest.Headers[strings.ToLower(k)]))
156+
}
157+
})
158+
120159
basePathRequest := getProxyRequest("/app1/orders", "GET")
121160

122161
It("Stips the base path correct", func() {

0 commit comments

Comments
 (0)