|
| 1 | +from pydantic import BaseModel, Field |
| 2 | +from utils.request import get_slce_api |
| 3 | +from tools import Tool, ABCTool, tools |
| 4 | +from urllib.parse import urlparse |
| 5 | +@tools.register |
| 6 | +class CreateHttpApplication(BaseModel, ABCTool): |
| 7 | + ip: str = Field(default="", description="the attacker's client IP address") |
| 8 | + size: int = Field(default=10, min=1, max=100, description="the number of results to return") |
| 9 | + start: str = Field(default="", description="start time, millisecond timestamp") |
| 10 | + end: str = Field(default="", description="end time, millisecond timestamp") |
| 11 | + |
| 12 | + @classmethod |
| 13 | + async def run(self, arguments:dict) -> str: |
| 14 | + try: |
| 15 | + req = CreateHttpApplication.model_validate(arguments) |
| 16 | + parsed_upstream = urlparse(req.upstream) |
| 17 | + if parsed_upstream.scheme not in ["https", "http"]: |
| 18 | + return "invalid upstream scheme" |
| 19 | + |
| 20 | + if parsed_upstream.hostname == "": |
| 21 | + return "invalid upstream host" |
| 22 | + except Exception as e: |
| 23 | + return str(e) |
| 24 | + |
| 25 | + return await get_slce_api(f"api/open/events?page=1&page_size={req.size}&ip={req.ip}&start={req.start}&end={req.end}") |
| 26 | + |
| 27 | + @classmethod |
| 28 | + def tool(self) -> Tool: |
| 29 | + return Tool( |
| 30 | + name="waf_get_attack_events", |
| 31 | + description="获取雷池 WAF 所记录的攻击事件", |
| 32 | + inputSchema=self.model_json_schema() |
| 33 | + ) |
0 commit comments