diff --git a/src/api/router/args.rs b/src/api/router/args.rs index 3f5348f3c..508242eeb 100644 --- a/src/api/router/args.rs +++ b/src/api/router/args.rs @@ -15,10 +15,9 @@ use crate::{State, router::auth::CheckAuth}; #[derive(Deserialize)] pub(crate) struct AuthQueryParams { pub(super) user_id: Option, - /// Device ID for appservice device masquerading (MSC3202/MSC4190). - /// Can be provided as `device_id` or `org.matrix.msc3202.device_id`. - #[serde(alias = "org.matrix.msc3202.device_id")] pub(super) device_id: Option, + #[serde(rename = "org.matrix.msc3202.device_id")] + pub(super) legacy_device_id: Option, } /// Extractor for Ruma request structs diff --git a/src/api/router/auth.rs b/src/api/router/auth.rs index 2b52e93ee..f1450419a 100644 --- a/src/api/router/auth.rs +++ b/src/api/router/auth.rs @@ -219,25 +219,29 @@ impl CheckAuth for AccessToken { // MSC3202/MSC4190: Handle device_id masquerading for appservices. // The device_id can be provided via `device_id` or // `org.matrix.msc3202.device_id` query parameter. - let sender_device = - if let Some(device_id) = query.device_id.as_deref().map(Into::into) { - // Verify the device exists for this user - if services - .users - .get_device_metadata(&sender_user, device_id) - .await - .is_err() - { - return Err!(Request(Forbidden( - "Device does not exist for user or appservice cannot masquerade as \ - this device." - ))); - } + let sender_device = if let Some(device_id) = query + .device_id + .or(query.legacy_device_id) + .as_deref() + .map(Into::into) + { + // Verify the device exists for this user + if services + .users + .get_device_metadata(&sender_user, device_id) + .await + .is_err() + { + return Err!(Request(Forbidden( + "Device does not exist for user or appservice cannot masquerade as this \ + device." + ))); + } - Some(device_id.to_owned()) - } else { - None - }; + Some(device_id.to_owned()) + } else { + None + }; Ok(ClientIdentity::Appservice { sender_user,