From 02bd0de75dbe3fc641d0178f6244ad5a519d893c Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Mon, 1 Dec 2025 13:31:12 +0100 Subject: [PATCH] Refactor user ID filtering in WebSocket server: Enhanced the logic to only filter messages based on user_id if the target user ID is numerically valid. Updated comments for clarity on the filtering behavior and historical context regarding user ID handling. --- src/websocket_server.rs | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/src/websocket_server.rs b/src/websocket_server.rs index e589313..5cc6db1 100644 --- a/src/websocket_server.rs +++ b/src/websocket_server.rs @@ -489,30 +489,37 @@ async fn handle_connection( Err(_) => break, }; - // Filter nach user_id, falls gesetzt + // Filter nach user_id, falls gesetzt und numerisch interpretierbar. + // Historisch wurde hier der Falukant-User (numerisch) verwendet. + // Wenn die gesetzte User-ID kein Integer ist (z.B. Benutzername), + // wird *nicht* gefiltert und alle Nachrichten durchgelassen – + // das Frontend muss dann selbst selektieren. let target_user = { let guard = user_id_for_broker.lock().await; guard.clone() }; if let Some(uid) = target_user.clone() { - if let Ok(json) = serde_json::from_str::(&msg) { - let matches_user = json - .get("user_id") - .and_then(|v| { - if let Some(s) = v.as_str() { - Some(s.to_string()) - } else if let Some(n) = v.as_i64() { - Some(n.to_string()) - } else { - None - } - }) - .map(|v| v == uid) - .unwrap_or(false); + // Nur filtern, wenn uid numerisch ist + if uid.parse::().is_ok() { + if let Ok(json) = serde_json::from_str::(&msg) { + let matches_user = json + .get("user_id") + .and_then(|v| { + if let Some(s) = v.as_str() { + s.parse::().ok() + } else if let Some(n) = v.as_i64() { + Some(n) + } else { + None + } + }) + .map(|v| v.to_string() == uid) + .unwrap_or(false); - if !matches_user { - continue; + if !matches_user { + continue; + } } } }