From c6cdf11ce82d734814b11f16362722e7badce118 Mon Sep 17 00:00:00 2001 From: Joshua Hiller Date: Wed, 10 Apr 2024 11:36:48 -0400 Subject: [PATCH] Fix workflow import multipart handling. Closes #1145. --- src/falconpy/workflows.py | 13 +++++++++++-- tests/test_workflows.py | 2 ++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/falconpy/workflows.py b/src/falconpy/workflows.py index 299e5ca28..450286b14 100644 --- a/src/falconpy/workflows.py +++ b/src/falconpy/workflows.py @@ -173,14 +173,23 @@ def import_definition(self: object, parameters: dict = None, **kwargs) -> Dict[s https://assets.falcon.crowdstrike.com/support/api/swagger.html#/workflows/WorkflowDefinitionsImport """ data_file = kwargs.get("data_file", None) - if data_file: + content_type = "application/x-yaml" + # Create a multipart form payload for our upload file + try: + with open(data_file, "r", encoding="utf-8") as yaml_file: + file_data = yaml_file.read() + file_extended = {"name": "yaml_upload", "data_file": file_data, "type": content_type} + except FileNotFoundError: + data_file = None + + if data_file and file_data: returned = process_service_request( calling_object=self, endpoints=Endpoints, operation_id="WorkflowDefinitionsImport", keywords=kwargs, params=parameters, - data=data_file + files=file_extended ) else: returned = generate_error_result("You must provide a workflow file in YAML format to import.") diff --git a/tests/test_workflows.py b/tests/test_workflows.py index cd1821e1d..708f00410 100644 --- a/tests/test_workflows.py +++ b/tests/test_workflows.py @@ -35,6 +35,8 @@ def run_all_tests(self): "WorkflowDefinitionsExport": falcon.export_definition(), "WorkflowDefinitionsImport": falcon.import_definition(validate_only=True, data_file="this_will_415"), "WorkflowDefinitionsImport": falcon.import_definition(validate_only=True, file_data="this_will_500"), + "WorkflowDefinitionsImport": falcon.import_definition(validate_only=True, data_file="not_here.yml"), + "WorkflowDefinitionsImport": falcon.import_definition(validate_only=True, data_file="tests/test.yml"), "WorkflowDefinitionsUpdate": falcon.update_definition(change_log="testing"), "WorkflowGetHumanInputV1": falcon.get_human_input(ids="1234567"), "WorkflowUpdateHumanInputV1": falcon.update_human_input(input="whatever", note="whatever"),