Skip to content

Commit 4112000

Browse files
authored
fix: Do not overwrite User data if already set (getsentry#637)
Turns out some users manually set user.id and other fields in the scope, and those values get overwritten by integrations. Glanced over places where we could be inadvertently overwriting user data and changed to use setdefault to avoid overwriting existing values.
1 parent d31e805 commit 4112000

File tree

6 files changed

+12
-11
lines changed

6 files changed

+12
-11
lines changed

sentry_sdk/integrations/aws_lambda.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -202,11 +202,11 @@ def event_processor(event, hint, start_time=start_time):
202202

203203
id = aws_event.get("identity", {}).get("userArn")
204204
if id is not None:
205-
user_info["id"] = id
205+
user_info.setdefault("id", id)
206206

207207
ip = aws_event.get("identity", {}).get("sourceIp")
208208
if ip is not None:
209-
user_info["ip_address"] = ip
209+
user_info.setdefault("ip_address", ip)
210210

211211
event["request"] = request
212212

sentry_sdk/integrations/django/__init__.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -425,17 +425,17 @@ def _set_user_info(request, event):
425425
return
426426

427427
try:
428-
user_info["id"] = str(user.pk)
428+
user_info.setdefault("id", str(user.pk))
429429
except Exception:
430430
pass
431431

432432
try:
433-
user_info["email"] = user.email
433+
user_info.setdefault("email", user.email)
434434
except Exception:
435435
pass
436436

437437
try:
438-
user_info["username"] = user.get_username()
438+
user_info.setdefault("username", user.get_username())
439439
except Exception:
440440
pass
441441

sentry_sdk/integrations/flask.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ def _add_user_to_event(event):
230230
user_info = event.setdefault("user", {})
231231

232232
try:
233-
user_info["id"] = user.get_id()
233+
user_info.setdefault("id", user.get_id())
234234
# TODO: more configurable user attrs here
235235
except AttributeError:
236236
# might happen if:
@@ -247,11 +247,12 @@ def _add_user_to_event(event):
247247
# https://github.com/lingthio/Flask-User/blob/a379fa0a281789618c484b459cb41236779b95b1/docs/source/data_models.rst#fixed-data-model-property-names
248248

249249
try:
250-
user_info["email"] = user_info["username"] = user.email
250+
user_info.setdefault("email", user.email)
251251
except Exception:
252252
pass
253253

254254
try:
255-
user_info["username"] = user.username
255+
user_info.setdefault("username", user.username)
256+
user_info.setdefault("username", user.email)
256257
except Exception:
257258
pass

sentry_sdk/integrations/pyramid.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ def event_processor(event, hint):
208208
if _should_send_default_pii():
209209
with capture_internal_exceptions():
210210
user_info = event.setdefault("user", {})
211-
user_info["id"] = authenticated_userid(request)
211+
user_info.setdefault("id", authenticated_userid(request))
212212

213213
return event
214214

sentry_sdk/integrations/tornado.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ def tornado_processor(event, hint):
158158

159159
with capture_internal_exceptions():
160160
if handler.current_user and _should_send_default_pii():
161-
event.setdefault("user", {})["is_authenticated"] = True
161+
event.setdefault("user", {}).setdefault("is_authenticated", True)
162162

163163
return event
164164

sentry_sdk/integrations/wsgi.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ def event_processor(event, hint):
293293
if _should_send_default_pii():
294294
user_info = event.setdefault("user", {})
295295
if client_ip:
296-
user_info["ip_address"] = client_ip
296+
user_info.setdefault("ip_address", client_ip)
297297

298298
request_info["url"] = request_url
299299
request_info["query_string"] = query_string

0 commit comments

Comments
 (0)