diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b9b34b2ac..7f06d08263 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ - Add user geo information to Replays. ([#4088](https://github.com/getsentry/relay/pull/4088)) - Configurable span.op inference. ([#4056](https://github.com/getsentry/relay/pull/4056)) - Enable support for zstd `Content-Encoding`. ([#4089](https://github.com/getsentry/relay/pull/4089)) +- Add support for creating User from LoginId in Unreal Crash Context. ([#4093](https://github.com/getsentry/relay/pull/4093)) **Internal:** diff --git a/relay-server/src/utils/unreal.rs b/relay-server/src/utils/unreal.rs index 822586bc36..62ada505f9 100644 --- a/relay-server/src/utils/unreal.rs +++ b/relay-server/src/utils/unreal.rs @@ -199,6 +199,13 @@ fn merge_unreal_context(event: &mut Event, context: Unreal4Context) { .set_value(Some(username.into())); } + if let Some(login_id) = &runtime_props.login_id { + let id = event.user.get_or_insert_with(User::default).id.value_mut(); + if id.is_none() { + *id = Some(login_id.clone().into()); + } + } + let contexts = event.contexts.get_or_insert_with(Contexts::default); if let Some(memory_physical) = runtime_props.memory_stats_total_physical.take() { @@ -402,6 +409,22 @@ mod tests { Unreal4Context::parse(raw_context).unwrap() } + fn get_context_with_login_id() -> Unreal4Context { + let raw_context = br#" + + + SOME_ID + + + + + + +"#; + + Unreal4Context::parse(raw_context).unwrap() + } + #[test] fn test_merge_unreal_context() { let context = get_context(); @@ -481,4 +504,17 @@ mod tests { insta::assert_snapshot!(Annotated::new(event).to_json_pretty().unwrap()); } + + #[test] + fn test_merge_unreal_context_login_id() { + let context = get_context_with_login_id(); + let mut event = Event::default(); + + merge_unreal_context(&mut event, context); + + assert_eq!( + event.user.0.unwrap().id.0.unwrap(), + LenientString("SOME_ID".to_owned()) + ); + } }