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.

This commit is contained in:
Torsten Schulz (local)
2025-12-01 13:31:12 +01:00
parent b8fa644c97
commit 02bd0de75d

View File

@@ -489,26 +489,32 @@ async fn handle_connection<S>(
Err(_) => break, 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 target_user = {
let guard = user_id_for_broker.lock().await; let guard = user_id_for_broker.lock().await;
guard.clone() guard.clone()
}; };
if let Some(uid) = target_user.clone() { if let Some(uid) = target_user.clone() {
// Nur filtern, wenn uid numerisch ist
if uid.parse::<i64>().is_ok() {
if let Ok(json) = serde_json::from_str::<Json>(&msg) { if let Ok(json) = serde_json::from_str::<Json>(&msg) {
let matches_user = json let matches_user = json
.get("user_id") .get("user_id")
.and_then(|v| { .and_then(|v| {
if let Some(s) = v.as_str() { if let Some(s) = v.as_str() {
Some(s.to_string()) s.parse::<i64>().ok()
} else if let Some(n) = v.as_i64() { } else if let Some(n) = v.as_i64() {
Some(n.to_string()) Some(n)
} else { } else {
None None
} }
}) })
.map(|v| v == uid) .map(|v| v.to_string() == uid)
.unwrap_or(false); .unwrap_or(false);
if !matches_user { if !matches_user {
@@ -516,6 +522,7 @@ async fn handle_connection<S>(
} }
} }
} }
}
// Logging für den 24h-Überblick, was an welchen User/Peer geht // Logging für den 24h-Überblick, was an welchen User/Peer geht
let conn_user = { let conn_user = {