Files
SafeLine/mcp_server/tools/create_http_application.py

43 lines
1.6 KiB
Python
Raw Normal View History

2025-04-02 21:51:51 +08:00
from pydantic import BaseModel, Field
from utils.request import post_slce_api
2025-04-03 16:21:13 +08:00
from tools import Tool, ABCTool, tools
2025-04-02 21:51:51 +08:00
from urllib.parse import urlparse
2025-04-03 16:21:13 +08:00
@tools.register
class CreateHttpApplication(BaseModel, ABCTool):
2025-04-02 21:51:51 +08:00
domain: str = Field(default="",description="application domain, if empty, match all domain")
2025-04-03 17:44:57 +08:00
port: int = Field(min=1, max=65535,description="application listen port, must between 1 and 65535")
2025-04-02 21:51:51 +08:00
upstream: str = Field(description="application proxy address, must be a valid url")
2025-04-03 16:21:13 +08:00
@classmethod
async def run(self, arguments:dict) -> str:
2025-04-03 17:44:57 +08:00
try:
req = CreateHttpApplication.model_validate(arguments)
parsed_upstream = urlparse(req.upstream)
if parsed_upstream.scheme != "https" and parsed_upstream.scheme != "http":
return "invalid upstream scheme"
2025-04-03 16:21:13 +08:00
2025-04-03 17:44:57 +08:00
if parsed_upstream.hostname == "":
return "invalid upstream host"
except Exception as e:
return str(e)
2025-04-03 16:21:13 +08:00
return await post_slce_api("/api/open/site",{
2025-04-03 17:44:57 +08:00
"server_names": [req.domain],
"ports": [ str(req.port) ],
"upstreams": [ req.upstream ],
2025-04-03 16:21:13 +08:00
"type": 0,
"static_default": 1,
"health_check": True,
"load_balance": {
"balance_type": 1
}
})
@classmethod
def tool(self) -> Tool:
return Tool(
2025-04-07 07:41:42 +00:00
name="waf_ create_http_application",
2025-04-03 16:21:13 +08:00
description="在雷池 WAF 上创建一个站点应用",
inputSchema=self.model_json_schema()
)