From bac5304481daad235e62d8ad7934c766737c92e7 Mon Sep 17 00:00:00 2001 From: meijiali <你的邮箱@xxx.com> Date: Fri, 3 Jul 2026 19:43:08 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=20TikHub=20=E9=89=B4?= =?UTF-8?q?=E6=9D=83=E5=A4=B1=E8=B4=A5=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/platforms/base.py | 6 ++++++ tests/unit/test_comment_pagination.py | 14 ++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/app/platforms/base.py b/app/platforms/base.py index e53d702..73d8528 100644 --- a/app/platforms/base.py +++ b/app/platforms/base.py @@ -87,6 +87,12 @@ class TikHubClient: ) time.sleep(2**attempt) continue + if response.status_code == 401: + raise PlatformAPIError( + "TikHub 鉴权失败,请检查 TIKHUB_API_KEY 是否有效", + error_type="auth_error", + status_code=response.status_code, + ) if response.is_error: raise PlatformAPIError( f"External API returned HTTP {response.status_code}", diff --git a/tests/unit/test_comment_pagination.py b/tests/unit/test_comment_pagination.py index 2bf6179..f2df7b2 100644 --- a/tests/unit/test_comment_pagination.py +++ b/tests/unit/test_comment_pagination.py @@ -51,3 +51,17 @@ def test_tikhub_client_raises_structured_error_after_retries(monkeypatch): assert exc_info.value.status_code == 429 assert "secret-token" not in str(exc_info.value) assert sleeps == [1, 2, 4] + + +def test_tikhub_client_reports_401_as_auth_error_without_leaking_token(): + transport = SequenceTransport([httpx.Response(401, json={"message": "Unauthorized"})]) + http_client = httpx.Client(transport=httpx.MockTransport(transport)) + client = TikHubClient(base_url="https://api.test", api_key="secret-token", http_client=http_client) + + with pytest.raises(PlatformAPIError) as exc_info: + client.get("/demo") + + assert exc_info.value.error_type == "auth_error" + assert exc_info.value.status_code == 401 + assert str(exc_info.value) == "TikHub 鉴权失败,请检查 TIKHUB_API_KEY 是否有效" + assert "secret-token" not in str(exc_info.value)