From 9378ab8fed4e21fff06c900151835ab4ceab3550 Mon Sep 17 00:00:00 2001 From: deadvey Date: Sun, 31 May 2026 15:50:00 +0100 Subject: [PATCH] fixed javalsai's mess --- Cargo.lock | 39 +++++++++++++++++++++++++++++++++++++++ Cargo.toml | 1 + src/.main.rs.swp | Bin 40960 -> 40960 bytes src/main.rs | 29 +++++++++++++++++++---------- 4 files changed, 59 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 914c91b..f91925c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,15 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + [[package]] name = "anyhow" version = "1.0.102" @@ -98,6 +107,7 @@ dependencies = [ "axum", "futures", "rand 0.10.1", + "regex", "serde", "serde_json", "tokio", @@ -668,6 +678,35 @@ dependencies = [ "bitflags", ] +[[package]] +name = "regex" +version = "1.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" + [[package]] name = "ryu" version = "1.0.23" diff --git a/Cargo.toml b/Cargo.toml index 5c8450b..f64fae2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,6 +8,7 @@ anyhow = "1.0.102" axum = { version = "0.8.9", features = ["ws"] } futures = "0.3.32" rand = "0.10.1" +regex = "1.12.3" serde = { version = "1.0.228", features = ["derive"] } serde_json = "1.0.149" tokio = { version = "1.52.3", features = ["full"] } diff --git a/src/.main.rs.swp b/src/.main.rs.swp index 298a6162eb9573627af5aaec066052a272ae34f6..a56e880fe38bea6454596eeeb3485b80d53c3655 100644 GIT binary patch delta 1145 zcmZoTz|?SnNhrx6%+puFQqPEifq_AQfuYfBqtHKoM)%2r0{0oyHh&Zl=I1@n$-uzO z4Uu=BET~Xlug1r~pvuR99>%gw+rft!ILo|}Ooj+=qO znwx>aikpE!o11}wl^f*T%|?nBIX8=Ht26T!rKYD=SXl*uDC^DUdS@By{n;59{&PUQ zlm_xT0|UcVeg=k1{0t1+_!$`1@G~&1;Adb+=4W6?;AdcP=VxGW=4W6K` z&d0#;nU8_t6CVS^X+8#qQ+x~z8~7L)X7DjEOy^@@$l+sP$mC;Sh~;Boh~#5nu;XK3 zu;gQ4kl|xsVB}+{XZX#_!0?urf#EJM1H*n^28Qjt3=DI485jz985q)e85mr785pd2 z85oRs85mS}85o3k85o#&85sWXFfe@PVPJU6!@zKdhk@Y~4+Fzt9tMU@JPZs=c^DWv zp&_Zx!@wZR!@$7D!@%%|n}OjgHv_|aZU%>gcYZNKPMJMW3IqF6k=vv0>#%il5Y3h~cl@}!z_-bfcGjQtbD>&xl z0{umX5h?BQvmxz!PZtmDX%mqM``j!D-*$BaFA#!=-Mej zn45*H?=q{DCFW$NB$lMc=OyN*YLui_poEa7CIcsD^<;Z{F=ho@yUC&UDU5!bkJukE iV4S?Uvw(|F6cSJ%y;cg2MaeeBB}I1Dn^)9DC;|YZ8~IiM delta 1060 zcmZoTz|?SnNhrx6%+puFQqPEifq_AQfx*;cqtHM8$rb_vlNAImFve~EC?L$w`;?P` zL6jS!!fmpkLVdkC9|Oa4UIvC+ybKICco`T@^D;2(;$>ji!OOs~otJ@O87~9FG+qXV zDZC5}dAtk^-ndc#M^iD9= z|7B-j=;eg?D-IL_3=9lc`5724@iQ>2;b&l2#LvJmkDq}dlAnPgjGuwQfuDgvjGuu) zh@XMs5g!A?Jw678BYX@D2lyBm_VY0?%-~~Sn9j$*P|L@_kjlrvkiy5nV9Ce8V8+M5 zpvA|)pvK3*z|F_Nz{bbG@RFCIp5YuX1H%bu(5>QSVCdmxU})iGV94ZUV6f$7U@+lj zU=ZSEVBp|oVEE6&!0?fWf#E(61H*Y928NS73=9W&7#Mc(Ffgp-VPKff!@w{B8k9vm z3=CmB3=CF03=Chm85mx1GcerdW?(qU&A@Pon}J~uHv>ZncRd3`5;p@wEH?u~3^xOV z12+SMH8%r;0XGAKHa7!<7B>TfJU0V_G&ci-1UCbN7&K_#axpMm;$mR9$i={LfQx}) zIu`@O6fOpa7A^*cMlJ@11}+8$KQ0CaA1($4Z!QJ~D=r2GVJ-#+K`sV{H=GO%uQ(YP zUUD)p?9t_9VA#dUz|hYLiH0eh3=DOg3=EZ=3=D;w3=BD(3=CJxaI59od$|@waqC^9vNON+$ veF}GJacYr5dSY3sLf+;h_D2jDr)=&l;NlZi2udw3%_*@#(YJX;U4$Y4Fev3f diff --git a/src/main.rs b/src/main.rs index 14f57f4..7870687 100644 --- a/src/main.rs +++ b/src/main.rs @@ -28,6 +28,7 @@ use futures::StreamExt as _; use rand::random_bool; use serde::{Deserialize, Serialize, de}; use serde_json::json; +use regex::Regex; #[derive(Deserialize, Serialize, Debug, Ord, Eq, PartialEq, PartialOrd, Clone)] struct Entry @@ -372,15 +373,14 @@ async fn handle_socket let Some(name) = socket.next().await else { - eprintln!("user gave no username"); + eprintln!("No username"); return; }; let name: Arc = match name.expect("failed to recv socket msg") { - Message::Text(text) - if validate_name(&text.to_string()) => + Message::Text(text) => { - Arc::from(text.to_string().into_boxed_str()) + Arc::from(validate_name(text.to_string())) } _ => Arc::from("anon"), }; @@ -442,16 +442,25 @@ async fn handle_socket } } -fn validate_name(input: &str) -> bool { +fn validate_name(input: String) -> String { let input = input.trim(); - - // Length check - if input.is_empty() || input.len() > 32 + if input == "null" { - return false; + return "anon".to_string(); + } + // Length check + if input.is_empty() || input.len() > 32 { + return "anon".to_string(); } - input.chars().all(|c| c.is_ascii_alphanumeric()) + // Allow only letters, numbers, _ and - + let re = Regex::new(r"^[a-zA-Z0-9_-]+$").unwrap(); + + if re.is_match(input) { + input.to_string() + } else { + "anon".to_string() + } } // static routes