Skip to content
Snippets Groups Projects
Commit 5ab329df authored by insert's avatar insert
Browse files

Prevent fetching messages from other channels. Change channel tag to channel_type.

parent 3a63d502
No related merge requests found
Pipeline #490 failed with stage
in 49 seconds
...@@ -6,7 +6,7 @@ use rocket_contrib::json::JsonValue; ...@@ -6,7 +6,7 @@ use rocket_contrib::json::JsonValue;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone)] #[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(tag = "type")] #[serde(tag = "channel_type")]
pub enum Channel { pub enum Channel {
SavedMessages { SavedMessages {
#[serde(rename = "_id")] #[serde(rename = "_id")]
......
...@@ -47,8 +47,13 @@ impl Ref { ...@@ -47,8 +47,13 @@ impl Ref {
self.fetch("channels").await self.fetch("channels").await
} }
pub async fn fetch_message(&self) -> Result<Message> { pub async fn fetch_message(&self, channel: &Channel) -> Result<Message> {
self.fetch("messages").await let message: Message = self.fetch("messages").await?;
if &message.channel != channel.id() {
Err(Error::InvalidOperation)
} else {
Ok(message)
}
} }
} }
......
...@@ -12,7 +12,7 @@ pub async fn req(user: User, target: Ref, msg: Ref) -> Result<()> { ...@@ -12,7 +12,7 @@ pub async fn req(user: User, target: Ref, msg: Ref) -> Result<()> {
Err(Error::LabelMe)? 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() { if message.author != user.id && !perm.get_manage_messages() {
match channel { match channel {
Channel::SavedMessages { .. } => unreachable!(), Channel::SavedMessages { .. } => unreachable!(),
......
...@@ -25,7 +25,7 @@ pub async fn req(user: User, target: Ref, msg: Ref, edit: Json<Data>) -> Result< ...@@ -25,7 +25,7 @@ pub async fn req(user: User, target: Ref, msg: Ref, edit: Json<Data>) -> Result<
Err(Error::LabelMe)? Err(Error::LabelMe)?
} }
let message = msg.fetch_message().await?; let message = msg.fetch_message(&channel).await?;
if message.author != user.id { if message.author != user.id {
Err(Error::CannotEditMessage)? Err(Error::CannotEditMessage)?
} }
......
...@@ -12,6 +12,6 @@ pub async fn req(user: User, target: Ref, msg: Ref) -> Result<JsonValue> { ...@@ -12,6 +12,6 @@ pub async fn req(user: User, target: Ref, msg: Ref) -> Result<JsonValue> {
Err(Error::LabelMe)? Err(Error::LabelMe)?
} }
let message = msg.fetch_message().await?; let message = msg.fetch_message(&channel).await?;
Ok(json!(message)) Ok(json!(message))
} }
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment