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; + } } } }