From 23ec914033d032a07cb4f07633dcac4f8624e676 Mon Sep 17 00:00:00 2001 From: Paul Makles Date: Wed, 23 Feb 2022 13:30:01 +0000 Subject: [PATCH] feat: implement new permissions hierarchy --- src/routes/channels/permissions_set.rs | 4 +- .../channels/permissions_set_default.rs | 58 +++++++++++-------- src/routes/servers/permissions_set.rs | 21 ++----- src/routes/servers/permissions_set_default.rs | 13 +---- src/routes/servers/roles_create.rs | 1 - src/routes/servers/server_create.rs | 4 +- 6 files changed, 46 insertions(+), 55 deletions(-) diff --git a/src/routes/channels/permissions_set.rs b/src/routes/channels/permissions_set.rs index c9a34808..999f1eeb 100644 --- a/src/routes/channels/permissions_set.rs +++ b/src/routes/channels/permissions_set.rs @@ -3,12 +3,12 @@ use serde::{Deserialize, Serialize}; use revolt_quark::{ models::{Channel, User}, - perms, Db, Permission, Ref, Result, + perms, Db, OverrideField, Permission, Ref, Result, }; #[derive(Serialize, Deserialize)] pub struct Data { - permissions: u32, + permissions: OverrideField, } #[put("//permissions/", data = "", rank = 2)] diff --git a/src/routes/channels/permissions_set_default.rs b/src/routes/channels/permissions_set_default.rs index bf15befa..42cd0830 100644 --- a/src/routes/channels/permissions_set_default.rs +++ b/src/routes/channels/permissions_set_default.rs @@ -3,16 +3,20 @@ use serde::{Deserialize, Serialize}; use revolt_quark::{ models::{channel::PartialChannel, Channel, User}, - perms, Db, Error, Permission, Ref, Result, + perms, Db, Error, Override, Permission, Ref, Result, }; #[derive(Serialize, Deserialize)] -pub struct Data { - permissions: u32, +#[serde(untagged)] +pub enum Data { + Value { permissions: u64 }, + Field { permissions: Override }, } #[put("//permissions/default", data = "", rank = 1)] pub async fn req(db: &Db, user: User, target: Ref, data: Json) -> Result> { + let data = data.into_inner(); + let mut channel = target.as_channel(db).await?; perms(&user) .channel(&channel) @@ -21,30 +25,38 @@ pub async fn req(db: &Db, user: User, target: Ref, data: Json) -> Result { - channel - .update( - db, - PartialChannel { - permissions: Some(data.permissions as i32), - ..Default::default() - }, - vec![], - ) - .await?; + if let Data::Value { permissions } = data { + channel + .update( + db, + PartialChannel { + permissions: Some(permissions as i64), + ..Default::default() + }, + vec![], + ) + .await?; + } else { + return Err(Error::InvalidOperation); + } } Channel::TextChannel { .. } | Channel::VoiceChannel { .. } => { // ! FIXME_PERMISSIONS - channel - .update( - db, - PartialChannel { - default_permissions: Some(data.permissions as i32), - ..Default::default() - }, - vec![], - ) - .await?; + if let Data::Field { permissions } = data { + channel + .update( + db, + PartialChannel { + default_permissions: Some(permissions.into()), + ..Default::default() + }, + vec![], + ) + .await?; + } else { + return Err(Error::InvalidOperation); + } } _ => return Err(Error::InvalidOperation), } diff --git a/src/routes/servers/permissions_set.rs b/src/routes/servers/permissions_set.rs index d32a5206..f83d0163 100644 --- a/src/routes/servers/permissions_set.rs +++ b/src/routes/servers/permissions_set.rs @@ -3,18 +3,12 @@ use serde::{Deserialize, Serialize}; use revolt_quark::{ models::{Server, User}, - perms, Db, Permission, Ref, Result, + perms, Db, Override, Permission, Ref, Result, }; -#[derive(Serialize, Deserialize)] -pub struct Values { - server: u32, - channel: u32, -} - #[derive(Serialize, Deserialize)] pub struct Data { - permissions: Values, + permissions: Override, } #[put("//permissions/", data = "", rank = 2)] @@ -25,6 +19,8 @@ pub async fn req( role_id: String, data: Json, ) -> Result> { + let data = data.into_inner(); + let mut server = target.as_server(db).await?; perms(&user) .server(&server) @@ -34,14 +30,7 @@ pub async fn req( // ! FIXME_PERMISSIONS server - .set_role_permission( - db, - &role_id, - &( - data.permissions.server as i32, - data.permissions.channel as i32, - ), - ) + .set_role_permission(db, &role_id, data.permissions.into()) .await?; Ok(Json(server)) diff --git a/src/routes/servers/permissions_set_default.rs b/src/routes/servers/permissions_set_default.rs index 8af256d1..ce09abaa 100644 --- a/src/routes/servers/permissions_set_default.rs +++ b/src/routes/servers/permissions_set_default.rs @@ -6,15 +6,9 @@ use revolt_quark::{ perms, Db, Permission, Ref, Result, }; -#[derive(Serialize, Deserialize)] -pub struct Values { - server: u32, - channel: u32, -} - #[derive(Serialize, Deserialize)] pub struct Data { - permissions: Values, + permissions: u64, } #[put("//permissions/default", data = "", rank = 1)] @@ -33,10 +27,7 @@ pub async fn req(db: &Db, user: User, target: Ref, data: Json) -> Result) -> Result) -> Result> description, channels: vec![channel_id], nsfw: nsfw.unwrap_or(false), - default_permissions: (0_i32, 0_i32), + default_permissions: *DEFAULT_PERMISSION_SERVER as i64, ..Default::default() };