Skip to content

Commit d7ec49f

Browse files
committed
constructBaseLogData for V1 & v2
1 parent 02ddb15 commit d7ec49f

File tree

3 files changed

+243
-31
lines changed

3 files changed

+243
-31
lines changed

lib/index.js

Lines changed: 94 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -238,69 +238,132 @@ function mapResponseHeaders(event, context, result) {
238238
return headers;
239239
}
240240

241-
function logEvent(event, context, err, result, options, moesifController) {
242-
if (!event.httpMethod || !event.headers) {
243-
logMessage(
244-
options.debug,
245-
'logEvent',
246-
'AWS Lambda trigger must be a Load Balancer or API Gateway. ' +
247-
'See https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-set-up-lambda-proxy-integration-on-proxy-resource'
248-
);
249-
return Promise.resolve();
241+
function constructBaseLogData(
242+
event,
243+
context,
244+
err,
245+
result,
246+
options,
247+
isV1
248+
) {
249+
var logData = {};
250+
logData.request = {};
251+
logData.response = {};
252+
if (isV1) {
253+
logData.request.time =
254+
event && event.requestContext && event.requestContext.requestTimeEpoch
255+
? new Date(event.requestContext.requestTimeEpoch)
256+
: Date.now();
257+
} else {
258+
logData.request.time =
259+
event && event.requestContext && event.requestContext.timeEpoch
260+
? new Date(event.requestContext.timeEpoch)
261+
: Date.now();
250262
}
251263

252-
if (options.skip(event, context)) {
253-
// exit early
254-
return Promise.resolve();
264+
if (isV1) {
265+
logData.request.uri = getURLWithQueryStringParams(event);
266+
} else {
267+
logData.request.uri =
268+
event.rawPath + (event.rawQueryString ? "?" + event.rawQueryString : "");
255269
}
256270

257-
var logData = {};
258-
logData.request = {};
259-
logData.response = {};
260-
logData.request.time =
261-
event && event.requestContext && event.requestContext.requestTimeEpoch
262-
? new Date(event && event.requestContext && event.requestContext.requestTimeEpoch)
263-
: Date.now();
271+
if (isV1) {
272+
logData.request.verb = event.httpMethod;
273+
} else {
274+
logData.request.verb =
275+
event.requestContext &&
276+
event.requestContext.http &&
277+
event.requestContext.http.method;
278+
}
264279

265-
logData.request.uri = getURLWithQueryStringParams(event);
266-
logData.request.verb = event.httpMethod;
267280
logData.request.apiVerion = options.getApiVersion(event, context);
268-
logData.request.ipAddress =
269-
requestIp.getClientIp(event) ||
270-
(event.requestContext &&
271-
event.requestContext.identity &&
272-
event.requestContext.identity.sourceIp);
281+
282+
if (isV1) {
283+
logData.request.ipAddress =
284+
requestIp.getClientIp(event) ||
285+
(event.requestContext &&
286+
event.requestContext.identity &&
287+
event.requestContext.identity.sourceIp);
288+
} else {
289+
logData.request.ipAddress =
290+
event.requestContext &&
291+
event.requestContext.http &&
292+
event.requestContext.http.sourceIp;
293+
}
294+
273295
logData.request.headers = event.headers || {};
274296
logData.metadata = options.getMetadata(event, context);
275297

276298
if (options.logBody && event.body) {
277299
if (event.isBase64Encoded) {
278300
logData.request.body = event.body;
279-
logData.request.transferEncoding = 'base64';
301+
logData.request.transferEncoding = "base64";
280302
} else {
281303
const bodyWrapper = safeJsonParse(event.body);
282304
logData.request.body = bodyWrapper.body;
283305
logData.request.transferEncoding = bodyWrapper.transferEncoding;
284306
}
285307
}
286308

287-
logMessage(options.debug, 'logEvent', 'created request: \n' + JSON.stringify(logData.request));
309+
logMessage(
310+
options.debug,
311+
"logEvent",
312+
"created request: \n" + JSON.stringify(logData.request)
313+
);
314+
288315
var safeRes = result || {};
289-
logData.response.time = Math.max(new Date(logData.request.time).getTime(), Date.now());
290-
logData.response.status = safeRes.statusCode ? parseInt(safeRes.statusCode) : 599;
316+
logData.response.time = Math.max(
317+
new Date(logData.request.time).getTime(),
318+
Date.now()
319+
);
320+
logData.response.status = safeRes.statusCode
321+
? parseInt(safeRes.statusCode)
322+
: 599;
291323
logData.response.headers = mapResponseHeaders(event, context, safeRes);
292324

293325
if (options.logBody && safeRes.body) {
294326
if (safeRes.isBase64Encoded) {
295327
logData.response.body = safeRes.body;
296-
logData.response.transferEncoding = 'base64';
328+
logData.response.transferEncoding = "base64";
297329
} else {
298330
const bodyWrapper = safeJsonParse(safeRes.body);
299331
logData.response.body = bodyWrapper.body;
300332
logData.response.transferEncoding = bodyWrapper.transferEncoding;
301333
}
302334
}
303335

336+
return logData;
337+
}
338+
339+
340+
function logEvent(event, context, err, result, options, moesifController) {
341+
if (!event.httpMethod || !event.headers) {
342+
logMessage(
343+
options.debug,
344+
'logEvent',
345+
'AWS Lambda trigger must be a Load Balancer or API Gateway. ' +
346+
'See https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-set-up-lambda-proxy-integration-on-proxy-resource'
347+
);
348+
return Promise.resolve();
349+
}
350+
351+
if (options.skip(event, context)) {
352+
// exit early
353+
return Promise.resolve();
354+
}
355+
356+
const isV1 = event.version === '1.0';
357+
358+
var logData = constructBaseLogData(
359+
event,
360+
context,
361+
err,
362+
result,
363+
options,
364+
isV1
365+
);
366+
304367
logMessage(options.debug, 'logEvent', 'created data: \n' + JSON.stringify(logData));
305368

306369
logData = options.maskContent(logData);

tests/eventV1.json

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
{
2+
"version": "1.0",
3+
"resource": "/my/path",
4+
"path": "/my/path",
5+
"httpMethod": "GET",
6+
"headers": {
7+
"header1": "value1",
8+
"header2": "value2"
9+
},
10+
"multiValueHeaders": {
11+
"header1": [
12+
"value1"
13+
],
14+
"header2": [
15+
"value1",
16+
"value2"
17+
]
18+
},
19+
"queryStringParameters": {
20+
"parameter1": "value1",
21+
"parameter2": "value"
22+
},
23+
"multiValueQueryStringParameters": {
24+
"parameter1": [
25+
"value1",
26+
"value2"
27+
],
28+
"parameter2": [
29+
"value"
30+
]
31+
},
32+
"requestContext": {
33+
"accountId": "123456789012",
34+
"apiId": "id",
35+
"authorizer": {
36+
"claims": null,
37+
"scopes": null
38+
},
39+
"domainName": "id.execute-api.us-east-1.amazonaws.com",
40+
"domainPrefix": "id",
41+
"extendedRequestId": "request-id",
42+
"httpMethod": "GET",
43+
"identity": {
44+
"accessKey": null,
45+
"accountId": null,
46+
"caller": null,
47+
"cognitoAuthenticationProvider": null,
48+
"cognitoAuthenticationType": null,
49+
"cognitoIdentityId": null,
50+
"cognitoIdentityPoolId": null,
51+
"principalOrgId": null,
52+
"sourceIp": "IP",
53+
"user": null,
54+
"userAgent": "user-agent",
55+
"userArn": null,
56+
"clientCert": {
57+
"clientCertPem": "CERT_CONTENT",
58+
"subjectDN": "www.example.com",
59+
"issuerDN": "Example issuer",
60+
"serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1",
61+
"validity": {
62+
"notBefore": "May 28 12:30:02 2019 GMT",
63+
"notAfter": "Aug 5 09:36:04 2021 GMT"
64+
}
65+
}
66+
},
67+
"path": "/my/path",
68+
"protocol": "HTTP/1.1",
69+
"requestId": "id=",
70+
"requestTime": "04/Mar/2020:19:15:17 +0000",
71+
"requestTimeEpoch": 1583349317135,
72+
"resourceId": null,
73+
"resourcePath": "/my/path",
74+
"stage": "$default"
75+
},
76+
"pathParameters": null,
77+
"stageVariables": null,
78+
"body": "Hello from Lambda!",
79+
"isBase64Encoded": false
80+
}

tests/eventV2.json

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
{
2+
"version": "2.0",
3+
"routeKey": "$default",
4+
"rawPath": "/my/path",
5+
"rawQueryString": "parameter1=value1&parameter1=value2&parameter2=value",
6+
"cookies": [
7+
"cookie1",
8+
"cookie2"
9+
],
10+
"headers": {
11+
"header1": "value1",
12+
"header2": "value1,value2"
13+
},
14+
"queryStringParameters": {
15+
"parameter1": "value1,value2",
16+
"parameter2": "value"
17+
},
18+
"requestContext": {
19+
"accountId": "123456789012",
20+
"apiId": "api-id",
21+
"authentication": {
22+
"clientCert": {
23+
"clientCertPem": "CERT_CONTENT",
24+
"subjectDN": "www.example.com",
25+
"issuerDN": "Example issuer",
26+
"serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1",
27+
"validity": {
28+
"notBefore": "May 28 12:30:02 2019 GMT",
29+
"notAfter": "Aug 5 09:36:04 2021 GMT"
30+
}
31+
}
32+
},
33+
"authorizer": {
34+
"jwt": {
35+
"claims": {
36+
"claim1": "value1",
37+
"claim2": "value2"
38+
},
39+
"scopes": [
40+
"scope1",
41+
"scope2"
42+
]
43+
}
44+
},
45+
"domainName": "id.execute-api.us-east-1.amazonaws.com",
46+
"domainPrefix": "id",
47+
"http": {
48+
"method": "POST",
49+
"path": "/my/path",
50+
"protocol": "HTTP/1.1",
51+
"sourceIp": "IP",
52+
"userAgent": "agent"
53+
},
54+
"requestId": "id",
55+
"routeKey": "$default",
56+
"stage": "$default",
57+
"time": "12/Mar/2020:19:03:58 +0000",
58+
"timeEpoch": 1583348638390
59+
},
60+
"body": "Hello from Lambda",
61+
"pathParameters": {
62+
"parameter1": "value1"
63+
},
64+
"isBase64Encoded": false,
65+
"stageVariables": {
66+
"stageVariable1": "value1",
67+
"stageVariable2": "value2"
68+
}
69+
}

0 commit comments

Comments
 (0)