diff --git a/Cargo.lock b/Cargo.lock index 5b646b37..6d67e861 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4107,7 +4107,7 @@ checksum = "88f8660c1ff60292143c98d08fc6e2f654d722db50410e3f3797d40baaf9d8f3" [[package]] name = "ruma" version = "0.10.1" -source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=196574e4102b3c93427909aa229be0ceacaa8980#196574e4102b3c93427909aa229be0ceacaa8980" +source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=78135227dceb9ce5eb9515b4ae85d452cdcabac8#78135227dceb9ce5eb9515b4ae85d452cdcabac8" dependencies = [ "assign", "js_int", @@ -4127,7 +4127,7 @@ dependencies = [ [[package]] name = "ruma-appservice-api" version = "0.10.0" -source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=196574e4102b3c93427909aa229be0ceacaa8980#196574e4102b3c93427909aa229be0ceacaa8980" +source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=78135227dceb9ce5eb9515b4ae85d452cdcabac8#78135227dceb9ce5eb9515b4ae85d452cdcabac8" dependencies = [ "js_int", "ruma-common", @@ -4139,7 +4139,7 @@ dependencies = [ [[package]] name = "ruma-client-api" version = "0.18.0" -source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=196574e4102b3c93427909aa229be0ceacaa8980#196574e4102b3c93427909aa229be0ceacaa8980" +source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=78135227dceb9ce5eb9515b4ae85d452cdcabac8#78135227dceb9ce5eb9515b4ae85d452cdcabac8" dependencies = [ "as_variant", "assign", @@ -4162,7 +4162,7 @@ dependencies = [ [[package]] name = "ruma-common" version = "0.13.0" -source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=196574e4102b3c93427909aa229be0ceacaa8980#196574e4102b3c93427909aa229be0ceacaa8980" +source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=78135227dceb9ce5eb9515b4ae85d452cdcabac8#78135227dceb9ce5eb9515b4ae85d452cdcabac8" dependencies = [ "as_variant", "base64 0.22.1", @@ -4194,7 +4194,7 @@ dependencies = [ [[package]] name = "ruma-events" version = "0.28.1" -source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=196574e4102b3c93427909aa229be0ceacaa8980#196574e4102b3c93427909aa229be0ceacaa8980" +source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=78135227dceb9ce5eb9515b4ae85d452cdcabac8#78135227dceb9ce5eb9515b4ae85d452cdcabac8" dependencies = [ "as_variant", "indexmap 2.11.1", @@ -4219,7 +4219,7 @@ dependencies = [ [[package]] name = "ruma-federation-api" version = "0.9.0" -source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=196574e4102b3c93427909aa229be0ceacaa8980#196574e4102b3c93427909aa229be0ceacaa8980" +source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=78135227dceb9ce5eb9515b4ae85d452cdcabac8#78135227dceb9ce5eb9515b4ae85d452cdcabac8" dependencies = [ "bytes", "headers", @@ -4241,7 +4241,7 @@ dependencies = [ [[package]] name = "ruma-identifiers-validation" version = "0.9.5" -source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=196574e4102b3c93427909aa229be0ceacaa8980#196574e4102b3c93427909aa229be0ceacaa8980" +source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=78135227dceb9ce5eb9515b4ae85d452cdcabac8#78135227dceb9ce5eb9515b4ae85d452cdcabac8" dependencies = [ "js_int", "thiserror 2.0.16", @@ -4250,7 +4250,7 @@ dependencies = [ [[package]] name = "ruma-identity-service-api" version = "0.9.0" -source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=196574e4102b3c93427909aa229be0ceacaa8980#196574e4102b3c93427909aa229be0ceacaa8980" +source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=78135227dceb9ce5eb9515b4ae85d452cdcabac8#78135227dceb9ce5eb9515b4ae85d452cdcabac8" dependencies = [ "js_int", "ruma-common", @@ -4260,7 +4260,7 @@ dependencies = [ [[package]] name = "ruma-macros" version = "0.13.0" -source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=196574e4102b3c93427909aa229be0ceacaa8980#196574e4102b3c93427909aa229be0ceacaa8980" +source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=78135227dceb9ce5eb9515b4ae85d452cdcabac8#78135227dceb9ce5eb9515b4ae85d452cdcabac8" dependencies = [ "cfg-if", "proc-macro-crate", @@ -4275,7 +4275,7 @@ dependencies = [ [[package]] name = "ruma-push-gateway-api" version = "0.9.0" -source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=196574e4102b3c93427909aa229be0ceacaa8980#196574e4102b3c93427909aa229be0ceacaa8980" +source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=78135227dceb9ce5eb9515b4ae85d452cdcabac8#78135227dceb9ce5eb9515b4ae85d452cdcabac8" dependencies = [ "js_int", "ruma-common", @@ -4287,7 +4287,7 @@ dependencies = [ [[package]] name = "ruma-signatures" version = "0.15.0" -source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=196574e4102b3c93427909aa229be0ceacaa8980#196574e4102b3c93427909aa229be0ceacaa8980" +source = "git+https://forgejo.ellis.link/continuwuation/ruwuma?rev=78135227dceb9ce5eb9515b4ae85d452cdcabac8#78135227dceb9ce5eb9515b4ae85d452cdcabac8" dependencies = [ "base64 0.22.1", "ed25519-dalek", diff --git a/Cargo.toml b/Cargo.toml index 0cb415b7..cba2d433 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -352,7 +352,7 @@ version = "0.1.2" [workspace.dependencies.ruma] git = "https://forgejo.ellis.link/continuwuation/ruwuma" #branch = "conduwuit-changes" -rev = "196574e4102b3c93427909aa229be0ceacaa8980" +rev = "78135227dceb9ce5eb9515b4ae85d452cdcabac8" features = [ "compat", "rand", diff --git a/src/api/client/profile.rs b/src/api/client/profile.rs index eaa66e70..bf6a6d93 100644 --- a/src/api/client/profile.rs +++ b/src/api/client/profile.rs @@ -10,7 +10,7 @@ use conduwuit::{ use conduwuit_service::Services; use futures::{ StreamExt, TryStreamExt, - future::{join, join3, join4}, + future::{join, join3}, }; use ruma::{ OwnedMxcUri, OwnedRoomId, UserId, @@ -226,7 +226,8 @@ pub(crate) async fn get_avatar_url_route( /// # `GET /_matrix/client/v3/profile/{userId}` /// -/// Returns the displayname, avatar_url, blurhash, and tz of the user. +/// Returns the displayname, avatar_url, blurhash, and custom profile fields of +/// the user. /// /// - If user is on another server and we do not have a local copy already, /// fetch profile over federation. @@ -260,9 +261,6 @@ pub(crate) async fn get_profile_route( services .users .set_blurhash(&body.user_id, response.blurhash.clone()); - services - .users - .set_timezone(&body.user_id, response.tz.clone()); for (profile_key, profile_key_value) in &response.custom_profile_fields { services.users.set_profile_key( @@ -276,7 +274,6 @@ pub(crate) async fn get_profile_route( displayname: response.displayname, avatar_url: response.avatar_url, blurhash: response.blurhash, - tz: response.tz, custom_profile_fields: response.custom_profile_fields, }); } @@ -294,15 +291,10 @@ pub(crate) async fn get_profile_route( .collect() .await; - // services.users.timezone will collect the MSC4175 timezone key if it exists - custom_profile_fields.remove("us.cloke.msc4175.tz"); - custom_profile_fields.remove("m.tz"); - - let (avatar_url, blurhash, displayname, tz) = join4( + let (avatar_url, blurhash, displayname) = join3( services.users.avatar_url(&body.user_id).ok(), services.users.blurhash(&body.user_id).ok(), services.users.displayname(&body.user_id).ok(), - services.users.timezone(&body.user_id).ok(), ) .await; @@ -310,7 +302,6 @@ pub(crate) async fn get_profile_route( avatar_url, blurhash, displayname, - tz, custom_profile_fields, }) } diff --git a/src/api/client/unstable.rs b/src/api/client/unstable.rs index d03300c7..f702de9c 100644 --- a/src/api/client/unstable.rs +++ b/src/api/client/unstable.rs @@ -10,10 +10,7 @@ use ruma::{ client::{ error::ErrorKind, membership::mutual_rooms, - profile::{ - delete_profile_key, delete_timezone_key, get_profile_key, get_timezone_key, - set_profile_key, set_timezone_key, - }, + profile::{delete_profile_key, get_profile_key, set_profile_key}, }, federation, }, @@ -60,62 +57,6 @@ pub(crate) async fn get_mutual_rooms_route( }) } -/// # `DELETE /_matrix/client/unstable/uk.tcpip.msc4133/profile/:user_id/us.cloke.msc4175.tz` -/// -/// Deletes the `tz` (timezone) of a user, as per MSC4133 and MSC4175. -/// -/// - Also makes sure other users receive the update using presence EDUs -pub(crate) async fn delete_timezone_key_route( - State(services): State, - body: Ruma, -) -> Result { - let sender_user = body.sender_user(); - - if *sender_user != body.user_id && body.appservice_info.is_none() { - return Err!(Request(Forbidden("You cannot update the profile of another user"))); - } - - services.users.set_timezone(&body.user_id, None); - - if services.config.allow_local_presence { - // Presence update - services - .presence - .ping_presence(&body.user_id, &PresenceState::Online) - .await?; - } - - Ok(delete_timezone_key::unstable::Response {}) -} - -/// # `PUT /_matrix/client/unstable/uk.tcpip.msc4133/profile/:user_id/us.cloke.msc4175.tz` -/// -/// Updates the `tz` (timezone) of a user, as per MSC4133 and MSC4175. -/// -/// - Also makes sure other users receive the update using presence EDUs -pub(crate) async fn set_timezone_key_route( - State(services): State, - body: Ruma, -) -> Result { - let sender_user = body.sender_user(); - - if *sender_user != body.user_id && body.appservice_info.is_none() { - return Err!(Request(Forbidden("You cannot update the profile of another user"))); - } - - services.users.set_timezone(&body.user_id, body.tz.clone()); - - if services.config.allow_local_presence { - // Presence update - services - .presence - .ping_presence(&body.user_id, &PresenceState::Online) - .await?; - } - - Ok(set_timezone_key::unstable::Response {}) -} - /// # `PUT /_matrix/client/unstable/uk.tcpip.msc4133/profile/{user_id}/{field}` /// /// Updates the profile key-value field of a user, as per MSC4133. @@ -274,70 +215,12 @@ pub(crate) async fn delete_profile_key_route( Ok(delete_profile_key::unstable::Response {}) } -/// # `GET /_matrix/client/unstable/uk.tcpip.msc4133/profile/:user_id/us.cloke.msc4175.tz` -/// -/// Returns the `timezone` of the user as per MSC4133 and MSC4175. -/// -/// - If user is on another server and we do not have a local copy already fetch -/// `timezone` over federation -pub(crate) async fn get_timezone_key_route( - State(services): State, - body: Ruma, -) -> Result { - if !services.globals.user_is_local(&body.user_id) { - // Create and update our local copy of the user - if let Ok(response) = services - .sending - .send_federation_request( - body.user_id.server_name(), - federation::query::get_profile_information::v1::Request { - user_id: body.user_id.clone(), - field: None, // we want the full user's profile to update locally as well - }, - ) - .await - { - if !services.users.exists(&body.user_id).await { - services.users.create(&body.user_id, None, None).await?; - } - - services - .users - .set_displayname(&body.user_id, response.displayname.clone()); - - services - .users - .set_avatar_url(&body.user_id, response.avatar_url.clone()); - - services - .users - .set_blurhash(&body.user_id, response.blurhash.clone()); - - services - .users - .set_timezone(&body.user_id, response.tz.clone()); - - return Ok(get_timezone_key::unstable::Response { tz: response.tz }); - } - } - - if !services.users.exists(&body.user_id).await { - // Return 404 if this user doesn't exist and we couldn't fetch it over - // federation - return Err(Error::BadRequest(ErrorKind::NotFound, "Profile was not found.")); - } - - Ok(get_timezone_key::unstable::Response { - tz: services.users.timezone(&body.user_id).await.ok(), - }) -} - /// # `GET /_matrix/client/unstable/uk.tcpip.msc4133/profile/{userId}/{field}}` /// /// Gets the profile key-value field of a user, as per MSC4133. /// /// - If user is on another server and we do not have a local copy already fetch -/// `timezone` over federation +/// the value over federation pub(crate) async fn get_profile_key_route( State(services): State, body: Ruma, @@ -373,10 +256,6 @@ pub(crate) async fn get_profile_key_route( .users .set_blurhash(&body.user_id, response.blurhash.clone()); - services - .users - .set_timezone(&body.user_id, response.tz.clone()); - match response.custom_profile_fields.get(&body.key_name) { | Some(value) => { profile_key_value.insert(body.key_name.clone(), value.clone()); diff --git a/src/api/router.rs b/src/api/router.rs index 42934f70..4ab9780b 100644 --- a/src/api/router.rs +++ b/src/api/router.rs @@ -22,12 +22,9 @@ use crate::{client, server}; pub fn build(router: Router, server: &Server) -> Router { let config = &server.config; let mut router = router - .ruma_route(&client::get_timezone_key_route) .ruma_route(&client::get_profile_key_route) .ruma_route(&client::set_profile_key_route) .ruma_route(&client::delete_profile_key_route) - .ruma_route(&client::set_timezone_key_route) - .ruma_route(&client::delete_timezone_key_route) .ruma_route(&client::appservice_ping) .ruma_route(&client::get_supported_versions_route) .ruma_route(&client::get_register_available_route) diff --git a/src/api/router/auth.rs b/src/api/router/auth.rs index 44afc3ef..4baf0148 100644 --- a/src/api/router/auth.rs +++ b/src/api/router/auth.rs @@ -20,9 +20,7 @@ use ruma::{ client::{ directory::get_public_rooms, error::ErrorKind, - profile::{ - get_avatar_url, get_display_name, get_profile, get_profile_key, get_timezone_key, - }, + profile::{get_avatar_url, get_display_name, get_profile, get_profile_key}, voip::get_turn_server_info, }, federation::{authentication::XMatrix, openid::get_openid_userinfo}, @@ -89,8 +87,7 @@ pub(super) async fn auth( | &get_profile::v3::Request::METADATA | &get_profile_key::unstable::Request::METADATA | &get_display_name::v3::Request::METADATA - | &get_avatar_url::v3::Request::METADATA - | &get_timezone_key::unstable::Request::METADATA => { + | &get_avatar_url::v3::Request::METADATA => { if services.server.config.require_auth_for_profile_requests { match token { | Token::Appservice(_) | Token::User(_) => { diff --git a/src/api/server/query.rs b/src/api/server/query.rs index 9d4fcf73..bd68afda 100644 --- a/src/api/server/query.rs +++ b/src/api/server/query.rs @@ -83,7 +83,6 @@ pub(crate) async fn get_profile_information_route( let mut displayname = None; let mut avatar_url = None; let mut blurhash = None; - let mut tz = None; let mut custom_profile_fields = BTreeMap::new(); match &body.field { @@ -107,7 +106,6 @@ pub(crate) async fn get_profile_information_route( displayname = services.users.displayname(&body.user_id).await.ok(); avatar_url = services.users.avatar_url(&body.user_id).await.ok(); blurhash = services.users.blurhash(&body.user_id).await.ok(); - tz = services.users.timezone(&body.user_id).await.ok(); custom_profile_fields = services .users .all_profile_keys(&body.user_id) @@ -116,15 +114,10 @@ pub(crate) async fn get_profile_information_route( }, } - // services.users.timezone will collect the MSC4175 timezone key if it exists - custom_profile_fields.remove("us.cloke.msc4175.tz"); - custom_profile_fields.remove("m.tz"); - Ok(get_profile_information::v1::Response { displayname, avatar_url, blurhash, - tz, custom_profile_fields, }) } diff --git a/src/service/users/mod.rs b/src/service/users/mod.rs index 6ddd8d79..72fa7c9a 100644 --- a/src/service/users/mod.rs +++ b/src/service/users/mod.rs @@ -1148,34 +1148,6 @@ impl Service { } } - /// Get the timezone of a user. - pub async fn timezone(&self, user_id: &UserId) -> Result { - // TODO: transparently migrate unstable key usage to the stable key once MSC4133 - // and MSC4175 are stable, likely a remove/insert in this block. - - // first check the unstable prefix then check the stable prefix - let unstable_key = (user_id, "us.cloke.msc4175.tz"); - let stable_key = (user_id, "m.tz"); - self.db - .useridprofilekey_value - .qry(&unstable_key) - .or_else(|_| self.db.useridprofilekey_value.qry(&stable_key)) - .await - .deserialized() - } - - /// Sets a new timezone or removes it if timezone is None. - pub fn set_timezone(&self, user_id: &UserId, timezone: Option) { - // TODO: insert to the stable MSC4175 key when it's stable - let key = (user_id, "us.cloke.msc4175.tz"); - - if let Some(timezone) = timezone { - self.db.useridprofilekey_value.put_raw(key, &timezone); - } else { - self.db.useridprofilekey_value.del(key); - } - } - #[cfg(not(feature = "ldap"))] pub async fn search_ldap(&self, _user_id: &UserId) -> Result> { Err!(FeatureDisabled("ldap"))