fix(telegram): escape journal html content

This commit is contained in:
2026-07-03 11:06:04 +03:00
parent a27774fd48
commit f6029372ef
2 changed files with 11 additions and 6 deletions

View File

@@ -183,7 +183,7 @@ async def _show_journal_page(
await target_message.edit_text( await target_message.edit_text(
text, text,
reply_markup=kb, reply_markup=kb,
parse_mode=None, parse_mode="HTML",
) )
except TelegramBadRequest as exc: except TelegramBadRequest as exc:
if "message is not modified" in str(exc).lower(): if "message is not modified" in str(exc).lower():
@@ -198,7 +198,7 @@ async def _show_journal_page(
sent_message = await target_message.answer( sent_message = await target_message.answer(
text, text,
reply_markup=kb, reply_markup=kb,
parse_mode=None, parse_mode="HTML",
) )
_register_journal_screen(sent_message) _register_journal_screen(sent_message)

View File

@@ -3,6 +3,7 @@
from __future__ import annotations from __future__ import annotations
from datetime import datetime from datetime import datetime
from html import escape
from zoneinfo import ZoneInfo from zoneinfo import ZoneInfo
from aiogram.types import InlineKeyboardMarkup from aiogram.types import InlineKeyboardMarkup
@@ -67,6 +68,10 @@ def build_keyboard(
return kb.as_markup() return kb.as_markup()
def _html(value: object) -> str:
return escape(str(value or ""), quote=False)
def build_actions_keyboard() -> InlineKeyboardMarkup: def build_actions_keyboard() -> InlineKeyboardMarkup:
# Первый экран экспорта: выбираем, что именно экспортировать. # Первый экран экспорта: выбираем, что именно экспортировать.
kb = InlineKeyboardBuilder() kb = InlineKeyboardBuilder()
@@ -233,8 +238,8 @@ def _render_auto_signal(
) -> list[str]: ) -> list[str]:
level = str(event.get("level") or "INFO").upper() level = str(event.get("level") or "INFO").upper()
icon = LEVEL_ICONS.get(level, "") icon = LEVEL_ICONS.get(level, "")
title = _event_title(event.get("event_type")) title = _html(_event_title(event.get("event_type")))
message = _humanize_message(event.get("message")) message = _html(_humanize_message(event.get("message")))
lines = [ lines = [
f"{icon} <b>{level}</b> · {title}", f"{icon} <b>{level}</b> · {title}",
@@ -253,8 +258,8 @@ def _render_default_event(
) -> list[str]: ) -> list[str]:
level = str(event.get("level") or "INFO").upper() level = str(event.get("level") or "INFO").upper()
icon = LEVEL_ICONS.get(level, "") icon = LEVEL_ICONS.get(level, "")
title = _event_title(event.get("event_type")) title = _html(_event_title(event.get("event_type")))
message = _humanize_message(event.get("message")) message = _html(_humanize_message(event.get("message")))
lines = [ lines = [
f"{icon} <b>{level}</b> · {title}", f"{icon} <b>{level}</b> · {title}",