Skip to content

Commit e21d4ba

Browse files
authored
Add API Gateway custom authorizer events (V1 & V2) and Simple IAM Policy response
1 parent c2df718 commit e21d4ba

File tree

4 files changed

+198
-0
lines changed

4 files changed

+198
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.amazonaws.services.lambda.runtime.events;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Builder;
5+
import lombok.Data;
6+
import lombok.NoArgsConstructor;
7+
8+
import java.util.Map;
9+
10+
/**
11+
* The API Gateway customer authorizer event object as described - https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html
12+
*
13+
*/
14+
15+
@Data
16+
@Builder(setterPrefix = "with")
17+
@NoArgsConstructor
18+
@AllArgsConstructor
19+
public class APIGatewayCustomAuthorizerEvent {
20+
21+
private String version;
22+
private String type;
23+
private String methodArn;
24+
private String identitySource;
25+
private String authorizationToken;
26+
private String resource;
27+
private String path;
28+
private String httpMethod;
29+
private Map<String, String> headers;
30+
private Map<String, String> queryStringParameters;
31+
private Map<String, String> pathParameters;
32+
private Map<String, String> stageVariables;
33+
private RequestContext requestContext;
34+
35+
@Data
36+
@Builder(setterPrefix = "with")
37+
@NoArgsConstructor
38+
@AllArgsConstructor
39+
public static class RequestContext {
40+
private String path;
41+
private String accountId;
42+
private String resourceId;
43+
private String stage;
44+
private String requestId;
45+
private Identity identity;
46+
private String resourcePath;
47+
private String httpMethod;
48+
private String apiId;
49+
}
50+
51+
@Data
52+
@Builder(setterPrefix = "with")
53+
@NoArgsConstructor
54+
@AllArgsConstructor
55+
public static class Identity {
56+
private String apiKey;
57+
private String sourceIp;
58+
}
59+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package com.amazonaws.services.lambda.runtime.events;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Builder;
5+
import lombok.Data;
6+
import lombok.NoArgsConstructor;
7+
import org.joda.time.DateTime;
8+
import org.joda.time.format.DateTimeFormat;
9+
import org.joda.time.format.DateTimeFormatter;
10+
11+
import java.time.Instant;
12+
import java.util.List;
13+
import java.util.Map;
14+
15+
/**
16+
* The V2 API Gateway customer authorizer event object as described - https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html
17+
*
18+
*/
19+
20+
@Data
21+
@Builder(setterPrefix = "with")
22+
@NoArgsConstructor
23+
@AllArgsConstructor
24+
public class APIGatewayV2CustomAuthorizerEvent {
25+
26+
private String version;
27+
private String type;
28+
private String routeArn;
29+
private List<String> identitySource;
30+
private String routeKey;
31+
private String rawPath;
32+
private String rawQueryString;
33+
private List<String> cookies;
34+
private Map<String, String> headers;
35+
private Map<String, String> queryStringParameters;
36+
private RequestContext requestContext;
37+
private Map<String, String> pathParameters;
38+
private Map<String, String> stageVariables;
39+
40+
@Data
41+
@Builder(setterPrefix = "with")
42+
@NoArgsConstructor
43+
@AllArgsConstructor
44+
public static class RequestContext {
45+
46+
private static DateTimeFormatter fmt = DateTimeFormat.forPattern("dd/MMM/yyyy:HH:mm:ss Z");
47+
48+
private String accountId;
49+
private String apiId;
50+
private String domainName;
51+
private String domainPrefix;
52+
private Http http;
53+
private String requestId;
54+
private String routeKey;
55+
private String stage;
56+
private String time;
57+
private long timeEpoch;
58+
59+
public Instant getTimeEpoch() {
60+
return Instant.ofEpochMilli(timeEpoch);
61+
}
62+
63+
public DateTime getTime() {
64+
return fmt.parseDateTime(time);
65+
}
66+
}
67+
68+
@AllArgsConstructor
69+
@Builder(setterPrefix = "with")
70+
@Data
71+
@NoArgsConstructor
72+
public static class Http {
73+
74+
private String method;
75+
private String path;
76+
private String protocol;
77+
private String sourceIp;
78+
private String userAgent;
79+
}
80+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.amazonaws.services.lambda.runtime.events;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Builder;
5+
import lombok.Data;
6+
import lombok.NoArgsConstructor;
7+
8+
import java.util.Map;
9+
10+
/**
11+
* The simplified IAM Policy response object as described in https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-lambda-authorizer.html
12+
*
13+
*/
14+
15+
@Data
16+
@Builder(setterPrefix = "with")
17+
@NoArgsConstructor
18+
@AllArgsConstructor
19+
public class SimpleIAMPolicyResponse {
20+
21+
private boolean isAuthorized;
22+
private Map<String, String> context;
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.amazonaws.services.lambda.runtime.events;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import java.time.Instant;
6+
7+
import static org.junit.jupiter.api.Assertions.assertEquals;
8+
import static org.junit.jupiter.api.Assertions.assertNotNull;
9+
10+
public class APIGatewayV2CustomAuthorizerEventTest {
11+
12+
private static final long TIME_EPOCH = 1601306426515L;
13+
private static final String TIME = "28/Sep/2020:15:14:43 +0000";
14+
15+
@Test
16+
public void testEpochLongAsAnInstant() {
17+
APIGatewayV2CustomAuthorizerEvent customAuthorizerEvent = APIGatewayV2CustomAuthorizerEvent.builder()
18+
.withRequestContext(APIGatewayV2CustomAuthorizerEvent.RequestContext.builder()
19+
.withTimeEpoch(TIME_EPOCH)
20+
.build())
21+
.build();
22+
23+
assertEquals(Instant.ofEpochMilli(1601306426515L), customAuthorizerEvent.getRequestContext().getTimeEpoch());
24+
}
25+
26+
@Test
27+
public void testTimeStringAsDateTime() {
28+
APIGatewayV2CustomAuthorizerEvent customAuthorizerEvent = APIGatewayV2CustomAuthorizerEvent.builder()
29+
.withRequestContext(APIGatewayV2CustomAuthorizerEvent.RequestContext.builder()
30+
.withTime(TIME)
31+
.build())
32+
.build();
33+
34+
assertNotNull(customAuthorizerEvent.getRequestContext().getTime());
35+
}
36+
}

0 commit comments

Comments
 (0)