This commit is contained in:
buua436 2025-12-11 19:01:45 +08:00
parent 91a81b735d
commit 4038924415
2 changed files with 28 additions and 11 deletions

View file

@ -28,7 +28,7 @@ class BeginParam(UserFillUpParam):
self.prologue = "Hi! I'm your smart assistant. What can I do for you?" self.prologue = "Hi! I'm your smart assistant. What can I do for you?"
def check(self): def check(self):
self.check_valid_value(self.mode, "The 'mode' should be either `conversational` or `task`", ["conversational", "task"]) self.check_valid_value(self.mode, "The 'mode' should be either `conversational` or `task`", ["conversational", "task","Webhook"])
def get_input_form(self) -> dict[str, dict]: def get_input_form(self) -> dict[str, dict]:
return getattr(self, "inputs") return getattr(self, "inputs")

View file

@ -159,7 +159,12 @@ async def webhook(agent_id: str):
return get_data_error_result(message="Invalid DSL format.") return get_data_error_result(message="Invalid DSL format.")
# 4. Check webhook configuration in DSL # 4. Check webhook configuration in DSL
webhook_cfg = dsl.get("webhook", {}) components = dsl.get("components", {})
for k, _ in components.items():
cpn_obj = components[k]["obj"]
if cpn_obj["component_name"].lower() == "begin" and cpn_obj["params"]["mode"] == "Webhook":
webhook_cfg = cpn_obj["params"]
if not webhook_cfg: if not webhook_cfg:
return get_data_error_result(message="Webhook not configured for this agent.") return get_data_error_result(message="Webhook not configured for this agent.")
@ -259,7 +264,7 @@ async def webhook(agent_id: str):
limit = rl.get("limit", 60) limit = rl.get("limit", 60)
per = rl.get("per", "minute") per = rl.get("per", "minute")
window = {"second": 1, "minute": 60, "hour": 3600}.get(per, 60) window = {"second": 1, "minute": 60, "hour": 3600, "day": 86400}.get(per, 60)
key = f"rl:{agent_id}" key = f"rl:{agent_id}"
now = int(time.time()) now = int(time.time())
@ -277,8 +282,9 @@ async def webhook(agent_id: str):
def _validate_token_auth(security_cfg): def _validate_token_auth(security_cfg):
"""Validate header-based token authentication.""" """Validate header-based token authentication."""
header = security_cfg.get("token_header") token_cfg = security_cfg.get("token",{})
token_value = security_cfg.get("token_value") header = token_cfg.get("token_header")
token_value = token_cfg.get("token_value")
provided = request.headers.get(header) provided = request.headers.get(header)
if provided != token_value: if provided != token_value:
@ -344,7 +350,8 @@ async def webhook(agent_id: str):
raise Exception("Invalid HMAC signature") raise Exception("Invalid HMAC signature")
try: try:
await validate_webhook_security(webhook_cfg.get("security", {})) security_config=webhook_cfg.get("security", {})
await validate_webhook_security(security_config)
except Exception as e: except Exception as e:
return get_data_error_result(message=str(e)) return get_data_error_result(message=str(e))
@ -687,15 +694,25 @@ async def webhook(agent_id: str):
return value return value
def render_template(text: str, clean_request: dict): def render_template(tpl, clean_request: dict):
matches = placeholder_pattern.findall(text) if isinstance(tpl, dict):
results = {} return {k: render_template(v, clean_request) for k, v in tpl.items()}
if isinstance(tpl, list):
return [render_template(item, clean_request) for item in tpl]
if not isinstance(tpl, str):
return tpl
matches = placeholder_pattern.findall(tpl)
rendered = tpl
for m in matches: for m in matches:
val = extract_placeholder_value(m, clean_request) val = extract_placeholder_value(m, clean_request)
results[m] = val rendered = rendered.replace(f"{{{m}}}", str(val))
return rendered
return results
# Render "{xxx@query.xxx}" syntax # Render "{xxx@query.xxx}" syntax
headers = render_template(headers_tpl, clean_request) headers = render_template(headers_tpl, clean_request)
body = render_template(body_tpl, clean_request) body = render_template(body_tpl, clean_request)