diff --git a/plugin/relay/server.py b/plugin/relay/server.py index 295b0e2f..12811021 100644 --- a/plugin/relay/server.py +++ b/plugin/relay/server.py @@ -1185,7 +1185,7 @@ async def handle_provider_usage(request: web.Request) -> web.Response: request.query.get("profile"), ) except ValueError as exc: - raise web.HTTPBadRequest(text=str(exc)) from exc + raise web.HTTPBadRequest(text="invalid or unknown profile") from exc return web.json_response( await collect_provider_usage( profile_home=profile_home, diff --git a/plugin/tests/test_provider_usage.py b/plugin/tests/test_provider_usage.py index d92329e4..76d4472b 100644 --- a/plugin/tests/test_provider_usage.py +++ b/plugin/tests/test_provider_usage.py @@ -258,6 +258,19 @@ async def test_requires_bearer(self) -> None: response = await self.client.get("/usage/providers") self.assertEqual(response.status, 401) + async def test_invalid_profile_error_does_not_reflect_request_input(self) -> None: + token = await self._mint() + response = await self.client.get( + "/usage/providers?profile=../private-token", + headers={"Authorization": f"Bearer {token}"}, + ) + + body = await response.text() + self.assertEqual(response.status, 400 if self.usage_enabled else 404) + if self.usage_enabled: + self.assertEqual(body, "invalid or unknown profile") + self.assertNotIn("private-token", body) + @mock.patch( "plugin.relay.server.collect_provider_usage", new=mock.AsyncMock(return_value={"schema_version": 1, "providers": []}),