diff --git a/Cargo.toml b/Cargo.toml index e5f30f91..605f1be4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -79,7 +79,7 @@ version = "0.1.0" edition = "2021" # See also `rust-toolchain.toml` -rust-version = "1.81.0" +rust-version = "1.84.0" [lints] workspace = true diff --git a/flake.lock b/flake.lock index abebfbde..57242b6f 100644 --- a/flake.lock +++ b/flake.lock @@ -291,13 +291,13 @@ "rust-manifest": { "flake": false, "locked": { - "narHash": "sha256-tB9BZB6nRHDk5ELIVlGYlIjViLKBjQl52nC1avhcCwA=", + "narHash": "sha256-dm4qOlaZ/uZ+O2TmOrWEjjMAzZNWAGE8S0ne79Fo8OA=", "type": "file", - "url": "https://static.rust-lang.org/dist/channel-rust-1.81.0.toml" + "url": "https://static.rust-lang.org/dist/channel-rust-1.84.0.toml" }, "original": { "type": "file", - "url": "https://static.rust-lang.org/dist/channel-rust-1.81.0.toml" + "url": "https://static.rust-lang.org/dist/channel-rust-1.84.0.toml" } }, "systems": { diff --git a/flake.nix b/flake.nix index 0d6f516e..62084c91 100644 --- a/flake.nix +++ b/flake.nix @@ -12,7 +12,7 @@ rust-manifest = { # Keep version in sync with rust-toolchain.toml - url = "https://static.rust-lang.org/dist/channel-rust-1.81.0.toml"; + url = "https://static.rust-lang.org/dist/channel-rust-1.84.0.toml"; flake = false; }; }; diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 42c0fad3..12390a29 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -9,7 +9,7 @@ # If you're having trouble making the relevant changes, bug a maintainer. [toolchain] -channel = "1.81.0" +channel = "1.84.0" components = [ # For rust-analyzer "rust-src", diff --git a/src/api/client_server/keys.rs b/src/api/client_server/keys.rs index 304be1d0..d2e3006f 100644 --- a/src/api/client_server/keys.rs +++ b/src/api/client_server/keys.rs @@ -150,8 +150,8 @@ pub(crate) async fn upload_signing_keys_route( services().users.add_cross_signing_keys( sender_user, master_key, - &body.self_signing_key, - &body.user_signing_key, + body.self_signing_key.as_ref(), + body.user_signing_key.as_ref(), // notify so that other users see the new keys true, )?; @@ -428,7 +428,7 @@ pub(crate) async fn get_keys_helper bool>( let raw = serde_json::from_value(json) .expect("Raw::from_value always works"); services().users.add_cross_signing_keys( - &user, &raw, &None, &None, + &user, &raw, None, None, // Dont notify. A notification would trigger another key // request resulting in an endless loop false, diff --git a/src/api/client_server/room.rs b/src/api/client_server/room.rs index c2488464..ebb5a26b 100644 --- a/src/api/client_server/room.rs +++ b/src/api/client_server/room.rs @@ -133,62 +133,59 @@ pub(crate) async fn create_room_route( }; let room_version = RoomVersion::try_from(&room_version_id)?; - let content = match &body.creation_content { - Some(content) => { - let mut content = content - .deserialize_as::() - .expect("Invalid creation content"); + let content = if let Some(content) = &body.creation_content { + let mut content = content + .deserialize_as::() + .expect("Invalid creation content"); - if room_version.create_event_creator_prop { - content.insert( - "creator".into(), - json!(&sender_user).try_into().map_err(|_| { - Error::BadRequest( - ErrorKind::BadJson, - "Invalid creation content", - ) - })?, - ); - } + if room_version.create_event_creator_prop { content.insert( - "room_version".into(), - json!(room_version_id.as_str()).try_into().map_err(|_| { + "creator".into(), + json!(&sender_user).try_into().map_err(|_| { Error::BadRequest( ErrorKind::BadJson, "Invalid creation content", ) })?, ); - content } - None => { - let content = if room_version.create_event_creator_prop { - RoomCreateEventContent::new_v1(sender_user.to_owned()) - } else { - RoomCreateEventContent::new_v11() - }; - let mut content = serde_json::from_str::( - to_raw_value(&content) - .map_err(|_| { - Error::BadRequest( - ErrorKind::BadJson, - "Invalid creation content", - ) - })? - .get(), - ) - .unwrap(); - content.insert( - "room_version".into(), - json!(room_version_id.as_str()).try_into().map_err(|_| { + content.insert( + "room_version".into(), + json!(room_version_id.as_str()).try_into().map_err(|_| { + Error::BadRequest( + ErrorKind::BadJson, + "Invalid creation content", + ) + })?, + ); + content + } else { + let content = if room_version.create_event_creator_prop { + RoomCreateEventContent::new_v1(sender_user.to_owned()) + } else { + RoomCreateEventContent::new_v11() + }; + let mut content = serde_json::from_str::( + to_raw_value(&content) + .map_err(|_| { Error::BadRequest( ErrorKind::BadJson, "Invalid creation content", ) - })?, - ); - content - } + })? + .get(), + ) + .unwrap(); + content.insert( + "room_version".into(), + json!(room_version_id.as_str()).try_into().map_err(|_| { + Error::BadRequest( + ErrorKind::BadJson, + "Invalid creation content", + ) + })?, + ); + content }; // Validate creation content diff --git a/src/api/client_server/session.rs b/src/api/client_server/session.rs index 188397cf..228ab4d3 100644 --- a/src/api/client_server/session.rs +++ b/src/api/client_server/session.rs @@ -232,11 +232,11 @@ pub(crate) async fn login_route( let token = utils::random_string(TOKEN_LENGTH); // Determine if device_id was provided and exists in the db for this user - let device_exists = body.device_id.as_ref().map_or(false, |device_id| { + let device_exists = body.device_id.as_ref().is_some_and(|device_id| { services() .users .all_device_ids(&user_id) - .any(|x| x.as_ref().map_or(false, |v| v == device_id)) + .any(|x| x.as_ref().is_ok_and(|v| v == device_id)) }); if device_exists { diff --git a/src/api/client_server/user_directory.rs b/src/api/client_server/user_directory.rs index 5b866dd8..0d8912ce 100644 --- a/src/api/client_server/user_directory.rs +++ b/src/api/client_server/user_directory.rs @@ -60,10 +60,9 @@ pub(crate) async fn search_users_route( .rooms .state_accessor .room_state_get(&room, &StateEventType::RoomJoinRules, "") - .map_or(false, |event| { - event.map_or(false, |event| { - serde_json::from_str(event.content.get()).map_or( - false, + .is_ok_and(|event| { + event.is_some_and(|event| { + serde_json::from_str(event.content.get()).is_ok_and( |r: RoomJoinRulesEventContent| { r.join_rule == JoinRule::Public }, diff --git a/src/api/server_server.rs b/src/api/server_server.rs index edba5291..9c29b60b 100644 --- a/src/api/server_server.rs +++ b/src/api/server_server.rs @@ -1030,8 +1030,8 @@ pub(crate) async fn send_transaction_message_route( services().users.add_cross_signing_keys( &user_id, &master_key, - &self_signing_key, - &None, + self_signing_key.as_ref(), + None, true, )?; } diff --git a/src/cli/serve.rs b/src/cli/serve.rs index a4771641..71776801 100644 --- a/src/cli/serve.rs +++ b/src/cli/serve.rs @@ -114,10 +114,10 @@ async fn federation_self_test() -> Result<()> { ) .await?; - if !response + if response .server .as_ref() - .is_some_and(|s| s.name.as_deref() == Some(env!("CARGO_PKG_NAME"))) + .is_none_or(|s| s.name.as_deref() != Some(env!("CARGO_PKG_NAME"))) { error!(?response, "unexpected server version"); return Err(Error::BadConfig( diff --git a/src/database.rs b/src/database.rs index 5205b9ca..acfcda2b 100644 --- a/src/database.rs +++ b/src/database.rs @@ -488,8 +488,8 @@ impl KeyValueDatabase { for (userid, password) in self.userid_password.iter() { let password = utils::string_from_bytes(&password); - let empty_hashed_password = password - .map_or(false, |password| { + let empty_hashed_password = + password.is_ok_and(|password| { utils::verify_password("", password) }); diff --git a/src/database/key_value/rooms/state_cache.rs b/src/database/key_value/rooms/state_cache.rs index 2c2e215f..c90a18b1 100644 --- a/src/database/key_value/rooms/state_cache.rs +++ b/src/database/key_value/rooms/state_cache.rs @@ -182,9 +182,9 @@ impl service::rooms::state_cache::Data for KeyValueDatabase { .ok(); let in_room = bridge_user_id - .map_or(false, |id| self.is_joined(&id, room_id).unwrap_or(false)) + .is_some_and(|id| self.is_joined(&id, room_id).unwrap_or(false)) || self.room_members(room_id).any(|userid| { - userid.map_or(false, |userid| { + userid.is_ok_and(|userid| { appservice.users.is_match(userid.as_str()) }) }); diff --git a/src/database/key_value/sending.rs b/src/database/key_value/sending.rs index 10d437dd..1f7db867 100644 --- a/src/database/key_value/sending.rs +++ b/src/database/key_value/sending.rs @@ -86,12 +86,10 @@ impl service::sending::Data for KeyValueDatabase { ) -> Box> + 'a> { let prefix = destination.get_prefix(); - return Box::new(self.servernameevent_data.scan_prefix(prefix).map( - |(k, v)| { - let k = RequestKey::new(k); - parse_servercurrentevent(&k, v).map(|(_, ev)| (ev, k)) - }, - )); + Box::new(self.servernameevent_data.scan_prefix(prefix).map(|(k, v)| { + let k = RequestKey::new(k); + parse_servercurrentevent(&k, v).map(|(_, ev)| (ev, k)) + })) } fn mark_as_active( diff --git a/src/database/key_value/users.rs b/src/database/key_value/users.rs index 97558f10..e3fdb95e 100644 --- a/src/database/key_value/users.rs +++ b/src/database/key_value/users.rs @@ -522,8 +522,8 @@ impl service::users::Data for KeyValueDatabase { &self, user_id: &UserId, master_key: &Raw, - self_signing_key: &Option>, - user_signing_key: &Option>, + self_signing_key: Option<&Raw>, + user_signing_key: Option<&Raw>, notify: bool, ) -> Result<()> { // TODO: Check signatures diff --git a/src/service/globals.rs b/src/service/globals.rs index afbd9cb2..7ba34e0d 100644 --- a/src/service/globals.rs +++ b/src/service/globals.rs @@ -443,8 +443,8 @@ impl Service { &self.config.turn.secret } - pub(crate) fn emergency_password(&self) -> &Option { - &self.config.emergency_password + pub(crate) fn emergency_password(&self) -> Option<&str> { + self.config.emergency_password.as_deref() } /// If the emergency password option is set, attempts to set the emergency @@ -455,10 +455,9 @@ impl Service { let inner = || -> Result { let admin_bot = self.admin_bot_user_id.as_ref(); - services().users.set_password( - admin_bot, - self.emergency_password().as_deref(), - )?; + services() + .users + .set_password(admin_bot, self.emergency_password())?; let (ruleset, res) = match self.emergency_password() { Some(_) => (Ruleset::server_default(admin_bot), Ok(true)), diff --git a/src/service/rooms/spaces.rs b/src/service/rooms/spaces.rs index 88b0c4a9..bfcbb072 100644 --- a/src/service/rooms/spaces.rs +++ b/src/service/rooms/spaces.rs @@ -76,7 +76,7 @@ impl Service { let mut results = Vec::new(); while let Some(current_room) = { - while stack.last().map_or(false, Vec::is_empty) { + while stack.last().is_some_and(Vec::is_empty) { stack.pop(); } if stack.is_empty() { diff --git a/src/service/rooms/state_cache.rs b/src/service/rooms/state_cache.rs index e3783d74..ea6721d9 100644 --- a/src/service/rooms/state_cache.rs +++ b/src/service/rooms/state_cache.rs @@ -120,7 +120,7 @@ impl Service { }) }) .transpose()? - .map_or(false, |ignored| { + .is_some_and(|ignored| { ignored .content .ignored_users diff --git a/src/service/rooms/timeline.rs b/src/service/rooms/timeline.rs index 382c3aca..d8cfa368 100644 --- a/src/service/rooms/timeline.rs +++ b/src/service/rooms/timeline.rs @@ -726,9 +726,10 @@ impl Service { let matching_users = |users: &NamespaceRegex| { appservice.users.is_match(pdu.sender.as_str()) || pdu.kind == TimelineEventType::RoomMember - && pdu.state_key.as_ref().map_or(false, |state_key| { - users.is_match(state_key) - }) + && pdu + .state_key + .as_ref() + .is_some_and(|state_key| users.is_match(state_key)) }; let matching_aliases = |aliases: &NamespaceRegex| { services() diff --git a/src/service/users.rs b/src/service/users.rs index 614514ac..3ee47386 100644 --- a/src/service/users.rs +++ b/src/service/users.rs @@ -464,8 +464,8 @@ impl Service { &self, user_id: &UserId, master_key: &Raw, - self_signing_key: &Option>, - user_signing_key: &Option>, + self_signing_key: Option<&Raw>, + user_signing_key: Option<&Raw>, notify: bool, ) -> Result<()> { self.db.add_cross_signing_keys( diff --git a/src/service/users/data.rs b/src/service/users/data.rs index 0ff9a162..630ded7d 100644 --- a/src/service/users/data.rs +++ b/src/service/users/data.rs @@ -140,8 +140,8 @@ pub(crate) trait Data: Send + Sync { &self, user_id: &UserId, master_key: &Raw, - self_signing_key: &Option>, - user_signing_key: &Option>, + self_signing_key: Option<&Raw>, + user_signing_key: Option<&Raw>, notify: bool, ) -> Result<()>;