1// Copyright 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
3package events
4
5// APIGatewayProxyRequest contains data coming from the API Gateway proxy
6type APIGatewayProxyRequest struct {
7	Resource                        string                        `json:"resource"` // The resource path defined in API Gateway
8	Path                            string                        `json:"path"`     // The url path for the caller
9	HTTPMethod                      string                        `json:"httpMethod"`
10	Headers                         map[string]string             `json:"headers"`
11	MultiValueHeaders               map[string][]string           `json:"multiValueHeaders"`
12	QueryStringParameters           map[string]string             `json:"queryStringParameters"`
13	MultiValueQueryStringParameters map[string][]string           `json:"multiValueQueryStringParameters"`
14	PathParameters                  map[string]string             `json:"pathParameters"`
15	StageVariables                  map[string]string             `json:"stageVariables"`
16	RequestContext                  APIGatewayProxyRequestContext `json:"requestContext"`
17	Body                            string                        `json:"body"`
18	IsBase64Encoded                 bool                          `json:"isBase64Encoded,omitempty"`
19}
20
21// APIGatewayProxyResponse configures the response to be returned by API Gateway for the request
22type APIGatewayProxyResponse struct {
23	StatusCode        int                 `json:"statusCode"`
24	Headers           map[string]string   `json:"headers"`
25	MultiValueHeaders map[string][]string `json:"multiValueHeaders"`
26	Body              string              `json:"body"`
27	IsBase64Encoded   bool                `json:"isBase64Encoded,omitempty"`
28}
29
30// APIGatewayProxyRequestContext contains the information to identify the AWS account and resources invoking the
31// Lambda function. It also includes Cognito identity information for the caller.
32type APIGatewayProxyRequestContext struct {
33	AccountID        string                    `json:"accountId"`
34	ResourceID       string                    `json:"resourceId"`
35	OperationName    string                    `json:"operationName,omitempty"`
36	Stage            string                    `json:"stage"`
37	DomainName       string                    `json:"domainName"`
38	DomainPrefix     string                    `json:"domainPrefix"`
39	RequestID        string                    `json:"requestId"`
40	Protocol         string                    `json:"protocol"`
41	Identity         APIGatewayRequestIdentity `json:"identity"`
42	ResourcePath     string                    `json:"resourcePath"`
43	Authorizer       map[string]interface{}    `json:"authorizer"`
44	HTTPMethod       string                    `json:"httpMethod"`
45	RequestTime      string                    `json:"requestTime"`
46	RequestTimeEpoch int64                     `json:"requestTimeEpoch"`
47	APIID            string                    `json:"apiId"` // The API Gateway rest API Id
48}
49
50// APIGatewayV2HTTPRequest contains data coming from the new HTTP API Gateway
51type APIGatewayV2HTTPRequest struct {
52	Version               string                         `json:"version"`
53	RouteKey              string                         `json:"routeKey"`
54	RawPath               string                         `json:"rawPath"`
55	RawQueryString        string                         `json:"rawQueryString"`
56	Cookies               []string                       `json:"cookies,omitempty"`
57	Headers               map[string]string              `json:"headers"`
58	QueryStringParameters map[string]string              `json:"queryStringParameters,omitempty"`
59	PathParameters        map[string]string              `json:"pathParameters,omitempty"`
60	RequestContext        APIGatewayV2HTTPRequestContext `json:"requestContext"`
61	StageVariables        map[string]string              `json:"stageVariables,omitempty"`
62	Body                  string                         `json:"body,omitempty"`
63	IsBase64Encoded       bool                           `json:"isBase64Encoded"`
64}
65
66// APIGatewayV2HTTPRequestContext contains the information to identify the AWS account and resources invoking the Lambda function.
67type APIGatewayV2HTTPRequestContext struct {
68	RouteKey     string                                               `json:"routeKey"`
69	AccountID    string                                               `json:"accountId"`
70	Stage        string                                               `json:"stage"`
71	RequestID    string                                               `json:"requestId"`
72	Authorizer   *APIGatewayV2HTTPRequestContextAuthorizerDescription `json:"authorizer,omitempty"`
73	APIID        string                                               `json:"apiId"` // The API Gateway HTTP API Id
74	DomainName   string                                               `json:"domainName"`
75	DomainPrefix string                                               `json:"domainPrefix"`
76	Time         string                                               `json:"time"`
77	TimeEpoch    int64                                                `json:"timeEpoch"`
78	HTTP         APIGatewayV2HTTPRequestContextHTTPDescription        `json:"http"`
79}
80
81// APIGatewayV2HTTPRequestContextAuthorizerDescription contains authorizer information for the request context.
82type APIGatewayV2HTTPRequestContextAuthorizerDescription struct {
83	JWT    *APIGatewayV2HTTPRequestContextAuthorizerJWTDescription `json:"jwt,omitempty"`
84	Lambda map[string]interface{}                                  `json:"lambda,omitempty"`
85	IAM    *APIGatewayV2HTTPRequestContextAuthorizerIAMDescription `json:"iam,omitempty"`
86}
87
88// APIGatewayV2HTTPRequestContextAuthorizerJWTDescription contains JWT authorizer information for the request context.
89type APIGatewayV2HTTPRequestContextAuthorizerJWTDescription struct {
90	Claims map[string]string `json:"claims"`
91	Scopes []string          `json:"scopes,omitempty"`
92}
93
94// APIGatewayV2HTTPRequestContextAuthorizerIAMDescription contains IAM information for the request context.
95type APIGatewayV2HTTPRequestContextAuthorizerIAMDescription struct {
96	AccessKey       string                                                  `json:"accessKey"`
97	AccountID       string                                                  `json:"accountId"`
98	CallerID        string                                                  `json:"callerId"`
99	CognitoIdentity APIGatewayV2HTTPRequestContextAuthorizerCognitoIdentity `json:"cognitoIdentity,omitempty"`
100	PrincipalOrgID  string                                                  `json:"principalOrgId"`
101	UserARN         string                                                  `json:"userArn"`
102	UserID          string                                                  `json:"userId"`
103}
104
105// APIGatewayV2HTTPRequestContextAuthorizerCognitoIdentity contains Cognito identity information for the request context.
106type APIGatewayV2HTTPRequestContextAuthorizerCognitoIdentity struct {
107	AMR            []string `json:"amr"`
108	IdentityID     string   `json:"identityId"`
109	IdentityPoolID string   `json:"identityPoolId"`
110}
111
112// APIGatewayV2HTTPRequestContextHTTPDescription contains HTTP information for the request context.
113type APIGatewayV2HTTPRequestContextHTTPDescription struct {
114	Method    string `json:"method"`
115	Path      string `json:"path"`
116	Protocol  string `json:"protocol"`
117	SourceIP  string `json:"sourceIp"`
118	UserAgent string `json:"userAgent"`
119}
120
121// APIGatewayV2HTTPResponse configures the response to be returned by API Gateway V2 for the request
122type APIGatewayV2HTTPResponse struct {
123	StatusCode        int                 `json:"statusCode"`
124	Headers           map[string]string   `json:"headers"`
125	MultiValueHeaders map[string][]string `json:"multiValueHeaders"`
126	Body              string              `json:"body"`
127	IsBase64Encoded   bool                `json:"isBase64Encoded,omitempty"`
128	Cookies           []string            `json:"cookies"`
129}
130
131// APIGatewayRequestIdentity contains identity information for the request caller.
132type APIGatewayRequestIdentity struct {
133	CognitoIdentityPoolID         string `json:"cognitoIdentityPoolId"`
134	AccountID                     string `json:"accountId"`
135	CognitoIdentityID             string `json:"cognitoIdentityId"`
136	Caller                        string `json:"caller"`
137	APIKey                        string `json:"apiKey"`
138	APIKeyID                      string `json:"apiKeyId"`
139	AccessKey                     string `json:"accessKey"`
140	SourceIP                      string `json:"sourceIp"`
141	CognitoAuthenticationType     string `json:"cognitoAuthenticationType"`
142	CognitoAuthenticationProvider string `json:"cognitoAuthenticationProvider"`
143	UserArn                       string `json:"userArn"`
144	UserAgent                     string `json:"userAgent"`
145	User                          string `json:"user"`
146}
147
148// APIGatewayWebsocketProxyRequest contains data coming from the API Gateway proxy
149type APIGatewayWebsocketProxyRequest struct {
150	Resource                        string                                 `json:"resource"` // The resource path defined in API Gateway
151	Path                            string                                 `json:"path"`     // The url path for the caller
152	HTTPMethod                      string                                 `json:"httpMethod,omitempty"`
153	Headers                         map[string]string                      `json:"headers"`
154	MultiValueHeaders               map[string][]string                    `json:"multiValueHeaders"`
155	QueryStringParameters           map[string]string                      `json:"queryStringParameters"`
156	MultiValueQueryStringParameters map[string][]string                    `json:"multiValueQueryStringParameters"`
157	PathParameters                  map[string]string                      `json:"pathParameters"`
158	StageVariables                  map[string]string                      `json:"stageVariables"`
159	RequestContext                  APIGatewayWebsocketProxyRequestContext `json:"requestContext"`
160	Body                            string                                 `json:"body"`
161	IsBase64Encoded                 bool                                   `json:"isBase64Encoded,omitempty"`
162}
163
164// APIGatewayWebsocketProxyRequestContext contains the information to identify
165// the AWS account and resources invoking the Lambda function. It also includes
166// Cognito identity information for the caller.
167type APIGatewayWebsocketProxyRequestContext struct {
168	AccountID          string                    `json:"accountId"`
169	ResourceID         string                    `json:"resourceId"`
170	Stage              string                    `json:"stage"`
171	RequestID          string                    `json:"requestId"`
172	Identity           APIGatewayRequestIdentity `json:"identity"`
173	ResourcePath       string                    `json:"resourcePath"`
174	Authorizer         interface{}               `json:"authorizer"`
175	HTTPMethod         string                    `json:"httpMethod"`
176	APIID              string                    `json:"apiId"` // The API Gateway rest API Id
177	ConnectedAt        int64                     `json:"connectedAt"`
178	ConnectionID       string                    `json:"connectionId"`
179	DomainName         string                    `json:"domainName"`
180	Error              string                    `json:"error"`
181	EventType          string                    `json:"eventType"`
182	ExtendedRequestID  string                    `json:"extendedRequestId"`
183	IntegrationLatency string                    `json:"integrationLatency"`
184	MessageDirection   string                    `json:"messageDirection"`
185	MessageID          interface{}               `json:"messageId"`
186	RequestTime        string                    `json:"requestTime"`
187	RequestTimeEpoch   int64                     `json:"requestTimeEpoch"`
188	RouteKey           string                    `json:"routeKey"`
189	Status             string                    `json:"status"`
190}
191
192// APIGatewayCustomAuthorizerRequestTypeRequestIdentity contains identity information for the request caller.
193type APIGatewayCustomAuthorizerRequestTypeRequestIdentity struct {
194	APIKey   string `json:"apiKey"`
195	SourceIP string `json:"sourceIp"`
196}
197
198// APIGatewayCustomAuthorizerContext represents the expected format of an API Gateway custom authorizer response.
199// Deprecated. Code should be updated to use the Authorizer map from APIGatewayRequestIdentity. Ex: Authorizer["principalId"]
200type APIGatewayCustomAuthorizerContext struct {
201	PrincipalID *string `json:"principalId"`
202	StringKey   *string `json:"stringKey,omitempty"`
203	NumKey      *int    `json:"numKey,omitempty"`
204	BoolKey     *bool   `json:"boolKey,omitempty"`
205}
206
207// APIGatewayCustomAuthorizerRequestTypeRequestContext represents the expected format of an API Gateway custom authorizer response.
208type APIGatewayCustomAuthorizerRequestTypeRequestContext struct {
209	Path         string                                               `json:"path"`
210	AccountID    string                                               `json:"accountId"`
211	ResourceID   string                                               `json:"resourceId"`
212	Stage        string                                               `json:"stage"`
213	RequestID    string                                               `json:"requestId"`
214	Identity     APIGatewayCustomAuthorizerRequestTypeRequestIdentity `json:"identity"`
215	ResourcePath string                                               `json:"resourcePath"`
216	HTTPMethod   string                                               `json:"httpMethod"`
217	APIID        string                                               `json:"apiId"`
218}
219
220// APIGatewayCustomAuthorizerRequest contains data coming in to a custom API Gateway authorizer function.
221type APIGatewayCustomAuthorizerRequest struct {
222	Type               string `json:"type"`
223	AuthorizationToken string `json:"authorizationToken"`
224	MethodArn          string `json:"methodArn"`
225}
226
227// APIGatewayCustomAuthorizerRequestTypeRequest contains data coming in to a custom API Gateway authorizer function.
228type APIGatewayCustomAuthorizerRequestTypeRequest struct {
229	Type                            string                                              `json:"type"`
230	MethodArn                       string                                              `json:"methodArn"`
231	Resource                        string                                              `json:"resource"`
232	Path                            string                                              `json:"path"`
233	HTTPMethod                      string                                              `json:"httpMethod"`
234	Headers                         map[string]string                                   `json:"headers"`
235	MultiValueHeaders               map[string][]string                                 `json:"multiValueHeaders"`
236	QueryStringParameters           map[string]string                                   `json:"queryStringParameters"`
237	MultiValueQueryStringParameters map[string][]string                                 `json:"multiValueQueryStringParameters"`
238	PathParameters                  map[string]string                                   `json:"pathParameters"`
239	StageVariables                  map[string]string                                   `json:"stageVariables"`
240	RequestContext                  APIGatewayCustomAuthorizerRequestTypeRequestContext `json:"requestContext"`
241}
242
243// APIGatewayCustomAuthorizerResponse represents the expected format of an API Gateway authorization response.
244type APIGatewayCustomAuthorizerResponse struct {
245	PrincipalID        string                           `json:"principalId"`
246	PolicyDocument     APIGatewayCustomAuthorizerPolicy `json:"policyDocument"`
247	Context            map[string]interface{}           `json:"context,omitempty"`
248	UsageIdentifierKey string                           `json:"usageIdentifierKey,omitempty"`
249}
250
251// APIGatewayCustomAuthorizerPolicy represents an IAM policy
252type APIGatewayCustomAuthorizerPolicy struct {
253	Version   string
254	Statement []IAMPolicyStatement
255}
256
257// IAMPolicyStatement represents one statement from IAM policy with action, effect and resource
258type IAMPolicyStatement struct {
259	Action   []string
260	Effect   string
261	Resource []string
262}
263