From 7e13be3c38ebe0c3ef0a58877fc8c4a2b4d54644 Mon Sep 17 00:00:00 2001 From: PTah Date: Sun, 31 May 2026 18:55:11 +1000 Subject: [PATCH] fix: hide redundant RDP workstation line when it matches server host Co-authored-by: Cursor --- backend/app/services/telegram_templates.py | 31 +++++++++++- backend/tests/test_telegram_templates.py | 58 ++++++++++++++++++++++ 2 files changed, 87 insertions(+), 2 deletions(-) diff --git a/backend/app/services/telegram_templates.py b/backend/app/services/telegram_templates.py index ea05880..5d9703b 100644 --- a/backend/app/services/telegram_templates.py +++ b/backend/app/services/telegram_templates.py @@ -82,6 +82,31 @@ def host_label(host: Host | None, *, fallback: str = "unknown") -> str: return html_escape(host.hostname) +def _host_display_name_base(display_name: str | None) -> str: + if not display_name or not display_name.strip(): + return "" + return display_name.strip().split("(", 1)[0].strip() + + +def _rdp_workstation_is_redundant(workstation: str, host: Host | None) -> bool: + """Скрыть Workstation Name, если пусто/«-» или совпадает с hostname/display_name сервера.""" + ws = (workstation or "").strip() + if not ws or ws in ("-", "N/A", "?"): + return True + if host is None: + return False + ws_key = ws.casefold() + if host.hostname and ws_key == host.hostname.strip().casefold(): + return True + dn = (host.display_name or "").strip() + if dn and ws_key == dn.casefold(): + return True + base = _host_display_name_base(host.display_name) + if base and ws_key == base.casefold(): + return True + return False + + def format_time(dt: datetime | None) -> str: if dt is None: return "-" @@ -175,14 +200,16 @@ def format_rdp_login_html(event: Event) -> str: user = html_escape(_detail(details, "user", "username")) ip = html_escape(_detail(details, "ip_address", "source_ip", "ip")) - workstation = html_escape(_detail(details, "workstation_name", "computer_name")) + workstation_raw = _detail(details, "workstation_name", "computer_name") + workstation = html_escape(workstation_raw) process = html_escape(_detail(details, "process_name", "process", default="")) logon = logon_type_label(details.get("logon_type")) msg = f"{header}\n" msg += _line("👤", "Пользователь", user) msg += _line("🏢", "Сервер", host_label(event.host)) - msg += _line("🖥️", "Рабочая станция", workstation) + if not _rdp_workstation_is_redundant(workstation_raw, event.host): + msg += _line("🖥️", "Рабочая станция", workstation) msg += _line("🌐", "IP адрес", ip) if process and process != "-": msg += _line("⚙️", "Процесс", process) diff --git a/backend/tests/test_telegram_templates.py b/backend/tests/test_telegram_templates.py index 6e84b59..10b9873 100644 --- a/backend/tests/test_telegram_templates.py +++ b/backend/tests/test_telegram_templates.py @@ -49,6 +49,64 @@ def test_rdp_failed_template_includes_user_ip_logon(): assert "" in text +def test_rdp_login_hides_redundant_workstation_when_matches_hostname(): + host = Host( + hostname="ITIS198", + display_name="ITIS (192.168.160.198)", + os_family="windows", + ) + event = Event( + event_id="00000000-0000-4000-8000-000000000508", + host_id=1, + host=host, + occurred_at=datetime(2026, 5, 31, 18, 48, 52, tzinfo=timezone.utc), + category="auth", + type="rdp.login.success", + severity="info", + title="RDP login", + summary="papatramp", + details={ + "user": "papatramp", + "ip_address": "192.168.160.3", + "logon_type": 10, + "workstation_name": "ITIS198", + "event_id_windows": 4624, + }, + payload={}, + ) + text = format_rdp_login_html(event) + assert "ITIS" in text + assert "192.168.160.3" in text + assert "Рабочая станция" not in text + assert "ITIS198" not in text + + +def test_rdp_login_shows_workstation_when_client_differs(): + host = Host(hostname="ITIS198", display_name="ITIS", os_family="windows") + event = Event( + event_id="00000000-0000-4000-8000-000000000509", + host_id=1, + host=host, + occurred_at=datetime(2026, 5, 31, 18, 48, 52, tzinfo=timezone.utc), + category="auth", + type="rdp.login.success", + severity="info", + title="RDP login", + summary="papatramp", + details={ + "user": "papatramp", + "ip_address": "192.168.160.3", + "logon_type": 10, + "workstation_name": "NEW-ADMIN-PC", + "event_id_windows": 4624, + }, + payload={}, + ) + text = format_rdp_login_html(event) + assert "Рабочая станция" in text + assert "NEW-ADMIN-PC" in text + + def test_rdp_success_template(): event = Event( event_id="00000000-0000-4000-8000-000000000502",