diff --git a/Cargo.lock b/Cargo.lock index e840ed110..b1a4126d7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4387,7 +4387,7 @@ dependencies = [ "webp", "woothee", "yaserde", - "zip", + "zip 3.0.0", "zxcvbn", ] @@ -8704,6 +8704,7 @@ dependencies = [ "tokio", "url", "windows-sys 0.59.0", + "zip 2.4.2", ] [[package]] @@ -8907,7 +8908,7 @@ dependencies = [ "uuid 1.16.0", "whoami", "winreg 0.55.0", - "zip", + "zip 3.0.0", ] [[package]] @@ -11029,6 +11030,21 @@ dependencies = [ "syn 2.0.101", ] +[[package]] +name = "zip" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabe6324e908f85a1c52063ce7aa26b68dcb7eb6dbc83a2d148403c9bc3eba50" +dependencies = [ + "arbitrary", + "crc32fast", + "crossbeam-utils", + "displaydoc", + "indexmap 2.9.0", + "memchr", + "thiserror 2.0.12", +] + [[package]] name = "zip" version = "3.0.0" diff --git a/Cargo.toml b/Cargo.toml index 10fba76e4..a6d0f5f36 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -135,6 +135,7 @@ tauri-plugin-os = "2.2.1" tauri-plugin-single-instance = "2.2.3" tauri-plugin-updater = { version = "2.7.1", default-features = false, features = [ "rustls-tls", + "zip", ] } tauri-plugin-window-state = "2.2.2" tempfile = "3.20.0" diff --git a/apps/labrinth/Cargo.toml b/apps/labrinth/Cargo.toml index d18bfeacc..5520f881a 100644 --- a/apps/labrinth/Cargo.toml +++ b/apps/labrinth/Cargo.toml @@ -88,7 +88,7 @@ rust_decimal = { workspace = true, features = [ "serde-with-float", "serde-with-str", ] } -redis = { workspace = true, features = ["tokio-comp", "ahash", "r2d2"] } # Locked on 0.29 until deadpool-redis updates to 0.30 +redis = { workspace = true, features = ["tokio-comp", "ahash", "r2d2"] } deadpool-redis.workspace = true clickhouse = { workspace = true, features = ["uuid", "time"] } uuid = { workspace = true, features = ["v4", "fast-rng", "serde"] } diff --git a/apps/labrinth/src/routes/v2/users.rs b/apps/labrinth/src/routes/v2/users.rs index 4f650609a..952717eed 100644 --- a/apps/labrinth/src/routes/v2/users.rs +++ b/apps/labrinth/src/routes/v2/users.rs @@ -135,14 +135,14 @@ pub async fn projects_list( #[derive(Serialize, Deserialize, Validate)] pub struct EditUser { - #[validate(length(min = 1, max = 39), regex(path = *crate::util::validate::RE_URL_SAFE))] + #[validate(length(min = 1, max = 39), regex(path = *crate::util::validate::RE_USERNAME))] pub username: Option, #[serde( default, skip_serializing_if = "Option::is_none", with = "::serde_with::rust::double_option" )] - #[validate(length(min = 1, max = 64), regex(path = *crate::util::validate::RE_URL_SAFE))] + #[validate(length(min = 1, max = 64), regex(path = *crate::util::validate::RE_USERNAME))] pub name: Option>, #[serde( default, diff --git a/apps/labrinth/src/routes/v3/users.rs b/apps/labrinth/src/routes/v3/users.rs index 1974d6613..c1af42916 100644 --- a/apps/labrinth/src/routes/v3/users.rs +++ b/apps/labrinth/src/routes/v3/users.rs @@ -358,7 +358,7 @@ pub async fn orgs_list( #[derive(Serialize, Deserialize, Validate)] pub struct EditUser { - #[validate(length(min = 1, max = 39), regex(path = *crate::util::validate::RE_URL_SAFE))] + #[validate(length(min = 1, max = 39), regex(path = *crate::util::validate::RE_USERNAME))] pub username: Option, #[serde( default, diff --git a/apps/labrinth/src/util/validate.rs b/apps/labrinth/src/util/validate.rs index 1aede409c..4dd87eef1 100644 --- a/apps/labrinth/src/util/validate.rs +++ b/apps/labrinth/src/util/validate.rs @@ -7,7 +7,9 @@ use validator::{ValidationErrors, ValidationErrorsKind}; use crate::models::pats::Scopes; pub static RE_URL_SAFE: LazyLock = - LazyLock::new(|| Regex::new(r"^[a-zA-Z0-9_-]*$").unwrap()); + LazyLock::new(|| Regex::new(r#"^[a-zA-Z0-9!@$()`.+,_"-]*$"#).unwrap()); +pub static RE_USERNAME: LazyLock = + LazyLock::new(|| Regex::new(r#"^[a-zA-Z0-9_-]*$"#).unwrap()); //TODO: In order to ensure readability, only the first error is printed, this may need to be expanded on in the future! pub fn validation_errors_to_string(