mirror of
https://github.com/langgenius/dify.git
synced 2026-11-13 06:41:07 +08:00
42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
"""
|
|
Helper module for Creators Platform integration.
|
|
|
|
Uploads application packages and generates redirect URLs with claim codes
|
|
and optional OAuth authorization codes.
|
|
"""
|
|
|
|
from typing import BinaryIO
|
|
from urllib.parse import urlencode
|
|
|
|
import httpx
|
|
from yarl import URL
|
|
|
|
from configs import dify_config
|
|
from core.helper import ssrf_proxy
|
|
|
|
_CREATORS_REQUEST_TIMEOUT = httpx.Timeout(30.0, connect=5.0)
|
|
|
|
|
|
def upload_package(source: BinaryIO, *, filename: str) -> str:
|
|
url = str(URL(str(dify_config.CREATORS_PLATFORM_API_URL)) / "api/v1/templates/anonymous-upload")
|
|
response = ssrf_proxy.post(
|
|
url,
|
|
files={"file": (filename, source, "application/octet-stream")},
|
|
timeout=_CREATORS_REQUEST_TIMEOUT,
|
|
max_retries=0,
|
|
)
|
|
response.raise_for_status()
|
|
data = response.json().get("data")
|
|
claim_code = data.get("claim_code") if isinstance(data, dict) else None
|
|
if not isinstance(claim_code, str) or not claim_code:
|
|
raise ValueError("Creators Platform did not return a valid claim_code")
|
|
return claim_code
|
|
|
|
|
|
def get_redirect_url(claim_code: str, *, oauth_code: str | None = None) -> str:
|
|
base_url = str(dify_config.CREATORS_PLATFORM_API_URL).rstrip("/")
|
|
params: dict[str, str] = {"dsl_claim_code": claim_code}
|
|
if oauth_code:
|
|
params["oauth_code"] = oauth_code
|
|
return f"{base_url}?{urlencode(params)}"
|