diff --git a/src/database/entities/channel.rs b/src/database/entities/channel.rs index 5138793b..4c8d69e6 100644 --- a/src/database/entities/channel.rs +++ b/src/database/entities/channel.rs @@ -6,7 +6,7 @@ use rocket_contrib::json::JsonValue; use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Debug, Clone)] -#[serde(tag = "type")] +#[serde(tag = "channel_type")] pub enum Channel { SavedMessages { #[serde(rename = "_id")] diff --git a/src/database/guards/reference.rs b/src/database/guards/reference.rs index 829ff244..65e0dfbe 100644 --- a/src/database/guards/reference.rs +++ b/src/database/guards/reference.rs @@ -47,8 +47,13 @@ impl Ref { self.fetch("channels").await } - pub async fn fetch_message(&self) -> Result { - self.fetch("messages").await + pub async fn fetch_message(&self, channel: &Channel) -> Result { + let message: Message = self.fetch("messages").await?; + if &message.channel != channel.id() { + Err(Error::InvalidOperation) + } else { + Ok(message) + } } } diff --git a/src/routes/channels/message_delete.rs b/src/routes/channels/message_delete.rs index f47c6359..67b88dc8 100644 --- a/src/routes/channels/message_delete.rs +++ b/src/routes/channels/message_delete.rs @@ -12,7 +12,7 @@ pub async fn req(user: User, target: Ref, msg: Ref) -> Result<()> { Err(Error::LabelMe)? } - let message = msg.fetch_message().await?; + let message = msg.fetch_message(&channel).await?; if message.author != user.id && !perm.get_manage_messages() { match channel { Channel::SavedMessages { .. } => unreachable!(), diff --git a/src/routes/channels/message_edit.rs b/src/routes/channels/message_edit.rs index 10bed645..5f170cd5 100644 --- a/src/routes/channels/message_edit.rs +++ b/src/routes/channels/message_edit.rs @@ -25,7 +25,7 @@ pub async fn req(user: User, target: Ref, msg: Ref, edit: Json) -> Result< Err(Error::LabelMe)? } - let message = msg.fetch_message().await?; + let message = msg.fetch_message(&channel).await?; if message.author != user.id { Err(Error::CannotEditMessage)? } diff --git a/src/routes/channels/message_fetch.rs b/src/routes/channels/message_fetch.rs index 887a68a2..7b4ff933 100644 --- a/src/routes/channels/message_fetch.rs +++ b/src/routes/channels/message_fetch.rs @@ -12,6 +12,6 @@ pub async fn req(user: User, target: Ref, msg: Ref) -> Result { Err(Error::LabelMe)? } - let message = msg.fetch_message().await?; + let message = msg.fetch_message(&channel).await?; Ok(json!(message)) }