Fix custom profile field values being double-serialized with escapes.

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk
2026-02-17 07:54:08 +00:00
parent d7b0fad6b8
commit fc23cc1568
4 changed files with 38 additions and 12 deletions

View File

@@ -292,7 +292,7 @@ pub(crate) async fn get_profile_route(
return Err!(Request(NotFound("Profile was not found.")));
}
let mut custom_profile_fields: BTreeMap<String, serde_json::Value> = services
let mut custom_profile_fields: BTreeMap<String, _> = services
.users
.all_profile_keys(&body.user_id)
.collect()
@@ -317,11 +317,24 @@ pub(crate) async fn get_profile_route(
("m.tz", tz),
];
let response = canonical_fields
Ok(canonical_fields
.into_iter()
.filter_map(|(key, val)| val.map(|val| (key, val)))
.map(|(key, val)| (key.to_owned(), val.into()))
.chain(custom_profile_fields.into_iter());
Ok(response.collect::<get_profile::v3::Response>())
.map(|(key, val)| (key.to_owned(), val))
.filter_map(|(key, val)| {
val.map(serde_json::to_value)
.transpose()
.ok()
.flatten()
.map(|val| (key, val))
})
.chain(
custom_profile_fields
.into_iter()
.filter_map(|(key, val)| {
serde_json::to_value(val.json())
.map(|val| (key, val))
.ok()
}),
)
.collect())
}

View File

@@ -366,6 +366,7 @@ pub(crate) async fn get_profile_field_route(
.users
.profile_key(&body.user_id, body.field.as_str())
.await
.and_then(|val| serde_json::to_value(val.json()).map_err(Into::into))
.map_err(|_| err!(Request(NotFound("The requested profile key does not exist."))))?;
let profile_key_value = ProfileFieldValue::new(body.field.as_str(), value)?;