feat: clean up bot restrictions

This commit is contained in:
Paul Makles
2022-05-07 15:20:42 +01:00
parent 97fef56bad
commit 09e918d8e0
15 changed files with 59 additions and 9 deletions

2
Cargo.lock generated
View File

@@ -2999,7 +2999,7 @@ dependencies = [
[[package]] [[package]]
name = "revolt-quark" name = "revolt-quark"
version = "0.1.0" 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 = [ dependencies = [
"async-recursion", "async-recursion",
"async-std", "async-std",

View File

@@ -64,5 +64,5 @@ schemars = "0.8.8"
rocket_okapi = { git = "https://github.com/insertish/okapi", rev = "dcf0df115596ee07a587a7a543cddf3d7944645b", features = [ "swagger" ] } rocket_okapi = { git = "https://github.com/insertish/okapi", rev = "dcf0df115596ee07a587a7a543cddf3d7944645b", features = [ "swagger" ] }
# quark # 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" } # revolt-quark = { path = "../quark" }

View File

@@ -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 /// # Acknowledge Message
/// ///
@@ -6,6 +6,10 @@ use revolt_quark::{models::User, perms, Db, EmptyResponse, Permission, Ref, Resu
#[openapi(tag = "Messaging")] #[openapi(tag = "Messaging")]
#[put("/<target>/ack/<message>")] #[put("/<target>/ack/<message>")]
pub async fn req(db: &Db, user: User, target: Ref, message: Ref) -> Result<EmptyResponse> { pub async fn req(db: &Db, user: User, target: Ref, message: Ref) -> Result<EmptyResponse> {
if user.bot.is_some() {
return Err(Error::IsBot);
}
let channel = target.as_channel(db).await?; let channel = target.as_channel(db).await?;
perms(&user) perms(&user)
.channel(&channel) .channel(&channel)

View File

@@ -9,6 +9,10 @@ use revolt_quark::{
#[openapi(tag = "Groups")] #[openapi(tag = "Groups")]
#[put("/<target>/recipients/<member>")] #[put("/<target>/recipients/<member>")]
pub async fn req(db: &Db, user: User, target: Ref, member: Ref) -> Result<EmptyResponse> { pub async fn req(db: &Db, user: User, target: Ref, member: Ref) -> Result<EmptyResponse> {
if user.bot.is_some() {
return Err(Error::IsBot);
}
let mut channel = target.as_channel(db).await?; let mut channel = target.as_channel(db).await?;
perms(&user) perms(&user)
.channel(&channel) .channel(&channel)

View File

@@ -37,6 +37,10 @@ pub struct DataCreateGroup {
#[openapi(tag = "Groups")] #[openapi(tag = "Groups")]
#[post("/create", data = "<info>")] #[post("/create", data = "<info>")]
pub async fn req(db: &Db, user: User, info: Json<DataCreateGroup>) -> Result<Json<Channel>> { pub async fn req(db: &Db, user: User, info: Json<DataCreateGroup>) -> Result<Json<Channel>> {
if user.bot.is_some() {
return Err(Error::IsBot);
}
let info = info.into_inner(); let info = info.into_inner();
info.validate() info.validate()
.map_err(|error| Error::FailedValidation { error })?; .map_err(|error| Error::FailedValidation { error })?;

View File

@@ -9,6 +9,10 @@ use revolt_quark::{
#[openapi(tag = "Groups")] #[openapi(tag = "Groups")]
#[delete("/<target>/recipients/<member>")] #[delete("/<target>/recipients/<member>")]
pub async fn req(db: &Db, user: User, target: Ref, member: Ref) -> Result<EmptyResponse> { pub async fn req(db: &Db, user: User, target: Ref, member: Ref) -> Result<EmptyResponse> {
if user.bot.is_some() {
return Err(Error::IsBot);
}
let channel = target.as_channel(db).await?; let channel = target.as_channel(db).await?;
match &channel { match &channel {

View File

@@ -1,6 +1,6 @@
use revolt_quark::{ use revolt_quark::{
models::{Invite, User}, models::{Invite, User},
perms, Db, Permission, Ref, Result, perms, Db, Error, Permission, Ref, Result,
}; };
use rocket::serde::json::Json; use rocket::serde::json::Json;
@@ -13,6 +13,10 @@ use rocket::serde::json::Json;
#[openapi(tag = "Channel Invites")] #[openapi(tag = "Channel Invites")]
#[post("/<target>/invites")] #[post("/<target>/invites")]
pub async fn req(db: &Db, user: User, target: Ref) -> Result<Json<Invite>> { pub async fn req(db: &Db, user: User, target: Ref) -> Result<Json<Invite>> {
if user.bot.is_some() {
return Err(Error::IsBot);
}
let channel = target.as_channel(db).await?; let channel = target.as_channel(db).await?;
perms(&user) perms(&user)
.channel(&channel) .channel(&channel)

View File

@@ -11,6 +11,10 @@ use rocket::serde::json::Json;
#[openapi(tag = "Groups")] #[openapi(tag = "Groups")]
#[get("/<target>/members")] #[get("/<target>/members")]
pub async fn req(db: &Db, user: User, target: Ref) -> Result<Json<Vec<User>>> { pub async fn req(db: &Db, user: User, target: Ref) -> Result<Json<Vec<User>>> {
if user.bot.is_some() {
return Err(Error::IsBot);
}
let channel = target.as_channel(db).await?; let channel = target.as_channel(db).await?;
perms(&user) perms(&user)
.channel(&channel) .channel(&channel)

View File

@@ -48,6 +48,10 @@ pub async fn req(
target: Ref, target: Ref,
options: Json<OptionsMessageSearch>, options: Json<OptionsMessageSearch>,
) -> Result<Json<BulkMessageResponse>> { ) -> Result<Json<BulkMessageResponse>> {
if user.bot.is_some() {
return Err(Error::IsBot);
}
let options = options.into_inner(); let options = options.into_inner();
options options
.validate() .validate()

View File

@@ -1,6 +1,6 @@
use revolt_quark::{ use revolt_quark::{
models::{Invite, User}, models::{Invite, User},
perms, Db, Permission, Ref, Result, perms, Db, Error, Permission, Ref, Result,
}; };
use rocket::serde::json::Json; use rocket::serde::json::Json;
@@ -11,6 +11,10 @@ use rocket::serde::json::Json;
#[openapi(tag = "Server Members")] #[openapi(tag = "Server Members")]
#[get("/<target>/invites")] #[get("/<target>/invites")]
pub async fn req(db: &Db, user: User, target: Ref) -> Result<Json<Vec<Invite>>> { pub async fn req(db: &Db, user: User, target: Ref) -> Result<Json<Vec<Invite>>> {
if user.bot.is_some() {
return Err(Error::IsBot);
}
let server = target.as_server(db).await?; let server = target.as_server(db).await?;
perms(&user) perms(&user)
.server(&server) .server(&server)

View File

@@ -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 /// # Mark Server As Read
/// ///
@@ -6,6 +6,10 @@ use revolt_quark::{models::User, perms, Db, EmptyResponse, Ref, Result};
#[openapi(tag = "Server Information")] #[openapi(tag = "Server Information")]
#[put("/<target>/ack")] #[put("/<target>/ack")]
pub async fn req(db: &Db, user: User, target: Ref) -> Result<EmptyResponse> { pub async fn req(db: &Db, user: User, target: Ref) -> Result<EmptyResponse> {
if user.bot.is_some() {
return Err(Error::IsBot);
}
let server = target.as_server(db).await?; let server = target.as_server(db).await?;
perms(&user).server(&server).calc(db).await?; perms(&user).server(&server).calc(db).await?;

View File

@@ -1,5 +1,5 @@
use revolt_quark::models::User; use revolt_quark::models::User;
use revolt_quark::{Database, Result}; use revolt_quark::{Database, Error, Result};
use rocket::serde::json::Json; use rocket::serde::json::Json;
use rocket::State; use rocket::State;
@@ -11,6 +11,11 @@ use rocket::State;
#[put("/<username>/friend")] #[put("/<username>/friend")]
pub async fn req(db: &State<Database>, user: User, username: String) -> Result<Json<User>> { pub async fn req(db: &State<Database>, user: User, username: String) -> Result<Json<User>> {
let mut target = db.fetch_user_by_username(&username).await?; 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?; user.add_friend(db, &mut target).await?;
Ok(Json(target.with_auto_perspective(db, &user).await)) Ok(Json(target.with_auto_perspective(db, &user).await))
} }

View File

@@ -24,6 +24,10 @@ pub async fn req(db: &State<Database>, user: User, target: Ref) -> Result<Json<M
return Err(Error::InvalidOperation); return Err(Error::InvalidOperation);
} }
if user.bot.is_some() {
return Err(Error::IsBot);
}
let target = target.as_user(db).await?; let target = target.as_user(db).await?;
if perms(&user) if perms(&user)

View File

@@ -1,5 +1,5 @@
use revolt_quark::models::User; use revolt_quark::models::User;
use revolt_quark::{Database, Result}; use revolt_quark::{Database, Error, Result};
use rocket::serde::json::Json; use rocket::serde::json::Json;
use rocket::State; use rocket::State;
@@ -11,6 +11,11 @@ use rocket::State;
#[delete("/<target>/friend")] #[delete("/<target>/friend")]
pub async fn req(db: &State<Database>, user: User, target: String) -> Result<Json<User>> { pub async fn req(db: &State<Database>, user: User, target: String) -> Result<Json<User>> {
let mut target = db.fetch_user(&target).await?; 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?; user.remove_friend(db, &mut target).await?;
Ok(Json(target.with_auto_perspective(db, &user).await)) Ok(Json(target.with_auto_perspective(db, &user).await))
} }

View File

@@ -136,7 +136,7 @@ fn resolve_bucket_limit(bucket: &str) -> u8 {
"messaging" => 10, "messaging" => 10,
"channels" => 15, "channels" => 15,
"servers" => 5, "servers" => 5,
"auth" => 3, "auth" => 15,
"auth_delete" => 255, "auth_delete" => 255,
"swagger" => 100, "swagger" => 100,
_ => 20, _ => 20,