Skip to content

Commit 15faf8c

Browse files
authored
Merge pull request awslabs#99 from jccguimaraes/apigwv2-headers-fix
Properly set apigwv2 response headers
2 parents cc6bc84 + eb62254 commit 15faf8c

File tree

2 files changed

+25
-25
lines changed

2 files changed

+25
-25
lines changed

core/responsev2.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"encoding/base64"
88
"errors"
99
"net/http"
10+
"strings"
1011
"unicode/utf8"
1112

1213
"github.com/aws/aws-lambda-go/events"
@@ -100,10 +101,16 @@ func (r *ProxyResponseWriterV2) GetProxyResponse() (events.APIGatewayV2HTTPRespo
100101
isBase64 = true
101102
}
102103

104+
headers := make(map[string]string)
105+
106+
for headerKey, headerValue := range http.Header(r.headers) {
107+
headers[headerKey] = strings.Join(headerValue, ",")
108+
}
109+
103110
return events.APIGatewayV2HTTPResponse{
104-
StatusCode: r.status,
105-
MultiValueHeaders: http.Header(r.headers),
106-
Body: output,
107-
IsBase64Encoded: isBase64,
111+
StatusCode: r.status,
112+
Headers: headers,
113+
Body: output,
114+
IsBase64Encoded: isBase64,
108115
}, nil
109116
}

core/responsev2_test.go

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ var _ = Describe("ResponseWriterV2 tests", func() {
6262
Expect("application/json").To(Equal(resp.Header().Get("Content-Type")))
6363
proxyResp, err := resp.GetProxyResponse()
6464
Expect(err).To(BeNil())
65-
Expect(1).To(Equal(len(proxyResp.MultiValueHeaders)))
66-
Expect("application/json").To(Equal(proxyResp.MultiValueHeaders["Content-Type"][0]))
65+
Expect(1).To(Equal(len(proxyResp.Headers)))
66+
Expect("application/json").To(Equal(proxyResp.Headers["Content-Type"]))
6767
Expect(xmlBodyContent).To(Equal(proxyResp.Body))
6868
})
6969

@@ -75,8 +75,8 @@ var _ = Describe("ResponseWriterV2 tests", func() {
7575
Expect(true).To(Equal(strings.HasPrefix(resp.Header().Get("Content-Type"), "text/xml;")))
7676
proxyResp, err := resp.GetProxyResponse()
7777
Expect(err).To(BeNil())
78-
Expect(1).To(Equal(len(proxyResp.MultiValueHeaders)))
79-
Expect(true).To(Equal(strings.HasPrefix(proxyResp.MultiValueHeaders["Content-Type"][0], "text/xml;")))
78+
Expect(1).To(Equal(len(proxyResp.Headers)))
79+
Expect(true).To(Equal(strings.HasPrefix(proxyResp.Headers["Content-Type"], "text/xml;")))
8080
Expect(xmlBodyContent).To(Equal(proxyResp.Body))
8181
})
8282

@@ -88,8 +88,8 @@ var _ = Describe("ResponseWriterV2 tests", func() {
8888
Expect(true).To(Equal(strings.HasPrefix(resp.Header().Get("Content-Type"), "text/html;")))
8989
proxyResp, err := resp.GetProxyResponse()
9090
Expect(err).To(BeNil())
91-
Expect(1).To(Equal(len(proxyResp.MultiValueHeaders)))
92-
Expect(true).To(Equal(strings.HasPrefix(proxyResp.MultiValueHeaders["Content-Type"][0], "text/html;")))
91+
Expect(1).To(Equal(len(proxyResp.Headers)))
92+
Expect(true).To(Equal(strings.HasPrefix(proxyResp.Headers["Content-Type"], "text/html;")))
9393
Expect(htmlBodyContent).To(Equal(proxyResp.Body))
9494
})
9595
})
@@ -114,8 +114,8 @@ var _ = Describe("ResponseWriterV2 tests", func() {
114114

115115
Expect("hello").To(Equal(proxyResponse.Body))
116116
Expect(http.StatusOK).To(Equal(proxyResponse.StatusCode))
117-
Expect(1).To(Equal(len(proxyResponse.MultiValueHeaders)))
118-
Expect(true).To(Equal(strings.HasPrefix(proxyResponse.MultiValueHeaders["Content-Type"][0], "text/plain")))
117+
Expect(1).To(Equal(len(proxyResponse.Headers)))
118+
Expect(true).To(Equal(strings.HasPrefix(proxyResponse.Headers["Content-Type"], "text/plain")))
119119
Expect(proxyResponse.IsBase64Encoded).To(BeFalse())
120120
})
121121

@@ -138,8 +138,8 @@ var _ = Describe("ResponseWriterV2 tests", func() {
138138
Expect(base64.StdEncoding.EncodedLen(len(binaryBody))).To(Equal(len(proxyResponse.Body)))
139139

140140
Expect(base64.StdEncoding.EncodeToString(binaryBody)).To(Equal(proxyResponse.Body))
141-
Expect(1).To(Equal(len(proxyResponse.MultiValueHeaders)))
142-
Expect("application/octet-stream").To(Equal(proxyResponse.MultiValueHeaders["Content-Type"][0]))
141+
Expect(1).To(Equal(len(proxyResponse.Headers)))
142+
Expect("application/octet-stream").To(Equal(proxyResponse.Headers["Content-Type"]))
143143
Expect(http.StatusAccepted).To(Equal(proxyResponse.StatusCode))
144144
})
145145
})
@@ -153,10 +153,8 @@ var _ = Describe("ResponseWriterV2 tests", func() {
153153
proxyResponse, err := response.GetProxyResponse()
154154
Expect(err).To(BeNil())
155155

156-
// Headers are not also written to `Headers` field
157-
Expect(0).To(Equal(len(proxyResponse.Headers)))
158-
Expect(1).To(Equal(len(proxyResponse.MultiValueHeaders["Content-Type"])))
159-
Expect("application/json").To(Equal(proxyResponse.MultiValueHeaders["Content-Type"][0]))
156+
Expect(1).To(Equal(len(proxyResponse.Headers)))
157+
Expect("application/json").To(Equal(proxyResponse.Headers["Content-Type"]))
160158
})
161159

162160
It("Writes multi-value headers correctly", func() {
@@ -167,13 +165,8 @@ var _ = Describe("ResponseWriterV2 tests", func() {
167165
proxyResponse, err := response.GetProxyResponse()
168166
Expect(err).To(BeNil())
169167

170-
// Headers are not also written to `Headers` field
171-
Expect(0).To(Equal(len(proxyResponse.Headers)))
172-
173-
// There are two headers here because Content-Type is always written implicitly
174-
Expect(2).To(Equal(len(proxyResponse.MultiValueHeaders["Set-Cookie"])))
175-
Expect("csrftoken=foobar").To(Equal(proxyResponse.MultiValueHeaders["Set-Cookie"][0]))
176-
Expect("session_id=barfoo").To(Equal(proxyResponse.MultiValueHeaders["Set-Cookie"][1]))
168+
Expect(2).To(Equal(len(proxyResponse.Headers)))
169+
Expect("csrftoken=foobar,session_id=barfoo").To(Equal(proxyResponse.Headers["Set-Cookie"]))
177170
})
178171
})
179172

0 commit comments

Comments
 (0)