|
45 | 45 | MILLIS_TO_SECONDS = 1000.0 |
46 | 46 |
|
47 | 47 |
|
| 48 | +def _get_user_from_event(aws_event: "dict[str, Any]") -> "dict[str, Any]": |
| 49 | + if not isinstance(aws_event, dict): |
| 50 | + return {} |
| 51 | + |
| 52 | + identity = aws_event.get("requestContext", {}).get("identity") |
| 53 | + if identity is None: |
| 54 | + return {} |
| 55 | + |
| 56 | + user_info: "dict[str, Any]" = {} |
| 57 | + |
| 58 | + user_arn = identity.get("userArn") |
| 59 | + if user_arn is not None: |
| 60 | + user_info["id"] = user_arn |
| 61 | + |
| 62 | + ip = identity.get("sourceIp") |
| 63 | + if ip is not None: |
| 64 | + user_info["ip_address"] = ip |
| 65 | + |
| 66 | + return user_info |
| 67 | + |
| 68 | + |
48 | 69 | def _wrap_init_error(init_error: "F") -> "F": |
49 | 70 | @ensure_integration_enabled(AwsLambdaIntegration, init_error) |
50 | 71 | def sentry_init_error(*args: "Any", **kwargs: "Any") -> "Any": |
@@ -181,6 +202,17 @@ def sentry_handler( |
181 | 202 | elif should_send_default_pii(): |
182 | 203 | additional_attributes["url.query"] = urlencode(qs) |
183 | 204 |
|
| 205 | + if not scope._user: |
| 206 | + if has_data_collection_enabled(client.options): |
| 207 | + if client.options["data_collection"]["user_info"]: |
| 208 | + user_info = _get_user_from_event(request_data) |
| 209 | + if user_info: |
| 210 | + scope.set_user(user_info) |
| 211 | + elif should_send_default_pii(): |
| 212 | + user_info = _get_user_from_event(request_data) |
| 213 | + if user_info: |
| 214 | + scope.set_user(user_info) |
| 215 | + |
184 | 216 | sampling_context = { |
185 | 217 | "aws_event": aws_event, |
186 | 218 | "aws_context": aws_context, |
@@ -440,38 +472,22 @@ def event_processor( |
440 | 472 | client_options = sentry_sdk.get_client().options |
441 | 473 | if has_data_collection_enabled(client_options): |
442 | 474 | if client_options["data_collection"]["user_info"]: |
443 | | - user_info = sentry_event.setdefault("user", {}) |
444 | | - |
445 | | - identity = aws_event.get("requestContext", {}).get("identity") |
446 | | - if identity is None: |
447 | | - identity = {} |
448 | | - |
449 | | - id = identity.get("userArn") |
450 | | - if id is not None: |
451 | | - user_info.setdefault("id", id) |
452 | | - |
453 | | - ip = identity.get("sourceIp") |
454 | | - if ip is not None: |
455 | | - user_info.setdefault("ip_address", ip) |
| 475 | + extracted_user = _get_user_from_event(aws_event) |
| 476 | + if extracted_user: |
| 477 | + user_info = sentry_event.setdefault("user", {}) |
| 478 | + for key, value in extracted_user.items(): |
| 479 | + user_info.setdefault(key, value) |
456 | 480 |
|
457 | 481 | if "incoming_request" in client_options["data_collection"]["http_bodies"]: |
458 | 482 | if "body" in aws_event: |
459 | 483 | request["data"] = aws_event.get("body", "") |
460 | 484 |
|
461 | 485 | elif should_send_default_pii(): |
462 | | - user_info = sentry_event.setdefault("user", {}) |
463 | | - |
464 | | - identity = aws_event.get("requestContext", {}).get("identity") |
465 | | - if identity is None: |
466 | | - identity = {} |
467 | | - |
468 | | - id = identity.get("userArn") |
469 | | - if id is not None: |
470 | | - user_info.setdefault("id", id) |
471 | | - |
472 | | - ip = identity.get("sourceIp") |
473 | | - if ip is not None: |
474 | | - user_info.setdefault("ip_address", ip) |
| 486 | + extracted_user = _get_user_from_event(aws_event) |
| 487 | + if extracted_user: |
| 488 | + user_info = sentry_event.setdefault("user", {}) |
| 489 | + for key, value in extracted_user.items(): |
| 490 | + user_info.setdefault(key, value) |
475 | 491 |
|
476 | 492 | if "body" in aws_event: |
477 | 493 | request["data"] = aws_event.get("body", "") |
|
0 commit comments