diff --git a/.gitignore b/.gitignore index 56551f44..c138d00c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ Rocket.toml target .data + +.vercel diff --git a/crates/delta/src/routes/servers/server_edit.rs b/crates/delta/src/routes/servers/server_edit.rs index 3c891078..267b0a2a 100644 --- a/crates/delta/src/routes/servers/server_edit.rs +++ b/crates/delta/src/routes/servers/server_edit.rs @@ -138,12 +138,15 @@ pub async fn req( } // 2. Validate changes - let mut unknown_channels = HashSet::new(); if let Some(system_messages) = &partial.system_messages { - unknown_channels = system_messages.clone().into_channel_ids(); + for id in system_messages.clone().into_channel_ids() { + if !server.channels.contains(&id) { + return Err(Error::NotFound); + } + } } - if let Some(categories) = &partial.categories { + if let Some(categories) = &mut partial.categories { let mut channel_ids = HashSet::new(); for category in categories { for channel in &category.channels { @@ -153,13 +156,11 @@ pub async fn req( channel_ids.insert(channel.to_string()); } + + category + .channels + .retain(|item| server.channels.contains(item)); } - - unknown_channels.extend(channel_ids); - } - - if !db.check_channels_exist(&unknown_channels).await? { - return Err(Error::NotFound); } // 3. Apply new icon diff --git a/crates/quark/src/impl/dummy/channels/channel.rs b/crates/quark/src/impl/dummy/channels/channel.rs index b88914ff..b25406de 100644 --- a/crates/quark/src/impl/dummy/channels/channel.rs +++ b/crates/quark/src/impl/dummy/channels/channel.rs @@ -1,5 +1,3 @@ -use std::collections::HashSet; - use crate::models::channel::{Channel, FieldsChannel, PartialChannel}; use crate::{AbstractAttachment, AbstractChannel, Error, OverrideField, Result}; @@ -83,8 +81,4 @@ impl AbstractChannel for DummyDb { info!("Updating permissions for role {role} in {channel} with {permissions:?}"); Ok(()) } - - async fn check_channels_exist(&self, _channels: &HashSet) -> Result { - Ok(true) - } } diff --git a/crates/quark/src/impl/mongo/channels/channel.rs b/crates/quark/src/impl/mongo/channels/channel.rs index ede29150..f0802a11 100644 --- a/crates/quark/src/impl/mongo/channels/channel.rs +++ b/crates/quark/src/impl/mongo/channels/channel.rs @@ -1,5 +1,3 @@ -use std::collections::HashSet; - use bson::{Bson, Document}; use crate::models::channel::{Channel, FieldsChannel, PartialChannel}; @@ -291,25 +289,6 @@ impl AbstractChannel for MongoDb { with: "channel", }) } - - async fn check_channels_exist(&self, channels: &HashSet) -> Result { - let count = channels.len() as u64; - self.col::(COL) - .count_documents( - doc! { - "_id": { - "$in": channels.iter().cloned().collect::>() - } - }, - None, - ) - .await - .map(|x| x == count) - .map_err(|_| Error::DatabaseError { - operation: "count_documents", - with: "channel", - }) - } } impl IntoDocumentPath for FieldsChannel { diff --git a/crates/quark/src/traits/channels/channel.rs b/crates/quark/src/traits/channels/channel.rs index 0eba4cee..e1fa6140 100644 --- a/crates/quark/src/traits/channels/channel.rs +++ b/crates/quark/src/traits/channels/channel.rs @@ -1,5 +1,3 @@ -use std::collections::HashSet; - use crate::models::channel::{Channel, FieldsChannel, PartialChannel}; use crate::{OverrideField, Result}; @@ -55,7 +53,4 @@ pub trait AbstractChannel: Sync + Send { role: &str, permissions: OverrideField, ) -> Result<()>; - - /// Validate existence of channels - async fn check_channels_exist(&self, channels: &HashSet) -> Result; }