diff --git a/lambdas/handlers/edge_presign_handler.py b/lambdas/handlers/edge_presign_handler.py index 1c9de21eb..a7554c731 100644 --- a/lambdas/handlers/edge_presign_handler.py +++ b/lambdas/handlers/edge_presign_handler.py @@ -15,6 +15,10 @@ def lambda_handler(event, context): logger.info("Edge received S3 request") logger.info(f"Request: {request}") + if request['method'] == 'OPTIONS': + logger.info("Edge received OPTIONS request, forwarding without modification") + return request + environment = context.function_name.split(".")[-1].split("_")[0] edge_presign_service = EdgePresignService(environment) diff --git a/lambdas/tests/unit/enums/test_edge_presign_values.py b/lambdas/tests/unit/enums/test_edge_presign_values.py index 56175ba58..ba854f40c 100644 --- a/lambdas/tests/unit/enums/test_edge_presign_values.py +++ b/lambdas/tests/unit/enums/test_edge_presign_values.py @@ -42,6 +42,7 @@ { "cf": { "request": { + "method": "GET", "headers": MOCKED_HEADERS, "querystring": "", "uri": "/some/path", diff --git a/lambdas/tests/unit/handlers/test_edge_presign_handler.py b/lambdas/tests/unit/handlers/test_edge_presign_handler.py index e1aaab19e..697eaf15e 100644 --- a/lambdas/tests/unit/handlers/test_edge_presign_handler.py +++ b/lambdas/tests/unit/handlers/test_edge_presign_handler.py @@ -21,7 +21,7 @@ def mock_edge_presign_service(mocker): return mock_edge_service_instance -def test_lambda_handler_success(valid_event, context, mock_edge_presign_service): +def test_lambda_handler_get_success(valid_event, context, mock_edge_presign_service): request_body = valid_event["Records"][0]["cf"]["request"] modified_request = copy.deepcopy(request_body) modified_request["uri"] = "/path/to/resource" @@ -41,7 +41,7 @@ def test_lambda_handler_success(valid_event, context, mock_edge_presign_service) assert response["querystring"] == "key=value" -def test_lambda_handler_exception(valid_event, context, mock_edge_presign_service): +def test_lambda_handler_get_exception(valid_event, context, mock_edge_presign_service): mock_edge_presign_service.use_presigned.side_effect = CloudFrontEdgeException( 400, LambdaError.MockError ) @@ -54,3 +54,13 @@ def test_lambda_handler_exception(valid_event, context, mock_edge_presign_servic assert actual_status == 400 assert actual_response["message"] == "Client error" assert actual_response["err_code"] == "AB_XXXX" + +def test_lambda_handler_options_success(valid_event, context, mock_edge_presign_service): + valid_event["Records"][0]["cf"]["request"]["method"] = "OPTIONS" + + response = lambda_handler(valid_event, context) + + mock_edge_presign_service.use_presigned.assert_not_called() + mock_edge_presign_service.update_s3_headers.assert_not_called() + + assert response == valid_event["Records"][0]["cf"]["request"] \ No newline at end of file