mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-08 13:12:08 +00:00
fix(telegram): redact bot token from connect/disconnect/send_document/send_video errors
_redact_telegram_error_text() strips bot tokens from api.telegram.org URLs embedded in transport-error text, and is already applied across the send/edit transient-error paths. Four sites still built their message from the raw exception: - connect()'s fatal-error handler is the most severe: the raw text is passed to _set_fatal_error(), which persists it via write_runtime_status() to a dashboard/admin-facing runtime status file, not just a log line. A transient network error during startup commonly embeds the request URL (https://api.telegram.org/bot<TOKEN>/getMe), so this could leak the live bot token into that surface. - disconnect(), send_document(), send_video() build the same unredacted pattern into a warning log line (lower blast radius, but the same leak class). Fix: route all four through the existing _redact_telegram_error_text() helper before building the message/log line, mirroring the send/edit paths exactly. Also drops exc_info=True from the two logger.error/ logger.warning calls that had it — exc_info prints the exception's own traceback (including its unredacted message) separately from the format string, which would otherwise defeat the redaction; the already-redacted sibling call sites in this file follow the same convention.
This commit is contained in:
parent
f10851e3fd
commit
1e2914b40a
2 changed files with 147 additions and 5 deletions
|
|
@ -3306,9 +3306,10 @@ class TelegramAdapter(BasePlatformAdapter):
|
|||
|
||||
except Exception as e:
|
||||
self._release_platform_lock()
|
||||
message = f"Telegram startup failed: {e}"
|
||||
safe_error = _redact_telegram_error_text(e)
|
||||
message = f"Telegram startup failed: {safe_error}"
|
||||
self._set_fatal_error("telegram_connect_error", message, retryable=True)
|
||||
logger.error("[%s] Failed to connect to Telegram: %s", self.name, e, exc_info=True)
|
||||
logger.error("[%s] Failed to connect to Telegram: %s", self.name, safe_error)
|
||||
return False
|
||||
|
||||
async def _set_status_indicator(self, online: bool) -> None:
|
||||
|
|
@ -3446,7 +3447,10 @@ class TelegramAdapter(BasePlatformAdapter):
|
|||
await self._app.stop()
|
||||
await self._app.shutdown()
|
||||
except Exception as e:
|
||||
logger.warning("[%s] Error during Telegram disconnect: %s", self.name, e, exc_info=True)
|
||||
logger.warning(
|
||||
"[%s] Error during Telegram disconnect: %s",
|
||||
self.name, _redact_telegram_error_text(e),
|
||||
)
|
||||
self._release_platform_lock()
|
||||
|
||||
self._app = None
|
||||
|
|
@ -6099,7 +6103,10 @@ class TelegramAdapter(BasePlatformAdapter):
|
|||
)
|
||||
return SendResult(success=True, message_id=str(msg.message_id))
|
||||
except Exception as e:
|
||||
logger.warning("[%s] Failed to send document: %s", self.name, e, exc_info=True)
|
||||
logger.warning(
|
||||
"[%s] Failed to send document: %s",
|
||||
self.name, _redact_telegram_error_text(e),
|
||||
)
|
||||
return await super().send_document(chat_id, file_path, caption, file_name, reply_to, metadata=metadata)
|
||||
|
||||
async def send_video(
|
||||
|
|
@ -6146,7 +6153,10 @@ class TelegramAdapter(BasePlatformAdapter):
|
|||
)
|
||||
return SendResult(success=True, message_id=str(msg.message_id))
|
||||
except Exception as e:
|
||||
logger.warning("[%s] Failed to send video: %s", self.name, e, exc_info=True)
|
||||
logger.warning(
|
||||
"[%s] Failed to send video: %s",
|
||||
self.name, _redact_telegram_error_text(e),
|
||||
)
|
||||
return await super().send_video(chat_id, video_path, caption, reply_to, metadata=metadata)
|
||||
|
||||
async def send_image(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue