Skip to content

#220 Fix case-sensitivity of HTTP headers in models #298

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
46ec9fa
fix issue #220, using treemap
jeromevdl Mar 27, 2021
8e5bbb9
use case insensitive headers in all events
jeromevdl Mar 27, 2021
28333c0
refactor + headers in websocket event
jeromevdl Mar 29, 2021
f3e80cc
corrections after real test
jeromevdl Mar 29, 2021
d997cfe
remove sysout
jeromevdl Apr 7, 2021
72a0ecf
revert http headers
jeromevdl May 29, 2021
6e1a2b0
Merge branch 'master' into fix_headers_insensitive
jeromevdl May 29, 2021
4569e72
Merge branch 'master' into fix_headers_insensitive
parawanderer Dec 22, 2021
fdfaf16
#220 Fix header case sensitivity (updated #234)
parawanderer Dec 22, 2021
06d1ebf
Fix os compatibility test local builds on arm64 hosts (#338)
zsombor-balogh May 6, 2022
445f5c3
Add support for tumbling windows events serialization (#342)
zsombor-balogh May 30, 2022
65169c1
Update readme (#347)
msailes Jun 7, 2022
bca2340
Optimize jar discovery (#350)
richarddd Jun 17, 2022
2d378d4
Bump gson from 2.8.5 to 2.8.9 in /aws-lambda-java-serialization (#341)
dependabot[bot] Jun 21, 2022
0979b62
Bump jackson-databind in /aws-lambda-java-serialization (#323)
dependabot[bot] Jun 21, 2022
bdd625a
Bump jackson-databind in /aws-lambda-java-events (#322)
dependabot[bot] Jun 21, 2022
e865e54
Update Curl to 7.84.0 (#354)
SukanyaHanumanthu Jul 11, 2022
3677d0c
removed unnecessary usage of `public` on interface methods (#172)
jccarrillo Aug 10, 2022
4ac4272
Merge branch 'master' into fix_headers_insensitive
parawanderer Aug 10, 2022
acc62d1
implement PR feedback changes
parawanderer Aug 10, 2022
897c757
implement PR feedback changes
parawanderer Aug 10, 2022
f0de734
Merge branch "events-v4-serialization-v2"; update usages of HttpHeaders
parawanderer Aug 10, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.amazonaws.services.lambda.runtime.events;

import com.amazonaws.services.lambda.runtime.events.models.HttpHeaders;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
Expand All @@ -26,7 +27,7 @@ public class APIGatewayCustomAuthorizerEvent {
private String resource;
private String path;
private String httpMethod;
private Map<String, String> headers;
private HttpHeaders<String> headers;
private Map<String, String> queryStringParameters;
private Map<String, String> pathParameters;
private Map<String, String> stageVariables;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package com.amazonaws.services.lambda.runtime.events;

import com.amazonaws.services.lambda.runtime.events.models.HttpHeaders;

import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.*;

/**
* Class that represents an APIGatewayProxyRequestEvent
Expand All @@ -19,9 +20,9 @@ public class APIGatewayProxyRequestEvent implements Serializable, Cloneable {

private String httpMethod;

private Map<String, String> headers;
private HttpHeaders<String> headers;

private Map<String, List<String>> multiValueHeaders;
private HttpHeaders<List<String>> multiValueHeaders;

private Map<String, String> queryStringParameters;

Expand Down Expand Up @@ -69,7 +70,8 @@ public static class ProxyRequestContext implements Serializable, Cloneable {
/**
* default constructor
*/
public ProxyRequestContext() {}
public ProxyRequestContext() {
}

/**
* @return account id that owns Lambda function
Expand Down Expand Up @@ -103,7 +105,7 @@ public void setAuthorizer(final Map<String, Object> authorizer) {
}

/**
* @return API Gateway stage name
* @return API Gateway stage name
*/
public String getStage() {
return stage;
Expand Down Expand Up @@ -288,14 +290,14 @@ public ProxyRequestContext withPath(String path) {

/**
* @return The name of the operation being performed
* */
*/
public String getOperationName() {
return operationName;
}

/**
* @param operationName The name of the operation being performed
* */
*/
public void setOperationName(String operationName) {
this.operationName = operationName;
}
Expand All @@ -309,7 +311,6 @@ public ProxyRequestContext withOperationName(String operationName) {
* Returns a string representation of this object; useful for testing and debugging.
*
* @return A string representation of this object.
*
* @see Object#toString()
*/
@Override
Expand Down Expand Up @@ -414,7 +415,7 @@ public int hashCode() {
hashCode = prime * hashCode + ((getApiId() == null) ? 0 : getApiId().hashCode());
hashCode = prime * hashCode + ((getPath() == null) ? 0 : getPath().hashCode());
hashCode = prime * hashCode + ((getAuthorizer() == null) ? 0 : getAuthorizer().hashCode());
hashCode = prime * hashCode + ((getOperationName() == null) ? 0: getOperationName().hashCode());
hashCode = prime * hashCode + ((getOperationName() == null) ? 0 : getOperationName().hashCode());
return hashCode;
}

Expand Down Expand Up @@ -461,7 +462,8 @@ public static class RequestIdentity implements Serializable, Cloneable {
/**
* default constructor
*/
public RequestIdentity() {}
public RequestIdentity() {
}

/**
* @return The Cognito identity pool id.
Expand Down Expand Up @@ -766,7 +768,6 @@ public RequestIdentity withAccessKey(String accessKey) {
* Returns a string representation of this object; useful for testing and debugging.
*
* @return A string representation of this object.
*
* @see Object#toString()
*/
@Override
Expand Down Expand Up @@ -903,7 +904,8 @@ public RequestIdentity clone() {
/**
* default constructor
*/
public APIGatewayProxyRequestEvent() {}
public APIGatewayProxyRequestEvent() {
}

/**
* @return The payload format version
Expand Down Expand Up @@ -1008,7 +1010,7 @@ public Map<String, String> getHeaders() {
* @param headers The headers sent with the request
*/
public void setHeaders(Map<String, String> headers) {
this.headers = headers;
this.headers = HttpHeadersUtil.mergeOrReplace(headers);
}

/**
Expand All @@ -1031,7 +1033,7 @@ public Map<String, List<String>> getMultiValueHeaders() {
* @param multiValueHeaders The multi value headers sent with the request
*/
public void setMultiValueHeaders(Map<String, List<String>> multiValueHeaders) {
this.multiValueHeaders = multiValueHeaders;
this.multiValueHeaders = HttpHeadersUtil.mergeOrReplace(multiValueHeaders);
}

/**
Expand Down Expand Up @@ -1224,7 +1226,6 @@ public APIGatewayProxyRequestEvent withIsBase64Encoded(Boolean isBase64Encoded)
* Returns a string representation of this object; useful for testing and debugging.
*
* @return A string representation of this object.
*
* @see Object#toString()
*/
@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.amazonaws.services.lambda.runtime.events;

import com.amazonaws.services.lambda.runtime.events.models.HttpHeaders;

import java.io.Serializable;
import java.util.List;
import java.util.Map;
Expand All @@ -13,9 +15,9 @@ public class APIGatewayProxyResponseEvent implements Serializable, Cloneable {

private Integer statusCode;

private Map<String, String> headers;
private HttpHeaders<String> headers;

private Map<String, List<String>> multiValueHeaders;
private HttpHeaders<List<String>> multiValueHeaders;

private String body;

Expand Down Expand Up @@ -60,7 +62,7 @@ public Map<String, String> getHeaders() {
* @param headers The Http headers return in the response
*/
public void setHeaders(Map<String, String> headers) {
this.headers = headers;
this.headers = HttpHeadersUtil.mergeOrReplace(headers);
}

/**
Expand All @@ -83,7 +85,7 @@ public Map<String, List<String>> getMultiValueHeaders() {
* @param multiValueHeaders the Http multi value headers to return in the response
*/
public void setMultiValueHeaders(Map<String, List<String>> multiValueHeaders) {
this.multiValueHeaders = multiValueHeaders;
this.multiValueHeaders = HttpHeadersUtil.mergeOrReplace(multiValueHeaders);
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.amazonaws.services.lambda.runtime.events;

import com.amazonaws.services.lambda.runtime.events.models.HttpHeaders;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
Expand Down Expand Up @@ -31,7 +32,7 @@ public class APIGatewayV2CustomAuthorizerEvent {
private String rawPath;
private String rawQueryString;
private List<String> cookies;
private Map<String, String> headers;
private HttpHeaders<String> headers;
private Map<String, String> queryStringParameters;
private RequestContext requestContext;
private Map<String, String> pathParameters;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

package com.amazonaws.services.lambda.runtime.events;

import com.amazonaws.services.lambda.runtime.events.models.HttpHeaders;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
Expand All @@ -34,14 +35,18 @@ public class APIGatewayV2HTTPEvent {
private String rawPath;
private String rawQueryString;
private List<String> cookies;
private Map<String, String> headers;
private HttpHeaders<String> headers;
private Map<String, String> queryStringParameters;
private Map<String, String> pathParameters;
private Map<String, String> stageVariables;
private String body;
private boolean isBase64Encoded;
private RequestContext requestContext;

public void setHeaders(Map<String, String> headers) {
this.headers = HttpHeadersUtil.mergeOrReplace(headers);
}

@AllArgsConstructor
@Builder(setterPrefix = "with")
@Data
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

package com.amazonaws.services.lambda.runtime.events;

import com.amazonaws.services.lambda.runtime.events.models.HttpHeaders;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
Expand All @@ -27,9 +28,28 @@
@NoArgsConstructor
public class APIGatewayV2HTTPResponse {
private int statusCode;
private Map<String, String> headers;
private Map<String, List<String>> multiValueHeaders;
private HttpHeaders<String> headers;
private HttpHeaders<List<String>> multiValueHeaders;
private List<String> cookies;
private String body;
private boolean isBase64Encoded;

public static APIGatewayV2HTTPResponseBuilder builder() {
return new APIGatewayV2HTTPResponseBuilder();
}

public static class APIGatewayV2HTTPResponseBuilder {
private HttpHeaders<String> headers;
private HttpHeaders<List<String>> multiValueHeaders;

public APIGatewayV2HTTPResponseBuilder withHeaders(Map<String, String> headers) {
this.headers = HttpHeadersUtil.mergeOrReplace(headers);
return this;
}

public APIGatewayV2HTTPResponseBuilder withMultiValueHeaders(Map<String, List<String>> multiValueHeaders) {
this.multiValueHeaders = HttpHeadersUtil.mergeOrReplace(multiValueHeaders);
return this;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.amazonaws.services.lambda.runtime.events;

import com.amazonaws.services.lambda.runtime.events.models.HttpHeaders;

import java.io.Serializable;
import java.util.Map;

Expand All @@ -12,8 +14,8 @@ public class APIGatewayV2WebSocketResponse implements Serializable, Cloneable {

private boolean isBase64Encoded = false;
private int statusCode;
private Map<String, String> headers;
private Map<String, String[]> multiValueHeaders;
private HttpHeaders<String> headers;
private HttpHeaders<String[]> multiValueHeaders;
private String body;

public boolean isIsBase64Encoded() {
Expand All @@ -37,15 +39,15 @@ public Map<String, String> getHeaders() {
}

public void setHeaders(Map<String, String> headers) {
this.headers = headers;
this.headers = HttpHeadersUtil.mergeOrReplace(headers);
}

public Map<String, String[]> getMultiValueHeaders() {
return multiValueHeaders;
}

public void setMultiValueHeaders(Map<String, String[]> multiValueHeaders) {
this.multiValueHeaders = multiValueHeaders;
this.multiValueHeaders = HttpHeadersUtil.mergeOrReplace(multiValueHeaders);
}

public String getBody() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.amazonaws.services.lambda.runtime.events;

import com.amazonaws.services.lambda.runtime.events.models.HttpHeaders;
import lombok.Data;
import lombok.NoArgsConstructor;

Expand Down Expand Up @@ -40,8 +41,8 @@ public static class RequestContext implements Serializable, Cloneable {
private String path;
private Map<String, String> queryStringParameters;
private Map<String, List<String>> multiValueQueryStringParameters;
private Map<String, String> headers;
private Map<String, List<String>> multiValueHeaders;
private HttpHeaders<String> headers;
private HttpHeaders<List<String>> multiValueHeaders;
private String body;
private boolean isBase64Encoded;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.amazonaws.services.lambda.runtime.events;

import com.amazonaws.services.lambda.runtime.events.models.HttpHeaders;
import lombok.Data;
import lombok.NoArgsConstructor;

Expand All @@ -22,8 +23,8 @@ public class ApplicationLoadBalancerResponseEvent implements Serializable, Clone
private int statusCode;
private String statusDescription;
private boolean isBase64Encoded;
private Map<String, String> headers;
private Map<String, List<String>> multiValueHeaders;
private HttpHeaders<String> headers;
private HttpHeaders<List<String>> multiValueHeaders;
private String body;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.amazonaws.services.lambda.runtime.events;

import com.amazonaws.services.lambda.runtime.events.models.HttpHeaders;

import java.util.Map;

final class HttpHeadersUtil {
private HttpHeadersUtil() {}

public static <T> HttpHeaders<T> mergeOrReplace(Map<String, T> from) {
if (from == null) return null;
if (from instanceof HttpHeaders) return (HttpHeaders<T>) from;

HttpHeaders<T> out = new HttpHeaders<>();
if (from.isEmpty()) return out;

out.putAll(from);
return out;
}
}
Loading