Avatar upload restriction has been finalized! Update your Config.toml!!!

This commit is contained in:
Shiroyasha 2024-09-21 16:25:35 +03:00
parent 0103c31d69
commit 7196c719e2
Signed by: shiroyashik
GPG key ID: E4953D3940D7860A
5 changed files with 18 additions and 7 deletions

View file

@ -63,8 +63,9 @@ customText = """
] ]
""" """
### Full update of these parameters occurs only after restarting the Sculptor!!!
[limitations] [limitations]
maxAvatarSize = 100000 # 100 KB maxAvatarSize = 100 # KB
maxAvatars = 10 maxAvatars = 10
[advancedUsers.66004548-4de5-49de-bade-9c3933d8eb97] [advancedUsers.66004548-4de5-49de-bade-9c3933d8eb97]

View file

@ -41,7 +41,7 @@ pub async fn limits(State(state): State<AppState>) -> Json<Value> {
"upload": 1 "upload": 1
}, },
"limits": { "limits": {
"maxAvatarSize": state.max_avatar_size, "maxAvatarSize": state.max_avatar_size * 1000,
"maxAvatars": state.max_avatars, "maxAvatars": state.max_avatars,
"allowedBadges": { "allowedBadges": {
"special": [0,0,0,0,0,0], "special": [0,0,0,0,0,0],

View file

@ -6,7 +6,7 @@ mod users;
mod types; mod types;
mod avatars; mod avatars;
pub fn router() -> Router<AppState> { pub fn router(limit: usize) -> Router<AppState> {
Router::new() Router::new()
.route("/verify", get(http2ws::verify)) .route("/verify", get(http2ws::verify))
.route("/raw", post(http2ws::raw)) .route("/raw", post(http2ws::raw))
@ -16,6 +16,6 @@ pub fn router() -> Router<AppState> {
.route("/user/create", post(users::create_user)) .route("/user/create", post(users::create_user))
.route("/user/:uuid/ban", post(users::ban)) .route("/user/:uuid/ban", post(users::ban))
.route("/user/:uuid/unban", post(users::unban)) .route("/user/:uuid/unban", post(users::unban))
.route("/avatar/:uuid", put(avatars::upload_avatar).layer(DefaultBodyLimit::disable())) .route("/avatar/:uuid", put(avatars::upload_avatar).layer(DefaultBodyLimit::max(limit)))
.route("/avatar/:uuid", delete(avatars::delete_avatar)) .route("/avatar/:uuid", delete(avatars::delete_avatar))
} }

View file

@ -35,7 +35,12 @@ use state::Config;
// Utils // Utils
mod utils; mod utils;
use utils::{check_updates, download_assets, get_commit_sha, get_log_file, get_path_to_assets_hash, is_assets_outdated, remove_assets, update_advanced_users, update_bans_from_minecraft, write_sha_to_file, FiguraVersions}; use utils::{
check_updates, download_assets, get_commit_sha,
get_limit_as_bytes, get_log_file, get_path_to_assets_hash,
is_assets_outdated, remove_assets, update_advanced_users,
update_bans_from_minecraft, write_sha_to_file, FiguraVersions
};
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct AppState { pub struct AppState {
@ -120,6 +125,7 @@ async fn main() -> Result<()> {
// Config // Config
let config = Arc::new(RwLock::new(Config::parse(CONFIG_VAR.clone().into()))); let config = Arc::new(RwLock::new(Config::parse(CONFIG_VAR.clone().into())));
let listen = config.read().await.listen.clone(); let listen = config.read().await.listen.clone();
let limit = get_limit_as_bytes(config.read().await.limitations.max_avatar_size.clone() as usize);
if config.read().await.assets_updater_enabled { if config.read().await.assets_updater_enabled {
// Force update assets if folder or hash file doesn't exists. // Force update assets if folder or hash file doesn't exists.
@ -183,14 +189,14 @@ async fn main() -> Result<()> {
let api = Router::new() let api = Router::new()
.nest("//auth", api_auth::router()) // => /api//auth ¯\_(ツ)_/¯ .nest("//auth", api_auth::router()) // => /api//auth ¯\_(ツ)_/¯
.nest("//assets", api_assets::router()) .nest("//assets", api_assets::router())
.nest("/v1", api::v1::router()) .nest("/v1", api::v1::router(limit))
.route("/limits", get(api_info::limits)) .route("/limits", get(api_info::limits))
.route("/version", get(api_info::version)) .route("/version", get(api_info::version))
.route("/motd", get(api_info::motd)) .route("/motd", get(api_info::motd))
.route("/equip", post(api_profile::equip_avatar)) .route("/equip", post(api_profile::equip_avatar))
.route("/:uuid", get(api_profile::user_info)) .route("/:uuid", get(api_profile::user_info))
.route("/:uuid/avatar", get(api_profile::download_avatar)) .route("/:uuid/avatar", get(api_profile::download_avatar))
.route("/avatar", put(api_profile::upload_avatar).layer(DefaultBodyLimit::disable())) .route("/avatar", put(api_profile::upload_avatar).layer(DefaultBodyLimit::max(limit)))
.route("/avatar", delete(api_profile::delete_avatar)); .route("/avatar", delete(api_profile::delete_avatar));
let app = Router::new() let app = Router::new()

View file

@ -143,4 +143,8 @@ pub fn get_log_file(folder: &str) -> String {
} }
index += 1; index += 1;
} }
}
pub fn get_limit_as_bytes(limit: usize) -> usize {
1024 + limit * 1024 // Adding additional 1 KB just for fun :)
} }