diff --git a/src/database/permissions/channel.rs b/src/database/permissions/channel.rs index e4f27d57ebcd1b39c91f102d930181e972ccfcaa..1ff0770204bd90ff2efce4ae2718d17c2a09799b 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 02d0db842c2500378096c04469a9a5cf9c7f1c95..25b47839cd2954ee9d7eb1ab67b4b319673d00fe 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<JsonValue> { } 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 c00dca4af7725d696ecb1157da3a637fd94308b3..922245b8c94f806d8f235963657fe4a0c6229f10 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,