Skip to content

Commit 66a3fb5

Browse files
authored
Merge pull request awslabs#26 from maros7/multi-value-query-string-parameters
Add support for multi value query string parameters
2 parents 5e02399 + 073c4df commit 66a3fb5

File tree

3 files changed

+35
-29
lines changed

3 files changed

+35
-29
lines changed

core/request.go

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -118,19 +118,6 @@ func (r *RequestAccessor) ProxyEventToHTTPRequest(req events.APIGatewayProxyRequ
118118
decodedBody = base64Body
119119
}
120120

121-
queryString := ""
122-
if len(req.QueryStringParameters) > 0 {
123-
queryString = "?"
124-
queryCnt := 0
125-
for q := range req.QueryStringParameters {
126-
if queryCnt > 0 {
127-
queryString += "&"
128-
}
129-
queryString += url.QueryEscape(q) + "=" + url.QueryEscape(req.QueryStringParameters[q])
130-
queryCnt++
131-
}
132-
}
133-
134121
path := req.Path
135122
if r.stripBasePath != "" && len(r.stripBasePath) > 1 {
136123
if strings.HasPrefix(path, r.stripBasePath) {
@@ -144,12 +131,24 @@ func (r *RequestAccessor) ProxyEventToHTTPRequest(req events.APIGatewayProxyRequ
144131
if customAddress, ok := os.LookupEnv(CustomHostVariable); ok {
145132
serverAddress = customAddress
146133
}
147-
148134
path = serverAddress + path
149135

136+
if len(req.MultiValueQueryStringParameters) > 0 {
137+
queryString := ""
138+
for q, l := range req.MultiValueQueryStringParameters {
139+
for _, v := range l {
140+
if queryString != "" {
141+
queryString += "&"
142+
}
143+
queryString += url.QueryEscape(q) + "=" + url.QueryEscape(v)
144+
}
145+
}
146+
path += "?" + queryString
147+
}
148+
150149
httpRequest, err := http.NewRequest(
151150
strings.ToUpper(req.HTTPMethod),
152-
path+queryString,
151+
path,
153152
bytes.NewReader(decodedBody),
154153
)
155154

core/request_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@ var _ = Describe("RequestAccessor tests", func() {
5858
})
5959

6060
qsRequest := getProxyRequest("/hello", "GET")
61-
qsRequest.QueryStringParameters = map[string]string{
62-
"hello": "1",
63-
"world": "2",
61+
qsRequest.MultiValueQueryStringParameters = map[string][]string{
62+
"hello": {"1"},
63+
"world": {"2", "3"},
6464
}
6565
It("Populates query string correctly", func() {
6666
httpReq, err := accessor.ProxyEventToHTTPRequest(qsRequest)
@@ -73,9 +73,10 @@ var _ = Describe("RequestAccessor tests", func() {
7373
Expect(query["hello"]).ToNot(BeNil())
7474
Expect(query["world"]).ToNot(BeNil())
7575
Expect(1).To(Equal(len(query["hello"])))
76-
Expect(1).To(Equal(len(query["world"])))
76+
Expect(2).To(Equal(len(query["world"])))
7777
Expect("1").To(Equal(query["hello"][0]))
7878
Expect("2").To(Equal(query["world"][0]))
79+
Expect("3").To(Equal(query["world"][1]))
7980
})
8081

8182
basePathRequest := getProxyRequest("/app1/orders", "GET")

vendor/vendor.json

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,34 @@
33
"ignore": "test",
44
"package": [
55
{
6-
"checksumSHA1": "6nfly5ibFQnlDU6IpeFaZZ2q1w0=",
6+
"checksumSHA1": "60T22joBzjxNa8yKzW0V4egimZI=",
77
"path": "github.com/aws/aws-lambda-go/events",
8-
"revision": "5fea2b254568d4043f23d27471ae265cd33d3530",
9-
"revisionTime": "2018-01-26T03:40:30Z"
8+
"revision": "dcf76fe64fb68bc66dd3522c904ccf5ff1b2710a",
9+
"revisionTime": "2019-01-29T19:04:57Z"
1010
},
1111
{
12-
"checksumSHA1": "uI0hFuHj5Amsq+6TzWcczBIdWZY=",
12+
"checksumSHA1": "trfV9u2UzDAypLfWLdFApLNWj0k=",
1313
"path": "github.com/aws/aws-lambda-go/lambda",
14-
"revision": "5fea2b254568d4043f23d27471ae265cd33d3530",
15-
"revisionTime": "2018-01-26T03:40:30Z"
14+
"revision": "dcf76fe64fb68bc66dd3522c904ccf5ff1b2710a",
15+
"revisionTime": "2019-01-29T19:04:57Z"
16+
},
17+
{
18+
"checksumSHA1": "R5cnUZPkb0MPZnK822yvu4qlTXQ=",
19+
"path": "github.com/aws/aws-lambda-go/lambda/handlertrace",
20+
"revision": "dcf76fe64fb68bc66dd3522c904ccf5ff1b2710a",
21+
"revisionTime": "2019-01-29T19:04:57Z"
1622
},
1723
{
1824
"checksumSHA1": "d4ehJWLS4YsqFG825pgwdvKDB6A=",
1925
"path": "github.com/aws/aws-lambda-go/lambda/messages",
20-
"revision": "5fea2b254568d4043f23d27471ae265cd33d3530",
21-
"revisionTime": "2018-01-26T03:40:30Z"
26+
"revision": "dcf76fe64fb68bc66dd3522c904ccf5ff1b2710a",
27+
"revisionTime": "2019-01-29T19:04:57Z"
2228
},
2329
{
2430
"checksumSHA1": "f9MhOwQHveaPVWO6trwfqHa+W0M=",
2531
"path": "github.com/aws/aws-lambda-go/lambdacontext",
26-
"revision": "5fea2b254568d4043f23d27471ae265cd33d3530",
27-
"revisionTime": "2018-01-26T03:40:30Z"
32+
"revision": "dcf76fe64fb68bc66dd3522c904ccf5ff1b2710a",
33+
"revisionTime": "2019-01-29T19:04:57Z"
2834
},
2935
{
3036
"checksumSHA1": "QeKwBtN2df+j+4stw3bQJ6yO4EY=",

0 commit comments

Comments
 (0)