From 09e918d8e03b323048d628ff7e2e39176a126272 Mon Sep 17 00:00:00 2001 From: Paul Makles Date: Sat, 7 May 2022 15:20:42 +0100 Subject: [PATCH] feat: clean up bot restrictions --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/routes/channels/channel_ack.rs | 6 +++++- src/routes/channels/group_add_member.rs | 4 ++++ src/routes/channels/group_create.rs | 4 ++++ src/routes/channels/group_remove_member.rs | 4 ++++ src/routes/channels/invite_create.rs | 6 +++++- src/routes/channels/members_fetch.rs | 4 ++++ src/routes/channels/message_search.rs | 4 ++++ src/routes/servers/invites_fetch.rs | 6 +++++- src/routes/servers/server_ack.rs | 6 +++++- src/routes/users/add_friend.rs | 7 ++++++- src/routes/users/find_mutual.rs | 4 ++++ src/routes/users/remove_friend.rs | 7 ++++++- src/util/ratelimiter.rs | 2 +- 15 files changed, 59 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0b64dc0f..4c9eb123 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2999,7 +2999,7 @@ dependencies = [ [[package]] name = "revolt-quark" version = "0.1.0" -source = "git+https://github.com/revoltchat/quark?rev=e70a32d0a0a7e401c9c493ab1e557924e28ddf8a#e70a32d0a0a7e401c9c493ab1e557924e28ddf8a" +source = "git+https://github.com/revoltchat/quark?rev=e5e8cae091eb7220cd37837494ece966e28cbe81#e5e8cae091eb7220cd37837494ece966e28cbe81" dependencies = [ "async-recursion", "async-std", diff --git a/Cargo.toml b/Cargo.toml index e7b10e1d..e3ea538c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -64,5 +64,5 @@ schemars = "0.8.8" rocket_okapi = { git = "https://github.com/insertish/okapi", rev = "dcf0df115596ee07a587a7a543cddf3d7944645b", features = [ "swagger" ] } # quark -revolt-quark = { git = "https://github.com/revoltchat/quark", rev = "e70a32d0a0a7e401c9c493ab1e557924e28ddf8a" } +revolt-quark = { git = "https://github.com/revoltchat/quark", rev = "e5e8cae091eb7220cd37837494ece966e28cbe81" } # revolt-quark = { path = "../quark" } diff --git a/src/routes/channels/channel_ack.rs b/src/routes/channels/channel_ack.rs index 8c55ee2b..19956548 100644 --- a/src/routes/channels/channel_ack.rs +++ b/src/routes/channels/channel_ack.rs @@ -1,4 +1,4 @@ -use revolt_quark::{models::User, perms, Db, EmptyResponse, Permission, Ref, Result}; +use revolt_quark::{models::User, perms, Db, EmptyResponse, Error, Permission, Ref, Result}; /// # Acknowledge Message /// @@ -6,6 +6,10 @@ use revolt_quark::{models::User, perms, Db, EmptyResponse, Permission, Ref, Resu #[openapi(tag = "Messaging")] #[put("//ack/")] pub async fn req(db: &Db, user: User, target: Ref, message: Ref) -> Result { + if user.bot.is_some() { + return Err(Error::IsBot); + } + let channel = target.as_channel(db).await?; perms(&user) .channel(&channel) diff --git a/src/routes/channels/group_add_member.rs b/src/routes/channels/group_add_member.rs index f516e34a..a7f8096d 100644 --- a/src/routes/channels/group_add_member.rs +++ b/src/routes/channels/group_add_member.rs @@ -9,6 +9,10 @@ use revolt_quark::{ #[openapi(tag = "Groups")] #[put("//recipients/")] pub async fn req(db: &Db, user: User, target: Ref, member: Ref) -> Result { + if user.bot.is_some() { + return Err(Error::IsBot); + } + let mut channel = target.as_channel(db).await?; perms(&user) .channel(&channel) diff --git a/src/routes/channels/group_create.rs b/src/routes/channels/group_create.rs index 19e166aa..b9deeec9 100644 --- a/src/routes/channels/group_create.rs +++ b/src/routes/channels/group_create.rs @@ -37,6 +37,10 @@ pub struct DataCreateGroup { #[openapi(tag = "Groups")] #[post("/create", data = "")] pub async fn req(db: &Db, user: User, info: Json) -> Result> { + if user.bot.is_some() { + return Err(Error::IsBot); + } + let info = info.into_inner(); info.validate() .map_err(|error| Error::FailedValidation { error })?; diff --git a/src/routes/channels/group_remove_member.rs b/src/routes/channels/group_remove_member.rs index c3a67b14..d342a219 100644 --- a/src/routes/channels/group_remove_member.rs +++ b/src/routes/channels/group_remove_member.rs @@ -9,6 +9,10 @@ use revolt_quark::{ #[openapi(tag = "Groups")] #[delete("//recipients/")] pub async fn req(db: &Db, user: User, target: Ref, member: Ref) -> Result { + if user.bot.is_some() { + return Err(Error::IsBot); + } + let channel = target.as_channel(db).await?; match &channel { diff --git a/src/routes/channels/invite_create.rs b/src/routes/channels/invite_create.rs index c27bf4de..2bf4700a 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, Db, Permission, Ref, Result, + perms, Db, Error, Permission, Ref, Result, }; use rocket::serde::json::Json; @@ -13,6 +13,10 @@ use rocket::serde::json::Json; #[openapi(tag = "Channel Invites")] #[post("//invites")] pub async fn req(db: &Db, user: User, target: Ref) -> Result> { + if user.bot.is_some() { + return Err(Error::IsBot); + } + let channel = target.as_channel(db).await?; perms(&user) .channel(&channel) diff --git a/src/routes/channels/members_fetch.rs b/src/routes/channels/members_fetch.rs index 51510bd2..2580d69b 100644 --- a/src/routes/channels/members_fetch.rs +++ b/src/routes/channels/members_fetch.rs @@ -11,6 +11,10 @@ use rocket::serde::json::Json; #[openapi(tag = "Groups")] #[get("//members")] pub async fn req(db: &Db, user: User, target: Ref) -> Result>> { + if user.bot.is_some() { + return Err(Error::IsBot); + } + let channel = target.as_channel(db).await?; perms(&user) .channel(&channel) diff --git a/src/routes/channels/message_search.rs b/src/routes/channels/message_search.rs index 81c1d023..4b68a6f8 100644 --- a/src/routes/channels/message_search.rs +++ b/src/routes/channels/message_search.rs @@ -48,6 +48,10 @@ pub async fn req( target: Ref, options: Json, ) -> Result> { + if user.bot.is_some() { + return Err(Error::IsBot); + } + let options = options.into_inner(); options .validate() diff --git a/src/routes/servers/invites_fetch.rs b/src/routes/servers/invites_fetch.rs index b5a77bf9..d7f7de4f 100644 --- a/src/routes/servers/invites_fetch.rs +++ b/src/routes/servers/invites_fetch.rs @@ -1,6 +1,6 @@ use revolt_quark::{ models::{Invite, User}, - perms, Db, Permission, Ref, Result, + perms, Db, Error, Permission, Ref, Result, }; use rocket::serde::json::Json; @@ -11,6 +11,10 @@ use rocket::serde::json::Json; #[openapi(tag = "Server Members")] #[get("//invites")] pub async fn req(db: &Db, user: User, target: Ref) -> Result>> { + if user.bot.is_some() { + return Err(Error::IsBot); + } + let server = target.as_server(db).await?; perms(&user) .server(&server) diff --git a/src/routes/servers/server_ack.rs b/src/routes/servers/server_ack.rs index dc30134a..2412bb6a 100644 --- a/src/routes/servers/server_ack.rs +++ b/src/routes/servers/server_ack.rs @@ -1,4 +1,4 @@ -use revolt_quark::{models::User, perms, Db, EmptyResponse, Ref, Result}; +use revolt_quark::{models::User, perms, Db, EmptyResponse, Error, Ref, Result}; /// # Mark Server As Read /// @@ -6,6 +6,10 @@ use revolt_quark::{models::User, perms, Db, EmptyResponse, Ref, Result}; #[openapi(tag = "Server Information")] #[put("//ack")] pub async fn req(db: &Db, user: User, target: Ref) -> Result { + if user.bot.is_some() { + return Err(Error::IsBot); + } + let server = target.as_server(db).await?; perms(&user).server(&server).calc(db).await?; diff --git a/src/routes/users/add_friend.rs b/src/routes/users/add_friend.rs index 2b66eca1..4cbcb6c7 100644 --- a/src/routes/users/add_friend.rs +++ b/src/routes/users/add_friend.rs @@ -1,5 +1,5 @@ use revolt_quark::models::User; -use revolt_quark::{Database, Result}; +use revolt_quark::{Database, Error, Result}; use rocket::serde::json::Json; use rocket::State; @@ -11,6 +11,11 @@ use rocket::State; #[put("//friend")] pub async fn req(db: &State, user: User, username: String) -> Result> { let mut target = db.fetch_user_by_username(&username).await?; + + if user.bot.is_some() || target.bot.is_some() { + return Err(Error::IsBot); + } + user.add_friend(db, &mut target).await?; Ok(Json(target.with_auto_perspective(db, &user).await)) } diff --git a/src/routes/users/find_mutual.rs b/src/routes/users/find_mutual.rs index 7e5bfaac..0d2bac7c 100644 --- a/src/routes/users/find_mutual.rs +++ b/src/routes/users/find_mutual.rs @@ -24,6 +24,10 @@ pub async fn req(db: &State, user: User, target: Ref) -> Result/friend")] pub async fn req(db: &State, user: User, target: String) -> Result> { let mut target = db.fetch_user(&target).await?; + + if user.bot.is_some() || target.bot.is_some() { + return Err(Error::IsBot); + } + user.remove_friend(db, &mut target).await?; Ok(Json(target.with_auto_perspective(db, &user).await)) } diff --git a/src/util/ratelimiter.rs b/src/util/ratelimiter.rs index 4b9852d9..85b45778 100644 --- a/src/util/ratelimiter.rs +++ b/src/util/ratelimiter.rs @@ -136,7 +136,7 @@ fn resolve_bucket_limit(bucket: &str) -> u8 { "messaging" => 10, "channels" => 15, "servers" => 5, - "auth" => 3, + "auth" => 15, "auth_delete" => 255, "swagger" => 100, _ => 20,