Skip to content

Commit 5c9f951

Browse files
committed
Fix codeql error on potential credential leak in stack traces
1 parent 1baa2b0 commit 5c9f951

4 files changed

Lines changed: 28 additions & 5 deletions

File tree

‎core/api.py‎

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
generated schema consistent across similar viewsets.
66
"""
77

8+
import logging
89
from typing import Any
910

1011
from drf_spectacular.utils import (
@@ -49,6 +50,8 @@
4950
SUMMARIZATION_SKILL_NAME = "summarization"
5051
RELATED_CONTENT_SKILL_NAME = "find_related"
5152

53+
logger = logging.getLogger(__name__)
54+
5255
PROJECT_ID_PARAMETER = OpenApiParameter(
5356
name="project_id",
5457
type=int,
@@ -630,15 +633,26 @@ def verify_bluesky_credentials(self, request, *args, **kwargs):
630633
try:
631634
BlueskySourcePlugin.verify_credentials(credentials)
632635
except Exception as exc:
633-
raise serializers.ValidationError({"bluesky_credentials": str(exc)}) from exc
636+
logger.exception(
637+
"Bluesky credential verification failed for project id=%s",
638+
project.id,
639+
)
640+
raise serializers.ValidationError(
641+
{
642+
"bluesky_credentials": (
643+
"Credential verification failed. Please re-check the credentials "
644+
"and try again."
645+
)
646+
}
647+
) from exc
634648

635649
credentials.refresh_from_db()
636650
return Response(
637651
{
638652
"status": "verified",
639653
"handle": credentials.handle,
640654
"last_verified_at": credentials.last_verified_at,
641-
"last_error": credentials.last_error,
655+
"last_error": "",
642656
}
643657
)
644658

‎core/plugins/bluesky.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,4 +244,4 @@ def _record_credentials_status(
244244
if not error_message:
245245
credentials.last_verified_at = timezone.now()
246246
update_fields.append("last_verified_at")
247-
credentials.save(update_fields=update_fields)
247+
credentials.save(update_fields=update_fields)

‎core/tests/test_api.py‎

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,12 +192,16 @@ def test_verify_bluesky_credentials_verifies_project_account(self, verify_mock):
192192
self.assertEqual(verified_credentials.id, credentials.id)
193193
self.assertEqual(response.json()["status"], "verified")
194194
self.assertEqual(response.json()["handle"], "project.bsky.social")
195+
self.assertEqual(response.json()["last_error"], "")
195196

197+
@patch("core.api.logger.exception")
196198
@patch(
197199
"core.plugins.bluesky.BlueskySourcePlugin.verify_credentials",
198200
side_effect=RuntimeError("bad login"),
199201
)
200-
def test_verify_bluesky_credentials_surfaces_verification_errors(self, _verify_mock):
202+
def test_verify_bluesky_credentials_surfaces_verification_errors(
203+
self, _verify_mock, logger_exception_mock
204+
):
201205
credentials = BlueskyCredentials(project=self.owner_project, handle="project.bsky.social")
202206
credentials.set_app_password("app-password")
203207
credentials.save()
@@ -214,6 +218,11 @@ def test_verify_bluesky_credentials_surfaces_verification_errors(self, _verify_m
214218
self.assert_standardized_validation_error(
215219
response.json(), "bluesky_credentials"
216220
)
221+
self.assertNotIn("bad login", str(response.json()))
222+
logger_exception_mock.assert_called_once_with(
223+
"Bluesky credential verification failed for project id=%s",
224+
self.owner_project.id,
225+
)
217226

218227
def test_feedback_create_assigns_current_user(self):
219228
response = self.client.post(

‎core/tests/test_bluesky.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,4 +267,4 @@ def test_bluesky_verify_credentials_uses_authenticated_session_check(
267267
client.com.atproto.server.get_session.assert_called_once_with()
268268
credentials.refresh_from_db()
269269
assert credentials.last_error == ""
270-
assert credentials.last_verified_at is not None
270+
assert credentials.last_verified_at is not None

0 commit comments

Comments
 (0)