From 812fa2a98fe5f4cf5b81e65aab5aeecb574761bf Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 2 Jun 2021 12:35:01 +0100 Subject: [PATCH] Permissions: Resolve guild, allows ability to delete channels, delete others messages, etc. --- src/database/permissions/channel.rs | 12 +++++++++--- src/routes/channels/join_call.rs | 6 ++++++ src/util/result.rs | 2 ++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/database/permissions/channel.rs b/src/database/permissions/channel.rs index e4f27d57..1ff07702 100644 --- a/src/database/permissions/channel.rs +++ b/src/database/permissions/channel.rs @@ -40,7 +40,7 @@ impl<'a> PermissionCalculator<'a> { match channel { Channel::SavedMessages { user: owner, .. } => { if &self.perspective.id == owner { - Ok(u32::MAX - ChannelPermission::VoiceCall as u32) + Ok(u32::MAX) } else { Ok(0) } @@ -81,8 +81,14 @@ impl<'a> PermissionCalculator<'a> { Ok(0) } } - Channel::TextChannel { .. } => { - Ok(ChannelPermission::View + ChannelPermission::SendMessage) + Channel::TextChannel { server, .. } => { + let server = Server::get(server).await?; + + if self.perspective.id == server.owner { + Ok(u32::MAX) + } else { + Ok(ChannelPermission::View + ChannelPermission::SendMessage) + } } } } diff --git a/src/routes/channels/join_call.rs b/src/routes/channels/join_call.rs index 02d0db84..25b47839 100644 --- a/src/routes/channels/join_call.rs +++ b/src/routes/channels/join_call.rs @@ -17,6 +17,12 @@ pub async fn req(user: User, target: Ref) -> Result { } let target = target.fetch_channel().await?; + match target { + Channel::SavedMessages { .. } + | Channel::TextChannel { .. } => return Err(Error::CannotJoinCall), + _ => {} + } + let perm = permissions::PermissionCalculator::new(&user) .with_channel(&target) .for_channel() diff --git a/src/util/result.rs b/src/util/result.rs index c00dca4a..922245b8 100644 --- a/src/util/result.rs +++ b/src/util/result.rs @@ -27,6 +27,7 @@ pub enum Error { UnknownChannel, UnknownAttachment, CannotEditMessage, + CannotJoinCall, EmptyMessage, CannotRemoveYourself, GroupTooLarge { @@ -77,6 +78,7 @@ impl<'r> Responder<'r, 'static> for Error { Error::UnknownChannel => Status::NotFound, Error::UnknownAttachment => Status::BadRequest, Error::CannotEditMessage => Status::Forbidden, + Error::CannotJoinCall => Status::BadRequest, Error::EmptyMessage => Status::UnprocessableEntity, Error::CannotRemoveYourself => Status::BadRequest, Error::GroupTooLarge { .. } => Status::Forbidden,