From b53d81ce4649ab9130170ab1c45439625b88ee2e Mon Sep 17 00:00:00 2001 From: Diego Magalhaes Date: Fri, 20 Jun 2025 10:11:06 -0400 Subject: [PATCH 1/2] Add static factory methods to ApiGatewayRequestIdentity and AwsProxyRequestContext for issue #1495 --- .../model/ApiGatewayRequestIdentity.java | 37 +++++++++++++++- .../proxy/model/AwsProxyRequestContext.java | 43 ++++++++++++++++++- 2 files changed, 78 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ApiGatewayRequestIdentity.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ApiGatewayRequestIdentity.java index 89b1ea2a4..3faf83cb1 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ApiGatewayRequestIdentity.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ApiGatewayRequestIdentity.java @@ -14,7 +14,6 @@ import com.amazonaws.serverless.proxy.RequestReader; - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @@ -28,6 +27,42 @@ @JsonIgnoreProperties(ignoreUnknown = true) public class ApiGatewayRequestIdentity { + /** + * Creates an ApiGatewayRequestIdentity instance with default values. + * + * @return A pre-configured ApiGatewayRequestIdentity instance + */ + public static ApiGatewayRequestIdentity getApiGatewayRequestIdentity() { + ApiGatewayRequestIdentity identity = new ApiGatewayRequestIdentity(); + // Set default values for all fields + identity.setApiKey(""); + identity.setApiKeyId(""); + identity.setUserArn(""); + identity.setCognitoAuthenticationType(""); + identity.setCaller(""); + identity.setUserAgent(""); + identity.setUser(""); + identity.setCognitoIdentityPoolId(""); + identity.setCognitoIdentityId(""); + identity.setCognitoAuthenticationProvider(""); + identity.setSourceIp("127.0.0.1"); // Reasonable default + identity.setAccountId(""); + identity.setAccessKey(""); + return identity; + } + + /** + * Creates an ApiGatewayRequestIdentity instance with the specified source IP. + * + * @param sourceIp the source IP to set + * @return A pre-configured ApiGatewayRequestIdentity instance + */ + public static ApiGatewayRequestIdentity getApiGatewayRequestIdentity(String sourceIp) { + ApiGatewayRequestIdentity identity = getApiGatewayRequestIdentity(); + identity.setSourceIp(sourceIp); + return identity; + } + //------------------------------------------------------------- // Variables - Private //------------------------------------------------------------- diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestContext.java index e7cb1bf61..89969a88e 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestContext.java @@ -14,7 +14,6 @@ import com.amazonaws.serverless.proxy.RequestReader; - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @@ -29,6 +28,48 @@ @JsonIgnoreProperties(ignoreUnknown = true) public class AwsProxyRequestContext { + /** + * Creates an AwsProxyRequestContext instance with default values. + * + * @return A pre-configured AwsProxyRequestContext instance + */ + public static AwsProxyRequestContext getAwsProxyRequestContext() { + AwsProxyRequestContext context = new AwsProxyRequestContext(); + // Set default values for all fields + context.setResourceId(""); + context.setApiId(""); + context.setResourcePath(""); + context.setHttpMethod("GET"); // Reasonable default + context.setRequestId(""); + context.setExtendedRequestId(""); + context.setAccountId(""); + context.setStage(""); + context.setPath(""); + context.setProtocol(""); + context.setRequestTime(""); + context.setRequestTimeEpoch(System.currentTimeMillis()); // Current time as reasonable default + + // Create and set identity with defaults + context.setIdentity(ApiGatewayRequestIdentity.getApiGatewayRequestIdentity()); + + // Initialize authorizer + context.setAuthorizer(new ApiGatewayAuthorizerContext()); + + return context; + } + + /** + * Creates an AwsProxyRequestContext instance with the specified HTTP method. + * + * @param httpMethod the HTTP method to set + * @return A pre-configured AwsProxyRequestContext instance + */ + public static AwsProxyRequestContext getAwsProxyRequestContext(String httpMethod) { + AwsProxyRequestContext context = getAwsProxyRequestContext(); + context.setHttpMethod(httpMethod); + return context; + } + //------------------------------------------------------------- // Variables - Private //------------------------------------------------------------- From b7cd722f2e0bc47e4e9fcabe6a57e91d166162b3 Mon Sep 17 00:00:00 2001 From: Diego Magalhaes Date: Fri, 20 Jun 2025 10:24:55 -0400 Subject: [PATCH 2/2] Update ApiGatewayRequestIdentity and AwsProxyRequestContext static factory methods with realistic defaults for issue #1495 --- .../model/ApiGatewayRequestIdentity.java | 30 +++++++++---------- .../proxy/model/AwsProxyRequestContext.java | 26 ++++++++-------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ApiGatewayRequestIdentity.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ApiGatewayRequestIdentity.java index 3faf83cb1..520ebda05 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ApiGatewayRequestIdentity.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ApiGatewayRequestIdentity.java @@ -28,26 +28,26 @@ public class ApiGatewayRequestIdentity { /** - * Creates an ApiGatewayRequestIdentity instance with default values. + * Creates an ApiGatewayRequestIdentity instance with default values based on a typical API Gateway request. * * @return A pre-configured ApiGatewayRequestIdentity instance */ public static ApiGatewayRequestIdentity getApiGatewayRequestIdentity() { ApiGatewayRequestIdentity identity = new ApiGatewayRequestIdentity(); - // Set default values for all fields - identity.setApiKey(""); - identity.setApiKeyId(""); - identity.setUserArn(""); - identity.setCognitoAuthenticationType(""); - identity.setCaller(""); - identity.setUserAgent(""); - identity.setUser(""); - identity.setCognitoIdentityPoolId(""); - identity.setCognitoIdentityId(""); - identity.setCognitoAuthenticationProvider(""); - identity.setSourceIp("127.0.0.1"); // Reasonable default - identity.setAccountId(""); - identity.setAccessKey(""); + // Set default values based on example API Gateway request + identity.setApiKey(null); + identity.setApiKeyId(null); + identity.setUserArn(null); + identity.setCognitoAuthenticationType(null); + identity.setCaller(null); + identity.setUserAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"); + identity.setUser(null); + identity.setCognitoIdentityPoolId(null); + identity.setCognitoIdentityId(null); + identity.setCognitoAuthenticationProvider(null); + identity.setSourceIp("127.0.0.1"); + identity.setAccountId(null); + identity.setAccessKey(null); return identity; } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestContext.java index 89969a88e..f965930af 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestContext.java @@ -29,27 +29,27 @@ public class AwsProxyRequestContext { /** - * Creates an AwsProxyRequestContext instance with default values. + * Creates an AwsProxyRequestContext instance with default values based on a typical API Gateway request. * * @return A pre-configured AwsProxyRequestContext instance */ public static AwsProxyRequestContext getAwsProxyRequestContext() { AwsProxyRequestContext context = new AwsProxyRequestContext(); - // Set default values for all fields - context.setResourceId(""); - context.setApiId(""); - context.setResourcePath(""); - context.setHttpMethod("GET"); // Reasonable default - context.setRequestId(""); + + // Set default values based on typical API Gateway request + context.setAccountId("123456789012"); + context.setApiId("id"); + context.setResourceId("$default"); + context.setResourcePath("/my/path"); + context.setHttpMethod("POST"); + context.setRequestId("id"); context.setExtendedRequestId(""); - context.setAccountId(""); - context.setStage(""); - context.setPath(""); - context.setProtocol(""); - context.setRequestTime(""); + context.setStage("$default"); + context.setPath("/my/path"); + context.setProtocol("HTTP/1.1"); context.setRequestTimeEpoch(System.currentTimeMillis()); // Current time as reasonable default - // Create and set identity with defaults + // Create and set identity with defaults (already includes sourceIp and userAgent) context.setIdentity(ApiGatewayRequestIdentity.getApiGatewayRequestIdentity()); // Initialize authorizer