auto prepend scheme to url (#1335)

This commit is contained in:
LawyZheng 2024-12-06 11:56:12 +08:00 committed by GitHub
parent db5b9d1dbd
commit 873b484ffa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 72 additions and 16 deletions

View file

@ -2,8 +2,11 @@ from datetime import datetime
from enum import StrEnum
from typing import Any, List
from pydantic import BaseModel
from fastapi import status
from pydantic import BaseModel, HttpUrl, field_validator
from skyvern.exceptions import BlockedHost, SkyvernHTTPException
from skyvern.forge.sdk.core.validators import is_blocked_host, prepend_scheme_and_validate_url
from skyvern.forge.sdk.schemas.tasks import ProxyLocation
from skyvern.forge.sdk.workflow.exceptions import WorkflowDefinitionHasDuplicateBlockLabels
from skyvern.forge.sdk.workflow.models.block import BlockTypeVar
@ -17,6 +20,26 @@ class WorkflowRequestBody(BaseModel):
totp_verification_url: str | None = None
totp_identifier: str | None = None
@field_validator("webhook_callback_url", "totp_verification_url")
@classmethod
def validate_urls(cls, url: str | None) -> str | None:
if url is None:
return None
try:
url = prepend_scheme_and_validate_url(url=url)
v = HttpUrl(url=url)
except Exception as e:
raise SkyvernHTTPException(message=str(e), status_code=status.HTTP_400_BAD_REQUEST)
if not v.host:
return None
host = v.host
blocked = is_blocked_host(host)
if blocked:
raise BlockedHost(host=host)
return str(v)
class RunWorkflowResponse(BaseModel):
workflow_id: str