From 83bd6f89b91c2c5c6f71946eacf4cc27a6985913 Mon Sep 17 00:00:00 2001 From: LawyZheng Date: Wed, 22 Oct 2025 13:38:48 +0800 Subject: [PATCH] prepend scheme to login endpoint url (#3787) --- skyvern/forge/sdk/routes/run_blocks.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/skyvern/forge/sdk/routes/run_blocks.py b/skyvern/forge/sdk/routes/run_blocks.py index 652863de..b91a0c7c 100644 --- a/skyvern/forge/sdk/routes/run_blocks.py +++ b/skyvern/forge/sdk/routes/run_blocks.py @@ -30,6 +30,7 @@ from skyvern.schemas.workflows import ( WorkflowStatus, ) from skyvern.services import workflow_service +from skyvern.utils.url_validators import prepend_scheme_and_validate_url LOG = structlog.get_logger() DEFAULT_LOGIN_PROMPT = """If you're not on the login page, navigate to login page and login using the credentials given. @@ -74,6 +75,15 @@ async def login( organization: Organization = Depends(org_auth_service.get_current_org), x_api_key: Annotated[str | None, Header()] = None, ) -> WorkflowRunResponse: + try: + url = prepend_scheme_and_validate_url(login_request.url) if login_request.url else None + totp_verification_url = ( + prepend_scheme_and_validate_url(login_request.totp_url) if login_request.totp_url else None + ) + webhook_url = prepend_scheme_and_validate_url(login_request.webhook_url) if login_request.webhook_url else None + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) from e + # 1. create empty workflow with a credential parameter new_workflow = await app.WORKFLOW_SERVICE.create_empty_workflow( organization, @@ -157,11 +167,11 @@ async def login( login_block_yaml = LoginBlockYAML( label=label, title=label, - url=login_request.url, + url=url, navigation_goal=login_request.prompt or DEFAULT_LOGIN_PROMPT, max_steps_per_run=10, parameter_keys=[parameter_key], - totp_verification_url=login_request.totp_url, + totp_verification_url=totp_verification_url, totp_identifier=login_request.totp_identifier, ) yaml_blocks = [login_block_yaml] @@ -190,9 +200,9 @@ async def login( request_id = context.request_id legacy_workflow_request = WorkflowRequestBody( proxy_location=login_request.proxy_location, - webhook_callback_url=login_request.webhook_url, + webhook_callback_url=webhook_url, totp_identifier=login_request.totp_identifier, - totp_verification_url=login_request.totp_url, + totp_verification_url=totp_verification_url, browser_session_id=login_request.browser_session_id, browser_address=login_request.browser_address, max_screenshot_scrolls=login_request.max_screenshot_scrolling_times, @@ -225,8 +235,8 @@ async def login( workflow_id=new_workflow.workflow_id, title=new_workflow.title, proxy_location=login_request.proxy_location, - webhook_url=login_request.webhook_url, - totp_url=login_request.totp_url, + webhook_url=webhook_url, + totp_url=totp_verification_url, totp_identifier=login_request.totp_identifier, browser_session_id=login_request.browser_session_id, max_screenshot_scrolls=login_request.max_screenshot_scrolling_times,