Module: Datadog::Lambda::AppSec::EventNormalizer

Defined in:
lib/datadog/lambda/appsec/event_normalizer.rb

Overview

Normalizes API Gateway v1/v2 event payloads into a standard key set.

NOTE: The REST API (v1) event does NOT have a version field.

Only the HTTP API events have "version": "1.0" or "version": "2.0".

Class Method Summary collapse

Class Method Details

.normalize(event) ⇒ Object



15
16
17
# File 'lib/datadog/lambda/appsec/event_normalizer.rb', line 15

def normalize(event)
  event.key?('httpMethod') ? normalize_v1(event) : normalize_v2(event)
end

.normalize_v1(event) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/datadog/lambda/appsec/event_normalizer.rb', line 19

def normalize_v1(event)
  data = {
    'method' => event['httpMethod'],
    'path' => event['path'],
    'headers' => event['headers'],
    'query' => event['multiValueQueryStringParameters'] || event['queryStringParameters'],
    'source_ip' => event.dig('requestContext', 'identity', 'sourceIp'),
    'body' => event['body'],
    'base64_encoded' => event['isBase64Encoded'],
    'path_params' => event['pathParameters']
  }
  data.compact!
  data
end

.normalize_v2(event) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/datadog/lambda/appsec/event_normalizer.rb', line 34

def normalize_v2(event)
  data = {
    'method' => event.dig('requestContext', 'http', 'method'),
    'path' => event['rawPath'],
    'headers' => event['headers'],
    'cookies' => event['cookies'],
    'query' => event['queryStringParameters'],
    'query_string' => event['rawQueryString'],
    'source_ip' => event.dig('requestContext', 'http', 'sourceIp'),
    'body' => event['body'],
    'base64_encoded' => event['isBase64Encoded'],
    'path_params' => event['pathParameters']
  }
  data.compact!
  data
end