From 789dedd9f1d9cb17d9ab1dcbf1bb38f952335a75 Mon Sep 17 00:00:00 2001 From: Zomatree Date: Thu, 31 Jul 2025 10:47:04 +0100 Subject: [PATCH] chore: cleanup errors --- crates/bonfire/src/config.rs | 14 +++++-- .../database/src/models/messages/model.rs | 39 +++++++++---------- .../core/database/src/models/users/rocket.rs | 2 +- 3 files changed, 29 insertions(+), 26 deletions(-) diff --git a/crates/bonfire/src/config.rs b/crates/bonfire/src/config.rs index f7d897cf..443be664 100644 --- a/crates/bonfire/src/config.rs +++ b/crates/bonfire/src/config.rs @@ -38,16 +38,22 @@ impl ProtocolConfiguration { match self.format { ProtocolFormat::Json => { if let Message::Text(text) = msg { - serde_json::from_str(text).to_internal_error() + // Log the error in-case we make a breaking change to the payload + + serde_json::from_str(text) + .capture_error() + .map_err(|_| create_error!(UnprocessableEntity)) } else { - Err(create_error!(InternalError)) + Err(create_error!(UnprocessableEntity)) } } ProtocolFormat::Msgpack => { if let Message::Binary(buf) = msg { - rmp_serde::from_slice(buf).to_internal_error() + rmp_serde::from_slice(buf) + .capture_error() + .map_err(|_| create_error!(UnprocessableEntity)) } else { - Err(create_error!(InternalError)) + Err(create_error!(UnprocessableEntity)) } } } diff --git a/crates/core/database/src/models/messages/model.rs b/crates/core/database/src/models/messages/model.rs index 6a629775..48a4c9b4 100644 --- a/crates/core/database/src/models/messages/model.rs +++ b/crates/core/database/src/models/messages/model.rs @@ -488,31 +488,28 @@ impl Message { | Channel::VoiceChannel { ref server, .. } => { let mentions_vec = Vec::from_iter(user_mentions.iter().cloned()); - let valid_members = db.fetch_members(server.as_str(), &mentions_vec[..]).await; - if let Ok(valid_members) = valid_members { - let valid_mentions = HashSet::<&String, RandomState>::from_iter( - valid_members.iter().map(|m| &m.id.user), - ); + let valid_members = db.fetch_members(server.as_str(), &mentions_vec[..]).await?; - user_mentions.retain(|m| valid_mentions.contains(m)); // quick pass, validate mentions are in the server + let valid_mentions = HashSet::<&String, RandomState>::from_iter( + valid_members.iter().map(|m| &m.id.user), + ); - if !user_mentions.is_empty() { - // if there are still mentions, drill down to a channel-level - let member_channel_view_perms = - BulkDatabasePermissionQuery::from_server_id(db, server) - .await - .channel(&channel) - .members(&valid_members) - .members_can_see_channel() - .await; + user_mentions.retain(|m| valid_mentions.contains(m)); // quick pass, validate mentions are in the server - user_mentions - .retain(|m| *member_channel_view_perms.get(m).unwrap_or(&false)); - } - } else { - revolt_config::capture_error(&valid_members.unwrap_err()); - return Err(create_error!(InternalError)); + if !user_mentions.is_empty() { + // if there are still mentions, drill down to a channel-level + let member_channel_view_perms = + BulkDatabasePermissionQuery::from_server_id(db, server) + .await + .channel(&channel) + .members(&valid_members) + .members_can_see_channel() + .await; + + user_mentions + .retain(|m| *member_channel_view_perms.get(m).unwrap_or(&false)); } + } Channel::SavedMessages { .. } => { user_mentions.clear(); diff --git a/crates/core/database/src/models/users/rocket.rs b/crates/core/database/src/models/users/rocket.rs index 58556854..48e933cc 100644 --- a/crates/core/database/src/models/users/rocket.rs +++ b/crates/core/database/src/models/users/rocket.rs @@ -38,7 +38,7 @@ impl<'r> FromRequest<'r> for User { if let Some(user) = user { Outcome::Success(user.clone()) } else { - request.local_cache(|| Some(create_error!(DuplicateNonce))); + request.local_cache(|| Some(create_error!(InvalidSession))); Outcome::Error((Status::Unauthorized, authifier::Error::InvalidSession)) } }