From 1a1ba58a2c34e1f79ba0b9e1ce3669d791462640 Mon Sep 17 00:00:00 2001 From: Shuchang Zheng Date: Wed, 23 Oct 2024 22:47:11 -0700 Subject: [PATCH 1/3] enforce collection id for login parameters --- skyvern/forge/sdk/workflow/exceptions.py | 8 ++++++++ skyvern/forge/sdk/workflow/service.py | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/skyvern/forge/sdk/workflow/exceptions.py b/skyvern/forge/sdk/workflow/exceptions.py index f9e64defa..96e09813d 100644 --- a/skyvern/forge/sdk/workflow/exceptions.py +++ b/skyvern/forge/sdk/workflow/exceptions.py @@ -99,3 +99,11 @@ def __init__(self, file_url: str, file_type: str, error: str) -> None: f"File URL {file_url} is not a valid {file_type} file. Error: {error}", status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, ) + + +class WorkflowParameterMissingRequiredValue(BaseWorkflowHTTPException): + def __init__(self, workflow_parameter_type: str, workflow_parameter_key: str, required_value: str) -> None: + super().__init__( + f"Missing required value for workflow parameter. Workflow parameter type: {workflow_parameter_type}. workflow_parameter_key: {workflow_parameter_key}. Required value: {required_value}", + status_code=status.HTTP_400_BAD_REQUEST, + ) diff --git a/skyvern/forge/sdk/workflow/service.py b/skyvern/forge/sdk/workflow/service.py index 6404cd375..4d9b4016d 100644 --- a/skyvern/forge/sdk/workflow/service.py +++ b/skyvern/forge/sdk/workflow/service.py @@ -19,6 +19,7 @@ InvalidWorkflowDefinition, WorkflowDefinitionHasDuplicateParameterKeys, WorkflowDefinitionHasReservedParameterKeys, + WorkflowParameterMissingRequiredValue, ) from skyvern.forge.sdk.workflow.models.block import ( BlockStatus, @@ -957,6 +958,12 @@ async def create_workflow_from_request( description=parameter.description, ) elif parameter.parameter_type == ParameterType.BITWARDEN_LOGIN_CREDENTIAL: + if not parameter.bitwarden_collection_id: + raise WorkflowParameterMissingRequiredValue( + workflow_parameter_type=ParameterType.BITWARDEN_LOGIN_CREDENTIAL, + workflow_parameter_key=parameter.key, + required_value="bitwarden_collection_id", + ) parameters[parameter.key] = await self.create_bitwarden_login_credential_parameter( workflow_id=workflow.workflow_id, bitwarden_client_id_aws_secret_key=parameter.bitwarden_client_id_aws_secret_key, From fc5e5611e33d18fa2f962d6883f8608338183f01 Mon Sep 17 00:00:00 2001 From: Shuchang Zheng Date: Wed, 23 Oct 2024 22:58:43 -0700 Subject: [PATCH 2/3] raise 400 error --- skyvern/forge/sdk/routes/agent_protocol.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/skyvern/forge/sdk/routes/agent_protocol.py b/skyvern/forge/sdk/routes/agent_protocol.py index fdd2eb9f0..e4034a48e 100644 --- a/skyvern/forge/sdk/routes/agent_protocol.py +++ b/skyvern/forge/sdk/routes/agent_protocol.py @@ -51,7 +51,11 @@ ) from skyvern.forge.sdk.services import org_auth_service from skyvern.forge.sdk.settings_manager import SettingsManager -from skyvern.forge.sdk.workflow.exceptions import FailedToCreateWorkflow, FailedToUpdateWorkflow +from skyvern.forge.sdk.workflow.exceptions import ( + FailedToCreateWorkflow, + FailedToUpdateWorkflow, + WorkflowParameterMissingRequiredValue, +) from skyvern.forge.sdk.workflow.models.workflow import ( RunWorkflowResponse, Workflow, @@ -707,6 +711,8 @@ async def create_workflow( return await app.WORKFLOW_SERVICE.create_workflow_from_request( organization=current_org, request=workflow_create_request ) + except WorkflowParameterMissingRequiredValue as e: + raise e except Exception as e: LOG.error("Failed to create workflow", exc_info=True, organization_id=current_org.organization_id) raise FailedToCreateWorkflow(str(e)) From e9b9cdbee8e91722fbdfbd0a413b0ed57e7b8a7a Mon Sep 17 00:00:00 2001 From: Shuchang Zheng Date: Wed, 23 Oct 2024 23:17:56 -0700 Subject: [PATCH 3/3] same for workflow update --- skyvern/forge/sdk/routes/agent_protocol.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/skyvern/forge/sdk/routes/agent_protocol.py b/skyvern/forge/sdk/routes/agent_protocol.py index e4034a48e..7fa0f8556 100644 --- a/skyvern/forge/sdk/routes/agent_protocol.py +++ b/skyvern/forge/sdk/routes/agent_protocol.py @@ -759,6 +759,8 @@ async def update_workflow( request=workflow_create_request, workflow_permanent_id=workflow_permanent_id, ) + except WorkflowParameterMissingRequiredValue as e: + raise e except Exception as e: LOG.exception("Failed to update workflow", workflow_permanent_id=workflow_permanent_id) raise FailedToUpdateWorkflow(workflow_permanent_id, f"<{type(e).__name__}: {str(e)}>")