From 0ef476466fd8688053b68c3cb03f39b945056e87 Mon Sep 17 00:00:00 2001 From: Gagan Trivedi Date: Fri, 19 Jan 2024 14:16:30 +0530 Subject: [PATCH] fix(sse/stream_access_logs): handle invalid log (#3307) --- api/sse/sse_service.py | 10 +++++++++- api/tests/unit/sse/test_sse_service.py | 3 ++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/api/sse/sse_service.py b/api/sse/sse_service.py index 3e15b116dc51..9a53df9c2758 100644 --- a/api/sse/sse_service.py +++ b/api/sse/sse_service.py @@ -1,4 +1,5 @@ import csv +import logging from functools import wraps from io import StringIO from typing import Generator @@ -10,6 +11,8 @@ from sse import tasks from sse.dataclasses import SSEAccessLogs +logger = logging.getLogger(__name__) + GNUPG_HOME = "/app/.gnupg" @@ -64,6 +67,11 @@ def stream_access_logs() -> Generator[SSEAccessLogs, None, None]: reader = csv.reader(StringIO(decrypted_body.data.decode())) for row in reader: - yield SSEAccessLogs(*row) + try: + log = SSEAccessLogs(*row) + except TypeError: + logger.warning("Invalid row in SSE access log file: %s", row) + continue + yield log log_file.delete() diff --git a/api/tests/unit/sse/test_sse_service.py b/api/tests/unit/sse/test_sse_service.py index 1975100d02b0..5bb2aca523a6 100644 --- a/api/tests/unit/sse/test_sse_service.py +++ b/api/tests/unit/sse/test_sse_service.py @@ -114,7 +114,8 @@ def test_stream_access_logs(mocker: MockerFixture, aws_credentials: None) -> Non first_encrypted_object_data = b"first_bucket_encrypted_data" first_decrypted_object_data = ( f"{first_log.generated_at},{first_log.api_key}\n" - f"{second_log.generated_at},{second_log.api_key}".encode() + f"{second_log.generated_at},{second_log.api_key}\n" + "some,invalid,log,entry,111,222".encode() ) second_encrypted_object_data = b"second_bucket_encrypted_data" second_decrypted_object_data = (