Skip to content

Commit 304ce92

Browse files
authored
Merge pull request #453 from arthurkamwt/arthurkamwt/452
Add support for HTTP API cookie parameter
2 parents 94bbd4f + 26d049a commit 304ce92

File tree

3 files changed

+36
-3
lines changed

3 files changed

+36
-3
lines changed

aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java

+25-2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import java.time.ZonedDateTime;
3838
import java.time.format.DateTimeParseException;
3939
import java.util.*;
40+
import java.util.stream.Stream;
4041

4142
public class AwsHttpApiV2ProxyHttpServletRequest extends AwsHttpServletRequest {
4243
private static Logger log = LoggerFactory.getLogger(AwsHttpApiV2ProxyHttpServletRequest.class);
@@ -75,11 +76,33 @@ public String getAuthType() {
7576

7677
@Override
7778
public Cookie[] getCookies() {
79+
Cookie[] rhc;
7880
if (headers == null || !headers.containsKey(HttpHeaders.COOKIE)) {
79-
return new Cookie[0];
81+
rhc = new Cookie[0];
82+
} else {
83+
rhc = parseCookieHeaderValue(headers.getFirst(HttpHeaders.COOKIE));
8084
}
8185

82-
return parseCookieHeaderValue(headers.getFirst(HttpHeaders.COOKIE));
86+
Cookie[] rc;
87+
if (request.getCookies() == null) {
88+
rc = new Cookie[0];
89+
} else {
90+
rc = request.getCookies().stream()
91+
.map(c -> {
92+
int i = c.indexOf('=');
93+
if (i == -1) {
94+
return null;
95+
} else {
96+
String k = SecurityUtils.crlf(c.substring(0, i)).trim();
97+
String v = SecurityUtils.crlf(c.substring(i+1));
98+
return new Cookie(k, v);
99+
}
100+
})
101+
.filter(c -> c != null)
102+
.toArray(Cookie[]::new);
103+
}
104+
105+
return Stream.concat(Arrays.stream(rhc), Arrays.stream(rc)).toArray(Cookie[]::new);
83106
}
84107

85108
@Override

aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,11 @@ public HttpApiV2ProxyRequest toHttpApiV2Request() {
459459
}
460460
req.setHeaders(new TreeMap<>(String.CASE_INSENSITIVE_ORDER));
461461
if (request.getMultiValueHeaders() != null) {
462-
request.getMultiValueHeaders().forEach((key, value) -> req.getHeaders().put(key, value.get(0)));
462+
request.getMultiValueHeaders().forEach((key, value) -> {
463+
if (!HttpHeaders.COOKIE.equals(key)) {
464+
req.getHeaders().put(key, value.get(0));
465+
}
466+
});
463467
}
464468
if (request.getRequestContext() != null && request.getRequestContext().getIdentity() != null) {
465469
if (request.getRequestContext().getIdentity().getCaller() != null) {

aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java

+6
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public void baseRequest_read_populatesSuccessfully() {
2525
.referer("localhost")
2626
.queryString("param1", "value1")
2727
.header("custom", "value")
28+
.cookie("cookey", "cooval")
2829
.apiId("test").toHttpApiV2Request();
2930
AwsHttpApiV2HttpServletRequestReader reader = new AwsHttpApiV2HttpServletRequestReader();
3031
try {
@@ -33,6 +34,11 @@ public void baseRequest_read_populatesSuccessfully() {
3334
assertEquals("value1", servletRequest.getParameter("param1"));
3435
assertEquals("value", servletRequest.getHeader("CUSTOM"));
3536

37+
assertNotNull(servletRequest.getCookies());
38+
assertEquals(1, servletRequest.getCookies().length);
39+
assertEquals("cookey", servletRequest.getCookies()[0].getName());
40+
assertEquals("cooval", servletRequest.getCookies()[0].getValue());
41+
3642
assertNotNull(servletRequest.getAttribute(AwsHttpApiV2HttpServletRequestReader.HTTP_API_CONTEXT_PROPERTY));
3743
assertEquals("test",
3844
((HttpApiV2ProxyRequestContext)servletRequest.getAttribute(AwsHttpApiV2HttpServletRequestReader.HTTP_API_CONTEXT_PROPERTY)).getApiId());

0 commit comments

Comments
 (0)