diff --git a/Cargo.lock b/Cargo.lock index 9c35836e..345311dd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2163,7 +2163,7 @@ dependencies = [ [[package]] name = "optional_struct" version = "0.2.0" -source = "git+https://github.com/insertish/OptionalStruct?rev=2011de17db6ecb210fddabe3d79ade865efaf4ee#2011de17db6ecb210fddabe3d79ade865efaf4ee" +source = "git+https://github.com/insertish/OptionalStruct?rev=b57e8e8e77db6e1a7f68c715d0d1760cb64feb0c#b57e8e8e77db6e1a7f68c715d0d1760cb64feb0c" dependencies = [ "quote 0.3.15", "syn 0.11.11", diff --git a/src/routes/bots/invite.rs b/src/routes/bots/invite.rs index dab79d12..77e12c57 100644 --- a/src/routes/bots/invite.rs +++ b/src/routes/bots/invite.rs @@ -1,6 +1,6 @@ use revolt_quark::{ models::{server_member::MemberCompositeKey, Channel, Member, User}, - perms, ChannelPermission, Db, EmptyResponse, Error, Ref, Result, ServerPermission, + perms, Db, EmptyResponse, Error, Permission, Ref, Result, }; use rocket::serde::json::Json; @@ -34,13 +34,11 @@ pub async fn invite_bot( let server = db.fetch_server(&server).await?; if !perms(&user) .server(&server) - .calc_server(db) + .calc(db) .await - .get_manage_server() + .can_manage_server() { - return Err(Error::MissingPermission { - permission: ServerPermission::ManageServer as i32, - }); + return Error::from_permission(Permission::ManageServer); } let member = Member { @@ -57,13 +55,11 @@ pub async fn invite_bot( let channel = db.fetch_channel(&group).await?; if !perms(&user) .channel(&channel) - .calc_channel(db) + .calc(db) .await - .get_invite_others() + .can_invite_others() { - return Err(Error::MissingPermission { - permission: ChannelPermission::InviteOthers as i32, - }); + return Error::from_permission(Permission::InviteOthers); } if let Channel::Group { id, .. } = channel { diff --git a/src/routes/channels/channel_ack.rs b/src/routes/channels/channel_ack.rs index 138813af..9386f8d1 100644 --- a/src/routes/channels/channel_ack.rs +++ b/src/routes/channels/channel_ack.rs @@ -5,9 +5,9 @@ pub async fn req(db: &Db, user: User, target: Ref, message: Ref) -> Result")] pub async fn req(db: &Db, user: User, target: Ref) -> Result { let channel = target.as_channel(db).await?; - let perm = perms(&user).channel(&channel).calc_channel(db).await; + let perm = perms(&user).channel(&channel).calc(db).await; - if !perm.get_view() { + if !perm.can_view_channel() { return Err(Error::NotFound); } @@ -30,12 +30,10 @@ pub async fn req(db: &Db, user: User, target: Ref) -> Result { .await .map(|_| EmptyResponse), Channel::TextChannel { .. } | Channel::VoiceChannel { .. } => { - if perm.get_manage_channel() { + if perm.can_manage_channel() { channel.delete(db).await.map(|_| EmptyResponse) } else { - Err(Error::MissingPermission { - permission: ChannelPermission::ManageChannel as i32, - }) + Error::from_permission(Permission::ManageChannel) } } } diff --git a/src/routes/channels/channel_edit.rs b/src/routes/channels/channel_edit.rs index 922ba287..866cd2e6 100644 --- a/src/routes/channels/channel_edit.rs +++ b/src/routes/channels/channel_edit.rs @@ -3,7 +3,7 @@ use revolt_quark::{ channel::{Channel, FieldsChannel, PartialChannel}, File, User, }, - perms, ChannelPermission, Database, Error, Ref, Result, + perms, Database, Error, Permission, Ref, Result, }; use rocket::{serde::json::Json, State}; @@ -40,13 +40,11 @@ pub async fn req( let mut channel = target.as_channel(db).await?; if !perms(&user) .channel(&channel) - .calc_channel(db) + .calc(db) .await - .get_manage_channel() + .can_manage_channel() { - return Err(Error::MissingPermission { - permission: ChannelPermission::ManageChannel as i32, - }); + return Error::from_permission(Permission::ManageChannel); } if data.name.is_none() diff --git a/src/routes/channels/channel_fetch.rs b/src/routes/channels/channel_fetch.rs index bce16ccd..34135abb 100644 --- a/src/routes/channels/channel_fetch.rs +++ b/src/routes/channels/channel_fetch.rs @@ -1,6 +1,6 @@ use revolt_quark::{ models::{Channel, User}, - perms, ChannelPermission, Database, Error, Ref, Result, + perms, Database, Error, Permission, Ref, Result, }; use rocket::{serde::json::Json, State}; @@ -11,14 +11,12 @@ pub async fn req(db: &State, user: User, target: Ref) -> Result/recipients/")] @@ -8,13 +8,11 @@ pub async fn req(db: &Db, user: User, target: Ref, member: Ref) -> Result/recipients/")] @@ -12,7 +12,7 @@ pub async fn req(db: &Db, user: User, target: Ref, member: Ref) -> Result { if &user.id != owner { - return Err(Error::MissingPermission { permission: 0 }); + return Error::from_permission(Permission::ManageChannel); } let member = member.as_user(db).await?; diff --git a/src/routes/channels/invite_create.rs b/src/routes/channels/invite_create.rs index 179d96a0..308e06f8 100644 --- a/src/routes/channels/invite_create.rs +++ b/src/routes/channels/invite_create.rs @@ -1,6 +1,6 @@ use revolt_quark::{ models::{Invite, User}, - perms, ChannelPermission, Db, Error, Ref, Result, + perms, Db, Error, Permission, Ref, Result, }; use rocket::serde::json::Json; @@ -11,13 +11,11 @@ pub async fn req(db: &Db, user: User, target: Ref) -> Result> { if !perms(&user) .channel(&channel) - .calc_channel(db) + .calc(db) .await - .get_invite_others() + .can_invite_others() { - return Err(Error::MissingPermission { - permission: ChannelPermission::InviteOthers as i32, - }); + return Error::from_permission(Permission::InviteOthers); } Invite::create(db, &user, &channel).await.map(Json) diff --git a/src/routes/channels/members_fetch.rs b/src/routes/channels/members_fetch.rs index c21f9985..cb9c684d 100644 --- a/src/routes/channels/members_fetch.rs +++ b/src/routes/channels/members_fetch.rs @@ -10,9 +10,9 @@ pub async fn req(db: &Db, user: User, target: Ref) -> Result>> { let channel = target.as_channel(db).await?; if !perms(&user) .channel(&channel) - .calc_channel(db) + .calc(db) .await - .get_view() + .can_view_channel() { return Err(Error::NotFound); } diff --git a/src/routes/channels/message_delete.rs b/src/routes/channels/message_delete.rs index f77dc8bd..95799497 100644 --- a/src/routes/channels/message_delete.rs +++ b/src/routes/channels/message_delete.rs @@ -1,4 +1,4 @@ -use revolt_quark::{models::User, perms, ChannelPermission, Db, EmptyResponse, Error, Ref, Result}; +use revolt_quark::{models::User, perms, Db, EmptyResponse, Error, Permission, Ref, Result}; #[delete("//messages/")] pub async fn req(db: &Db, user: User, target: Ref, msg: Ref) -> Result { @@ -11,14 +11,12 @@ pub async fn req(db: &Db, user: User, target: Ref, msg: Ref) -> Result Result) -> Result) -> Result { + // ! FIXME_PERMISSIONS + channel .update( db, diff --git a/src/routes/invites/invite_delete.rs b/src/routes/invites/invite_delete.rs index 283f4971..2d8b567b 100644 --- a/src/routes/invites/invite_delete.rs +++ b/src/routes/invites/invite_delete.rs @@ -1,6 +1,6 @@ use revolt_quark::{ models::{Invite, User}, - perms, Db, EmptyResponse, Error, Ref, Result, ServerPermission, + perms, Db, EmptyResponse, Error, Permission, Ref, Result, }; #[delete("/")] @@ -15,13 +15,11 @@ pub async fn req(db: &Db, user: User, target: Ref) -> Result { let server = db.fetch_server(&server).await?; if !perms(&user) .server(&server) - .calc_server(db) + .calc(db) .await - .get_manage_server() + .can_manage_server() { - return Err(Error::MissingPermission { - permission: ServerPermission::ManageServer as i32, - }); + return Error::from_permission(Permission::ManageServer); } db.delete_invite(&code).await diff --git a/src/routes/servers/ban_create.rs b/src/routes/servers/ban_create.rs index 1ce84650..355df6be 100644 --- a/src/routes/servers/ban_create.rs +++ b/src/routes/servers/ban_create.rs @@ -1,6 +1,6 @@ use revolt_quark::{ models::{ServerBan, User}, - perms, Db, Error, Ref, Result, ServerPermission, + perms, Db, Error, Permission, Ref, Result, }; use rocket::serde::json::Json; @@ -28,17 +28,15 @@ pub async fn req( let server = server.as_server(db).await?; if !perms(&user) .server(&server) - .calc_server(db) + .calc(db) .await - .get_ban_members() + .can_ban_members() { - return Err(Error::MissingPermission { - permission: ServerPermission::BanMembers as i32, - }); + return Error::from_permission(Permission::BanMembers); } let member = target.as_member(db, &server.id).await?; - // ! FIXME: calculate permission against member + // ! FIXME_PERMISSIONS let ban = ServerBan { id: member.id, diff --git a/src/routes/servers/ban_list.rs b/src/routes/servers/ban_list.rs index baf73934..ae461bd1 100644 --- a/src/routes/servers/ban_list.rs +++ b/src/routes/servers/ban_list.rs @@ -1,5 +1,5 @@ use revolt_quark::models::{File, ServerBan, User}; -use revolt_quark::{perms, Db, Error, Ref, Result, ServerPermission}; +use revolt_quark::{perms, Db, Error, Permission, Ref, Result}; use rocket::serde::json::Json; use serde::{Deserialize, Serialize}; @@ -16,13 +16,11 @@ pub async fn req(db: &Db, user: User, target: Ref) -> Result let server = target.as_server(db).await?; if !perms(&user) .server(&server) - .calc_server(db) + .calc(db) .await - .get_ban_members() + .can_ban_members() { - return Err(Error::MissingPermission { - permission: ServerPermission::BanMembers as i32, - }); + return Error::from_permission(Permission::BanMembers); } db.fetch_bans(&server.id).await.map(Json) diff --git a/src/routes/servers/ban_remove.rs b/src/routes/servers/ban_remove.rs index 0ea3addb..378d1fc5 100644 --- a/src/routes/servers/ban_remove.rs +++ b/src/routes/servers/ban_remove.rs @@ -1,17 +1,15 @@ -use revolt_quark::{models::User, perms, Db, EmptyResponse, Error, Ref, Result, ServerPermission}; +use revolt_quark::{models::User, perms, Db, EmptyResponse, Error, Permission, Ref, Result}; #[delete("//bans/")] pub async fn req(db: &Db, user: User, server: Ref, target: Ref) -> Result { let server = server.as_server(db).await?; if !perms(&user) .server(&server) - .calc_server(db) + .calc(db) .await - .get_ban_members() + .can_ban_members() { - return Err(Error::MissingPermission { - permission: ServerPermission::BanMembers as i32, - }); + return Error::from_permission(Permission::BanMembers); } let ban = target.as_ban(db, &server.id).await?; diff --git a/src/routes/servers/channel_create.rs b/src/routes/servers/channel_create.rs index 1c470951..cfec394d 100644 --- a/src/routes/servers/channel_create.rs +++ b/src/routes/servers/channel_create.rs @@ -2,7 +2,7 @@ use std::collections::HashMap; use revolt_quark::{ models::{server::PartialServer, Channel, User}, - perms, Db, Error, Ref, Result, ServerPermission, + perms, Db, Error, Permission, Ref, Result, }; use rocket::serde::json::Json; @@ -43,13 +43,11 @@ pub async fn req(db: &Db, user: User, target: Ref, info: Json) -> Result Result>> let server = target.as_server(db).await?; if !perms(&user) .server(&server) - .calc_server(db) + .calc(db) .await - .get_manage_server() + .can_manage_server() { - return Err(Error::MissingPermission { - permission: ServerPermission::ManageServer as i32, - }); + return Error::from_permission(Permission::ManageServer); } db.fetch_invites_for_server(&server.id).await.map(Json) diff --git a/src/routes/servers/member_edit.rs b/src/routes/servers/member_edit.rs index f1850ae1..60f8ee34 100644 --- a/src/routes/servers/member_edit.rs +++ b/src/routes/servers/member_edit.rs @@ -33,8 +33,8 @@ pub async fn req( .map_err(|error| Error::FailedValidation { error })?; let server = server.as_server(db).await?; - let permissions = perms(&user).server(&server).calc_server(db).await; - if !permissions.get_view() { + let permissions = perms(&user).server(&server).calc(db).await; + if !permissions.can_view_channel() { return Err(Error::NotFound); } diff --git a/src/routes/servers/member_fetch.rs b/src/routes/servers/member_fetch.rs index f9212cc4..22220e41 100644 --- a/src/routes/servers/member_fetch.rs +++ b/src/routes/servers/member_fetch.rs @@ -9,9 +9,9 @@ pub async fn req(db: &Db, user: User, target: Ref, member: Ref) -> Result Result { let server = target.as_server(db).await?; if !perms(&user) .server(&server) - .calc_server(db) + .calc(db) .await - .get_view() + .can_view_channel() { return Err(Error::NotFound); } diff --git a/src/routes/servers/member_remove.rs b/src/routes/servers/member_remove.rs index ccd2c923..8a37da36 100644 --- a/src/routes/servers/member_remove.rs +++ b/src/routes/servers/member_remove.rs @@ -1,21 +1,19 @@ -use revolt_quark::{models::User, perms, Db, EmptyResponse, Error, Ref, Result, ServerPermission}; +use revolt_quark::{models::User, perms, Db, EmptyResponse, Error, Permission, Ref, Result}; #[delete("//members/")] pub async fn req(db: &Db, user: User, target: Ref, member: Ref) -> Result { let server = target.as_server(db).await?; if !perms(&user) .server(&server) - .calc_server(db) + .calc(db) .await - .get_kick_members() + .can_kick_members() { - return Err(Error::MissingPermission { - permission: ServerPermission::KickMembers as i32, - }); + return Error::from_permission(Permission::KickMembers); } let member = member.as_member(db, &server.id).await?; - // ! FIXME: calculate permission against member + // ! FIXME_PERMISSIONS member.delete(db).await.map(|_| EmptyResponse) } diff --git a/src/routes/servers/permissions_set.rs b/src/routes/servers/permissions_set.rs index 65a863e5..4b4559ba 100644 --- a/src/routes/servers/permissions_set.rs +++ b/src/routes/servers/permissions_set.rs @@ -28,9 +28,9 @@ pub async fn req( let mut server = target.as_server(db).await?; if !perms(&user) .server(&server) - .calc_server(db) + .calc(db) .await - .get_manage_roles() + .can_manage_permissions() { return Err(Error::NotFound); } diff --git a/src/routes/servers/permissions_set_default.rs b/src/routes/servers/permissions_set_default.rs index 526f6000..a4403d58 100644 --- a/src/routes/servers/permissions_set_default.rs +++ b/src/routes/servers/permissions_set_default.rs @@ -24,9 +24,9 @@ pub async fn req(db: &Db, user: User, target: Ref, data: Json) -> Result) -> Result Result Result { let server = target.as_server(db).await?; if !perms(&user) .server(&server) - .calc_server(db) + .calc(db) .await - .get_view() + .can_view_channel() { return Err(Error::NotFound); } diff --git a/src/routes/servers/server_create.rs b/src/routes/servers/server_create.rs index 06839c53..1374b648 100644 --- a/src/routes/servers/server_create.rs +++ b/src/routes/servers/server_create.rs @@ -2,7 +2,7 @@ use std::collections::HashMap; use revolt_quark::{ models::{server_member::MemberCompositeKey, Channel, Member, Server, User}, - Db, Error, Result, DEFAULT_PERMISSION_CHANNEL_SERVER, DEFAULT_SERVER_PERMISSION, + Db, Error, Result, }; use rocket::serde::json::Json; @@ -66,10 +66,7 @@ pub async fn req(db: &Db, user: User, info: Json) -> Result> description, channels: vec![channel_id], nsfw: nsfw.unwrap_or(false), - default_permissions: ( - *DEFAULT_SERVER_PERMISSION as i32, - *DEFAULT_PERMISSION_CHANNEL_SERVER as i32, - ), + default_permissions: (0_i32, 0_i32), ..Default::default() }; diff --git a/src/routes/servers/server_edit.rs b/src/routes/servers/server_edit.rs index 1ba78886..69b166c7 100644 --- a/src/routes/servers/server_edit.rs +++ b/src/routes/servers/server_edit.rs @@ -3,7 +3,7 @@ use revolt_quark::{ server::{Category, FieldsServer, PartialServer, SystemMessageChannels}, File, Server, User, }, - perms, Db, Error, Ref, Result, ServerPermission, + perms, Db, Error, Permission, Ref, Result, }; use rocket::serde::json::Json; @@ -38,8 +38,8 @@ pub async fn req(db: &Db, user: User, target: Ref, data: Json) -> Result) -> Result Result> { let server = target.as_server(db).await?; if !perms(&user) .server(&server) - .calc_server(db) + .calc(db) .await - .get_view() + .can_view_channel() { return Err(Error::NotFound); } diff --git a/src/routes/users/open_dm.rs b/src/routes/users/open_dm.rs index 2277ff56..dae9a7a9 100644 --- a/src/routes/users/open_dm.rs +++ b/src/routes/users/open_dm.rs @@ -30,6 +30,6 @@ pub async fn req(db: &State, user: User, target: Ref) -> Result