From f609fe335a016a1ee2dbb447e6e66b653f2ea717 Mon Sep 17 00:00:00 2001 From: Anish Mehta Date: Fri, 30 Oct 2026 22:29:33 +0530 Subject: [PATCH] fix(data_classes): return None from TransferFamilyAuthorizer.password when the event has none --- .../utilities/data_classes/transfer_family_event.py | 4 ++-- .../test_transfer_family_event.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/aws_lambda_powertools/utilities/data_classes/transfer_family_event.py b/aws_lambda_powertools/utilities/data_classes/transfer_family_event.py index fbc501a0ea9..f0f8ddd8ac6 100644 --- a/aws_lambda_powertools/utilities/data_classes/transfer_family_event.py +++ b/aws_lambda_powertools/utilities/data_classes/transfer_family_event.py @@ -18,9 +18,9 @@ def username(self) -> str: def password(self) -> str | None: """ The password used for authentication. - None in case customer authenticating with certificates + None when the event has no password, e.g. when the user authenticates with an SSH key """ - return self["password"] + return self.get("password") @property def protocol(self) -> str: diff --git a/tests/unit/data_classes/required_dependencies/test_transfer_family_event.py b/tests/unit/data_classes/required_dependencies/test_transfer_family_event.py index 962152097ab..60eb937db84 100644 --- a/tests/unit/data_classes/required_dependencies/test_transfer_family_event.py +++ b/tests/unit/data_classes/required_dependencies/test_transfer_family_event.py @@ -20,6 +20,16 @@ def test_transfer_family_authorizer_event(): assert parsed_event.source_ip == raw_event["sourceIp"] +def test_transfer_family_authorizer_event_without_password(): + # GIVEN an authorizer event with no password, as for a user authenticating with an SSH key + raw_event = load_event("transferFamilyAuthorizer.json") + del raw_event["password"] + + # WHEN reading the password + # THEN it is None, matching the property's type and the Pydantic model's default + assert TransferFamilyAuthorizer(raw_event).password is None + + @pytest.mark.parametrize("home_directory_type", ["LOGICAL", "PATH"]) def test_build_authentication_response_s3(home_directory_type): # GIVEN a Authorizer response