Skip to content

Commit a590c8e

Browse files
committed
Make changes to adjust to the data collection option being within the _experiments property in the client
1 parent 5e9f610 commit a590c8e

12 files changed

Lines changed: 172 additions & 23 deletions

File tree

sentry_sdk/integrations/_asgi_common.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ def _get_request_data(
117117

118118
request_data["headers"] = headers = _filter_headers(
119119
_get_headers(asgi_scope),
120+
use_annotated_value=False,
120121
)
121122
request_data["query_string"] = _get_query(asgi_scope)
122123

sentry_sdk/integrations/_wsgi_common.py

Lines changed: 48 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from sentry_sdk._types import SENSITIVE_DATA_SUBSTITUTE
77
from sentry_sdk.data_collection import _apply_key_value_collection_filtering
88
from sentry_sdk.scope import should_send_default_pii
9-
from sentry_sdk.utils import AnnotatedValue, logger
9+
from sentry_sdk.utils import AnnotatedValue, has_data_collection_enabled, logger
1010

1111
try:
1212
from django.http.request import RawPostDataException
@@ -23,6 +23,21 @@
2323

2424
from sentry_sdk._types import Event, HttpStatusCodeRange
2525

26+
SENSITIVE_ENV_KEYS = (
27+
"REMOTE_ADDR",
28+
"HTTP_X_FORWARDED_FOR",
29+
"HTTP_SET_COOKIE",
30+
"HTTP_COOKIE",
31+
"HTTP_AUTHORIZATION",
32+
"HTTP_PROXY_AUTHORIZATION",
33+
"HTTP_X_API_KEY",
34+
"HTTP_X_FORWARDED_FOR",
35+
"HTTP_X_REAL_IP",
36+
)
37+
38+
SENSITIVE_HEADERS = tuple(
39+
x[len("HTTP_") :] for x in SENSITIVE_ENV_KEYS if x.startswith("HTTP_")
40+
)
2641

2742
DEFAULT_HTTP_METHODS_TO_CAPTURE = (
2843
"CONNECT",
@@ -196,19 +211,41 @@ def _is_json_content_type(ct: "Optional[str]") -> bool:
196211

197212
def _filter_headers(
198213
headers: "Mapping[str, str]",
199-
) -> "Mapping[str, str]":
200-
data_collection_configuration = sentry_sdk.get_client().options["data_collection"]
214+
use_annotated_value: bool = True,
215+
) -> "Mapping[str, Union[str, AnnotatedValue]]":
216+
client_options = sentry_sdk.get_client().options
201217

202-
filtered = _apply_key_value_collection_filtering(
203-
items=headers,
204-
behaviour=data_collection_configuration["http_headers"]["request"],
205-
)
218+
if has_data_collection_enabled(client_options):
219+
data_collection_configuration = client_options["data_collection"]
206220

207-
for key in filtered:
208-
if isinstance(key, str) and key.lower() in ("cookie", "set-cookie"):
209-
filtered[key] = SENSITIVE_DATA_SUBSTITUTE
221+
filtered = _apply_key_value_collection_filtering(
222+
items=headers,
223+
behaviour=data_collection_configuration["http_headers"]["request"],
224+
)
210225

211-
return filtered
226+
for key in filtered:
227+
if isinstance(key, str) and key.lower() in ("cookie", "set-cookie"):
228+
filtered[key] = SENSITIVE_DATA_SUBSTITUTE
229+
230+
return filtered
231+
else:
232+
if should_send_default_pii():
233+
return headers
234+
235+
substitute: "Union[AnnotatedValue, str]" = (
236+
SENSITIVE_DATA_SUBSTITUTE
237+
if not use_annotated_value
238+
else AnnotatedValue.removed_because_over_size_limit()
239+
)
240+
241+
return {
242+
k: (
243+
v
244+
if k.upper().replace("-", "_") not in SENSITIVE_HEADERS
245+
else substitute
246+
)
247+
for k, v in headers.items()
248+
}
212249

213250

214251
def _in_http_status_code_range(

sentry_sdk/integrations/aiohttp.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,8 @@ async def sentry_app_handle(
150150

151151
header_attributes: "dict[str, Any]" = {}
152152
for header, header_value in _filter_headers(
153-
headers
153+
headers,
154+
use_annotated_value=False,
154155
).items():
155156
header_attributes[
156157
f"http.request.header.{header.lower()}"

sentry_sdk/integrations/aws_lambda.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ def sentry_handler(
152152

153153
header_attributes: "dict[str, Any]" = {}
154154
for header, header_value in _filter_headers(
155-
headers
155+
headers, use_annotated_value=False
156156
).items():
157157
header_attributes[f"http.request.header.{header.lower()}"] = (
158158
header_value

sentry_sdk/integrations/chalice.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ def wrapped_view_function(**function_args: "Any") -> "Any":
9292

9393
header_attrs: "Dict[str, Any]" = {}
9494
for header, value in _filter_headers(
95-
headers
95+
headers, use_annotated_value=False
9696
).items():
9797
header_attrs[f"http.request.header.{header.lower()}"] = value
9898

sentry_sdk/integrations/gcp.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ def sentry_func(
8989
if hasattr(gcp_event, "headers"):
9090
headers = gcp_event.headers
9191
for header, header_value in _filter_headers(
92-
headers
92+
headers, use_annotated_value=False
9393
).items():
9494
header_attributes[f"http.request.header.{header.lower()}"] = (
9595
# header_value will always be a string because we set `use_annotated_value` to false above

sentry_sdk/integrations/quart.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ async def _request_websocket_started(app: "Quart", **kwargs: "Any") -> None:
195195
header_attributes: "dict[str, Any]" = {}
196196

197197
for header, header_value in _filter_headers(
198-
dict(request_websocket.headers)
198+
dict(request_websocket.headers), use_annotated_value=False
199199
).items():
200200
header_attributes[f"http.request.header.{header.lower()}"] = (
201201
header_value

sentry_sdk/integrations/sanic.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ def _get_request_attributes(request: "Request") -> "Dict[str, Any]":
374374
if request.method:
375375
attributes[SPANDATA.HTTP_REQUEST_METHOD] = request.method.upper()
376376

377-
headers = _filter_headers(dict(request.headers))
377+
headers = _filter_headers(dict(request.headers), use_annotated_value=False)
378378
for header, value in headers.items():
379379
attributes[f"{SPANDATA.HTTP_REQUEST_HEADER}.{header.lower()}"] = value
380380

sentry_sdk/integrations/tornado.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ def _get_request_attributes(request: "Any") -> "Dict[str, Any]":
193193
if request.method:
194194
attributes[SPANDATA.HTTP_REQUEST_METHOD] = request.method.upper()
195195

196-
headers = _filter_headers(dict(request.headers))
196+
headers = _filter_headers(dict(request.headers), use_annotated_value=False)
197197
for header, value in headers.items():
198198
attributes[f"{SPANDATA.HTTP_REQUEST_HEADER}.{header.lower()}"] = value
199199

sentry_sdk/integrations/wsgi.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ def _get_request_attributes(
390390
if method:
391391
attributes["http.request.method"] = method.upper()
392392

393-
headers = _filter_headers(dict(_get_headers(environ)))
393+
headers = _filter_headers(dict(_get_headers(environ)), use_annotated_value=False)
394394
for header, value in headers.items():
395395
attributes[f"http.request.header.{header.lower()}"] = value
396396

0 commit comments

Comments
 (0)