diff --git a/src/database/permissions/server.rs b/src/database/permissions/server.rs index 8c4b6f16b8a3fd15cff2dce9af1b119cd4935bcc..8ca108643b2e7a53948dd0fa2cadef5ad10ed661 100644 --- a/src/database/permissions/server.rs +++ b/src/database/permissions/server.rs @@ -8,18 +8,18 @@ use std::ops; #[derive(Debug, PartialEq, Eq, TryFromPrimitive, Copy, Clone)] #[repr(u32)] pub enum ServerPermission { - View = 0b00000000000000000000000000000001, // 1 - ManageMembers = 0b00000000000000000000000000000010, // 2 - ManageChannels = 0b00000000000000000000000000000100, // 4 - ManageServer = 0b00000000000000000000000000001000, // 8 - KickMembers = 0b00000000000000000000000000010000, // 16 - BanMembers = 0b00000000000000000000000000100000, // 32 + View = 0b00000000000000000000000000000001, // 1 + ManageMembers = 0b00000000000000000000000000000010, // 2 + ManageChannels = 0b00000000000000000000000000000100, // 4 + ManageServer = 0b00000000000000000000000000001000, // 8 + KickMembers = 0b00000000000000000000000000010000, // 16 + BanMembers = 0b00000000000000000000000000100000, // 32 // 6 bits of space - ChangeNickname = 0b00000000000000000001000000000000, // 4096 + ChangeNickname = 0b00000000000000000001000000000000, // 4096 ManageNicknames = 0b00000000000000000010000000000000, // 8192 - ChangeAvatar = 0b00000000000000000100000000000000, // 16392 - RemoveAvatars = 0b00000000000000001000000000000000, // 32784 - // 16 bits of space + ChangeAvatar = 0b00000000000000000100000000000000, // 16392 + RemoveAvatars = 0b00000000000000001000000000000000, // 32784 + // 16 bits of space } impl_op_ex!(+ |a: &ServerPermission, b: &ServerPermission| -> u32 { *a as u32 | *b as u32 }); diff --git a/src/database/permissions/user.rs b/src/database/permissions/user.rs index b68bf839edfd4de74fe228c8baef5b46af0bb767..bc369276ea3292070d669c56ab3c5a56db023ca9 100644 --- a/src/database/permissions/user.rs +++ b/src/database/permissions/user.rs @@ -30,7 +30,7 @@ impl_op_ex_commutative!(+ |a: &u32, b: &UserPermission| -> u32 { *a | *b as u32 pub fn get_relationship(a: &User, b: &str) -> RelationshipStatus { if a.id == b { - return RelationshipStatus::Friend; + return RelationshipStatus::User; } if let Some(relations) = &a.relations { @@ -55,7 +55,8 @@ impl<'a> PermissionCalculator<'a> { .map(|v| v.to_owned()) .unwrap_or_else(|| get_relationship(&self.perspective, &target)) { - RelationshipStatus::Friend => return Ok(u32::MAX), + RelationshipStatus::Friend | + RelationshipStatus::User => return Ok(u32::MAX), RelationshipStatus::Blocked | RelationshipStatus::BlockedOther => { return Ok(UserPermission::Access as u32) } @@ -64,7 +65,7 @@ impl<'a> PermissionCalculator<'a> { // ! INFO: if we add boolean switch for permission to // ! message people who have mutual, we need to get // ! rid of this return statement. - return Ok(permissions); + // return Ok(permissions); } _ => {} } diff --git a/src/routes/invites/invite_fetch.rs b/src/routes/invites/invite_fetch.rs index 3fbb6077ae080dad1b9f8c2457dcb44f4814d94b..1819baf70e44038f44696227d26097ed2b638d2b 100644 --- a/src/routes/invites/invite_fetch.rs +++ b/src/routes/invites/invite_fetch.rs @@ -8,11 +8,13 @@ use serde::Serialize; #[serde(tag = "type")] pub enum InviteResponse { Server { + server_id: String, server_name: String, #[serde(skip_serializing_if = "Option::is_none")] server_icon: Option<File>, #[serde(skip_serializing_if = "Option::is_none")] server_banner: Option<File>, + channel_id: String, channel_name: String, #[serde(skip_serializing_if = "Option::is_none")] channel_description: Option<String>, @@ -34,6 +36,7 @@ pub async fn req(target: Ref) -> Result<JsonValue> { let creator = Ref::from_unchecked(creator).fetch_user().await?; if let Channel::TextChannel { + id, server, name, description, @@ -43,9 +46,11 @@ pub async fn req(target: Ref) -> Result<JsonValue> { let server = Ref::from_unchecked(server).fetch_server().await?; Ok(json!(InviteResponse::Server { + server_id: server.id, server_name: server.name, server_icon: server.icon, server_banner: server.banner, + channel_id: id, channel_name: name, channel_description: description, user_name: creator.username,