From f0d1ab390bea13a6de6494869470eb92a9ee20a8 Mon Sep 17 00:00:00 2001
From: Paul <paulmakles@gmail.com>
Date: Thu, 10 Jun 2021 14:56:53 +0100
Subject: [PATCH] Invites: Include server and channel ID. Permissions: Small
 fix, consider self as User.

---
 src/database/permissions/server.rs | 20 ++++++++++----------
 src/database/permissions/user.rs   |  7 ++++---
 src/routes/invites/invite_fetch.rs |  5 +++++
 3 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/src/database/permissions/server.rs b/src/database/permissions/server.rs
index 8c4b6f1..8ca1086 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 b68bf83..bc36927 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 3fbb607..1819baf 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,
-- 
GitLab