forked from jmug/stoatchat
Merge remote-tracking branch 'revoltchat/master' into webhooks
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
use revolt_quark::models::emoji::EmojiParent;
|
use revolt_quark::models::emoji::EmojiParent;
|
||||||
use revolt_quark::models::{Emoji, File, User};
|
use revolt_quark::models::{Emoji, File, User};
|
||||||
|
use revolt_quark::variables::delta::MAX_EMOJI_COUNT;
|
||||||
use revolt_quark::{perms, Db, Error, Permission, Result};
|
use revolt_quark::{perms, Db, Error, Permission, Result};
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use validator::Validate;
|
use validator::Validate;
|
||||||
@@ -55,8 +56,8 @@ pub async fn create_emoji(
|
|||||||
// Check that there are no more than 100 emoji
|
// Check that there are no more than 100 emoji
|
||||||
// ! FIXME: hardcoded upper limit
|
// ! FIXME: hardcoded upper limit
|
||||||
let emojis = db.fetch_emoji_by_parent_id(&server.id).await?;
|
let emojis = db.fetch_emoji_by_parent_id(&server.id).await?;
|
||||||
if emojis.len() > 99 {
|
if emojis.len() > *MAX_EMOJI_COUNT {
|
||||||
return Err(Error::TooManyEmoji);
|
return Err(Error::TooManyEmoji { max: *MAX_EMOJI_COUNT });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EmojiParent::Detached => return Err(Error::InvalidOperation),
|
EmojiParent::Detached => return Err(Error::InvalidOperation),
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ use std::collections::HashMap;
|
|||||||
|
|
||||||
use revolt_quark::{
|
use revolt_quark::{
|
||||||
models::{server::PartialServer, Channel, User},
|
models::{server::PartialServer, Channel, User},
|
||||||
perms, Db, Error, Permission, Ref, Result,
|
perms, Db, Error, Permission, Ref, Result, variables::delta::MAX_CHANNEL_COUNT,
|
||||||
};
|
};
|
||||||
|
|
||||||
use rocket::serde::json::Json;
|
use rocket::serde::json::Json;
|
||||||
@@ -58,6 +58,10 @@ pub async fn req(
|
|||||||
.throw_permission(db, Permission::ManageChannel)
|
.throw_permission(db, Permission::ManageChannel)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
|
if server.channels.len() > *MAX_CHANNEL_COUNT {
|
||||||
|
return Err(Error::TooManyChannels { max: *MAX_CHANNEL_COUNT })
|
||||||
|
};
|
||||||
|
|
||||||
let id = Ulid::new().to_string();
|
let id = Ulid::new().to_string();
|
||||||
let mut channels = server.channels.clone();
|
let mut channels = server.channels.clone();
|
||||||
channels.push(id.clone());
|
channels.push(id.clone());
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use revolt_quark::{
|
use revolt_quark::{
|
||||||
models::{server::Role, User},
|
models::{server::Role, User},
|
||||||
perms, Db, Error, Permission, Ref, Result,
|
perms, Db, Error, Permission, Ref, Result, variables::delta::MAX_ROLE_COUNT,
|
||||||
};
|
};
|
||||||
|
|
||||||
use rocket::serde::json::Json;
|
use rocket::serde::json::Json;
|
||||||
@@ -50,6 +50,10 @@ pub async fn req(
|
|||||||
.throw_permission(db, Permission::ManageRole)
|
.throw_permission(db, Permission::ManageRole)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
|
if server.roles.len() > *MAX_ROLE_COUNT {
|
||||||
|
return Err(Error::TooManyRoles { max: *MAX_ROLE_COUNT })
|
||||||
|
};
|
||||||
|
|
||||||
let member_rank = permissions.get_member_rank();
|
let member_rank = permissions.get_member_rank();
|
||||||
let rank = if let Some(given_rank) = data.rank {
|
let rank = if let Some(given_rank) = data.rank {
|
||||||
if given_rank <= member_rank.unwrap_or(i64::MIN) {
|
if given_rank <= member_rank.unwrap_or(i64::MIN) {
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ use crate::{
|
|||||||
Channel,
|
Channel,
|
||||||
},
|
},
|
||||||
tasks::{ack::AckEvent, process_embeds},
|
tasks::{ack::AckEvent, process_embeds},
|
||||||
Database, Error, OverrideField, Result, types::push::MessageAuthor, web::idempotency::IdempotencyKey, Ref,
|
Database, Error, OverrideField, Result, types::push::MessageAuthor, web::idempotency::IdempotencyKey, Ref, variables::delta::{MAX_ATTACHMENT_COUNT, MAX_REPLY_COUNT},
|
||||||
};
|
};
|
||||||
|
|
||||||
impl Channel {
|
impl Channel {
|
||||||
@@ -458,8 +458,8 @@ impl Channel {
|
|||||||
// Verify replies are valid.
|
// Verify replies are valid.
|
||||||
let mut replies = HashSet::new();
|
let mut replies = HashSet::new();
|
||||||
if let Some(entries) = data.replies {
|
if let Some(entries) = data.replies {
|
||||||
if entries.len() > 5 {
|
if entries.len() > *MAX_REPLY_COUNT {
|
||||||
return Err(Error::TooManyReplies);
|
return Err(Error::TooManyReplies { max: *MAX_REPLY_COUNT });
|
||||||
}
|
}
|
||||||
|
|
||||||
for Reply { id, mention } in entries {
|
for Reply { id, mention } in entries {
|
||||||
@@ -498,9 +498,8 @@ impl Channel {
|
|||||||
// Add attachments to message.
|
// Add attachments to message.
|
||||||
let mut attachments = vec![];
|
let mut attachments = vec![];
|
||||||
if let Some(ids) = &data.attachments {
|
if let Some(ids) = &data.attachments {
|
||||||
// ! FIXME: move this to app config
|
if ids.len() > *MAX_ATTACHMENT_COUNT {
|
||||||
if ids.len() > 5 {
|
return Err(Error::TooManyAttachments { max: *MAX_ATTACHMENT_COUNT} );
|
||||||
return Err(Error::TooManyAttachments);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for attachment_id in ids {
|
for attachment_id in ids {
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ use revolt_rocket_okapi::revolt_okapi::openapi3;
|
|||||||
use rocket::{
|
use rocket::{
|
||||||
http::{ContentType, Status},
|
http::{ContentType, Status},
|
||||||
response::{self, Responder},
|
response::{self, Responder},
|
||||||
serde::json::serde_json::json,
|
|
||||||
Request, Response,
|
Request, Response,
|
||||||
};
|
};
|
||||||
use schemars::schema::Schema;
|
use schemars::schema::Schema;
|
||||||
@@ -39,8 +38,15 @@ pub enum Error {
|
|||||||
UnknownMessage,
|
UnknownMessage,
|
||||||
CannotEditMessage,
|
CannotEditMessage,
|
||||||
CannotJoinCall,
|
CannotJoinCall,
|
||||||
TooManyAttachments,
|
TooManyAttachments {
|
||||||
TooManyReplies,
|
max: usize
|
||||||
|
},
|
||||||
|
TooManyReplies {
|
||||||
|
max: usize
|
||||||
|
},
|
||||||
|
TooManyChannels {
|
||||||
|
max: usize
|
||||||
|
},
|
||||||
EmptyMessage,
|
EmptyMessage,
|
||||||
PayloadTooLarge,
|
PayloadTooLarge,
|
||||||
CannotRemoveYourself,
|
CannotRemoveYourself,
|
||||||
@@ -57,7 +63,12 @@ pub enum Error {
|
|||||||
TooManyServers {
|
TooManyServers {
|
||||||
max: usize,
|
max: usize,
|
||||||
},
|
},
|
||||||
TooManyEmoji,
|
TooManyEmoji {
|
||||||
|
max: usize
|
||||||
|
},
|
||||||
|
TooManyRoles {
|
||||||
|
max: usize
|
||||||
|
},
|
||||||
|
|
||||||
// ? Bot related errors
|
// ? Bot related errors
|
||||||
ReachedMaximumBots,
|
ReachedMaximumBots,
|
||||||
@@ -151,8 +162,8 @@ impl<'r> Responder<'r, 'static> for Error {
|
|||||||
Error::UnknownAttachment => Status::BadRequest,
|
Error::UnknownAttachment => Status::BadRequest,
|
||||||
Error::CannotEditMessage => Status::Forbidden,
|
Error::CannotEditMessage => Status::Forbidden,
|
||||||
Error::CannotJoinCall => Status::BadRequest,
|
Error::CannotJoinCall => Status::BadRequest,
|
||||||
Error::TooManyAttachments => Status::BadRequest,
|
Error::TooManyAttachments { .. } => Status::BadRequest,
|
||||||
Error::TooManyReplies => Status::BadRequest,
|
Error::TooManyReplies { .. } => Status::BadRequest,
|
||||||
Error::EmptyMessage => Status::UnprocessableEntity,
|
Error::EmptyMessage => Status::UnprocessableEntity,
|
||||||
Error::PayloadTooLarge => Status::UnprocessableEntity,
|
Error::PayloadTooLarge => Status::UnprocessableEntity,
|
||||||
Error::CannotRemoveYourself => Status::BadRequest,
|
Error::CannotRemoveYourself => Status::BadRequest,
|
||||||
@@ -163,8 +174,11 @@ impl<'r> Responder<'r, 'static> for Error {
|
|||||||
Error::UnknownServer => Status::NotFound,
|
Error::UnknownServer => Status::NotFound,
|
||||||
Error::InvalidRole => Status::NotFound,
|
Error::InvalidRole => Status::NotFound,
|
||||||
Error::Banned => Status::Forbidden,
|
Error::Banned => Status::Forbidden,
|
||||||
Error::TooManyServers { .. } => Status::Forbidden,
|
|
||||||
Error::TooManyEmoji => Status::BadRequest,
|
Error::TooManyServers { .. } => Status::BadRequest,
|
||||||
|
Error::TooManyEmoji { .. } => Status::BadRequest,
|
||||||
|
Error::TooManyChannels { .. } => Status::BadRequest,
|
||||||
|
Error::TooManyRoles { .. } => Status::BadRequest,
|
||||||
|
|
||||||
Error::ReachedMaximumBots => Status::BadRequest,
|
Error::ReachedMaximumBots => Status::BadRequest,
|
||||||
Error::IsBot => Status::BadRequest,
|
Error::IsBot => Status::BadRequest,
|
||||||
@@ -193,7 +207,7 @@ impl<'r> Responder<'r, 'static> for Error {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Serialize the error data structure into JSON.
|
// Serialize the error data structure into JSON.
|
||||||
let string = json!(self).to_string();
|
let string = serde_json::to_string(&self).unwrap();
|
||||||
|
|
||||||
// Build and send the request.
|
// Build and send the request.
|
||||||
Response::build()
|
Response::build()
|
||||||
|
|||||||
@@ -44,6 +44,12 @@ pub static MAX_GROUP_SIZE: Lazy<usize> = Lazy::new(|| env::var("REVOLT_MAX_GROUP
|
|||||||
pub static MAX_BOT_COUNT: Lazy<usize> = Lazy::new(|| env::var("REVOLT_MAX_BOT_COUNT").unwrap_or_else(|_| "5".to_string()).parse().unwrap());
|
pub static MAX_BOT_COUNT: Lazy<usize> = Lazy::new(|| env::var("REVOLT_MAX_BOT_COUNT").unwrap_or_else(|_| "5".to_string()).parse().unwrap());
|
||||||
pub static MAX_EMBED_COUNT: Lazy<usize> = Lazy::new(|| env::var("REVOLT_MAX_EMBED_COUNT").unwrap_or_else(|_| "5".to_string()).parse().unwrap());
|
pub static MAX_EMBED_COUNT: Lazy<usize> = Lazy::new(|| env::var("REVOLT_MAX_EMBED_COUNT").unwrap_or_else(|_| "5".to_string()).parse().unwrap());
|
||||||
pub static MAX_SERVER_COUNT: Lazy<usize> = Lazy::new(|| env::var("REVOLT_MAX_SERVER_COUNT").unwrap_or_else(|_| "100".to_string()).parse().unwrap());
|
pub static MAX_SERVER_COUNT: Lazy<usize> = Lazy::new(|| env::var("REVOLT_MAX_SERVER_COUNT").unwrap_or_else(|_| "100".to_string()).parse().unwrap());
|
||||||
|
pub static MAX_CHANNEL_COUNT: Lazy<usize> = Lazy::new(|| env::var("REVOLT_MAX_CHANNEL_COUNT").unwrap_or_else(|_| "200".to_string()).parse().unwrap());
|
||||||
|
pub static MAX_ROLE_COUNT: Lazy<usize> = Lazy::new(|| env::var("REVOLT_MAX_ROLE_COUNT").unwrap_or_else(|_| "200".to_string()).parse().unwrap());
|
||||||
|
pub static MAX_EMOJI_COUNT: Lazy<usize> = Lazy::new(|| env::var("REVOLT_MAX_EMOJI_COUNT").unwrap_or_else(|_| "100".to_string()).parse().unwrap());
|
||||||
|
pub static MAX_ATTACHMENT_COUNT: Lazy<usize> = Lazy::new(|| env::var("REVOLT_MAX_ATTACHMENT_COUNT").unwrap_or_else(|_| "5".to_string()).parse().unwrap());
|
||||||
|
pub static MAX_REPLY_COUNT: Lazy<usize> = Lazy::new(|| env::var("REVOLT_MAX_REPLY_COUNT").unwrap_or_else(|_| "5".to_string()).parse().unwrap());
|
||||||
|
|
||||||
pub static EARLY_ADOPTER_BADGE: Lazy<i64> = Lazy::new(|| env::var("REVOLT_EARLY_ADOPTER_BADGE").unwrap_or_else(|_| "0".to_string()).parse().unwrap());
|
pub static EARLY_ADOPTER_BADGE: Lazy<i64> = Lazy::new(|| env::var("REVOLT_EARLY_ADOPTER_BADGE").unwrap_or_else(|_| "0".to_string()).parse().unwrap());
|
||||||
|
|
||||||
pub fn preflight_checks() {
|
pub fn preflight_checks() {
|
||||||
|
|||||||
Reference in New Issue
Block a user