Skip to content

Commit b53e763

Browse files
committed
feat(appsec): enable request blocking
1 parent ae7df53 commit b53e763

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

datadog_lambda/asm.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from ddtrace.contrib.internal.trace_utils import _get_request_header_client_ip
66
from ddtrace.internal import core
7+
from ddtrace.internal.utils import get_blocked, set_blocked
78
from ddtrace.trace import Span
89

910
from datadog_lambda.trigger import (
@@ -182,3 +183,17 @@ def asm_start_response(
182183
response_headers,
183184
),
184185
)
186+
187+
188+
def get_asm_blocked_response(
189+
event_source: _EventSource,
190+
) -> Optional[Dict[str, Any]]:
191+
"""Get the blocked response for the given event source."""
192+
if event_source.event_type not in _http_event_types:
193+
return None
194+
195+
blocked = get_blocked()
196+
if blocked:
197+
set_blocked(blocked)
198+
return blocked.get("type", "auto")
199+
return None

datadog_lambda/wrapper.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,12 @@
99
from importlib import import_module
1010
from time import time_ns
1111

12-
from datadog_lambda.asm import asm_set_context, asm_start_response, asm_start_request
12+
from datadog_lambda.asm import (
13+
asm_set_context,
14+
asm_start_response,
15+
asm_start_request,
16+
get_asm_blocked_response,
17+
)
1318
from datadog_lambda.dsm import set_dsm_context
1419
from datadog_lambda.extension import should_use_extension, flush_extension
1520
from datadog_lambda.cold_start import (
@@ -159,8 +164,16 @@ def __init__(self, func):
159164
def __call__(self, event, context, **kwargs):
160165
"""Executes when the wrapped function gets called"""
161166
self._before(event, context)
167+
if config.appsec_enabled:
168+
blocking_response = get_asm_blocked_response(self.event_source)
169+
if blocking_response:
170+
return blocking_response
162171
try:
163172
self.response = self.func(event, context, **kwargs)
173+
if config.appsec_enabled:
174+
blocking_response = get_asm_blocked_response(self.event_source)
175+
if blocking_response:
176+
return blocking_response
164177
return self.response
165178
except Exception:
166179
from datadog_lambda.metric import submit_errors_metric

0 commit comments

Comments
 (0)