fix: исправлен endpoint PT Sandbox /api/v1/files/upload -> /api/v1/scan/checkFile + async_result&scan_id
This commit is contained in:
1 parent
ad450ccb12
commit
35a750ca1c
2 files changed
+15
-11
No files matched your search
+2
-2
@@ -49,8 +49,8 @@ pt_sandbox:
|
|||||||
# Отключать проверку SSL-сертификата (для самоподписанных сертификатов)
|
# Отключать проверку SSL-сертификата (для самоподписанных сертификатов)
|
||||||
verify_ssl: true
|
verify_ssl: true
|
||||||
|
|
||||||
# Endpoint для загрузки файла на анализ
|
# Endpoint для загрузки и запуска проверки файла
|
||||||
upload_endpoint: "/api/v1/files/upload"
|
upload_endpoint: "/api/v1/scan/checkFile"
|
||||||
|
|
||||||
# Заголовок и значение для авторизации в Sandbox
|
# Заголовок и значение для авторизации в Sandbox
|
||||||
auth_header: "X-API-Key"
|
auth_header: "X-API-Key"
|
||||||
|
|||||||
@@ -355,7 +355,7 @@ class PTSandboxClient:
|
|||||||
def __init__(self, cfg: dict):
|
def __init__(self, cfg: dict):
|
||||||
sb_cfg = cfg["pt_sandbox"]
|
sb_cfg = cfg["pt_sandbox"]
|
||||||
self.base_url = sb_cfg["base_url"].rstrip("/")
|
self.base_url = sb_cfg["base_url"].rstrip("/")
|
||||||
self.upload_endpoint = sb_cfg.get("upload_endpoint", "/api/v1/files/upload")
|
self.upload_endpoint = sb_cfg.get("upload_endpoint", "/api/v1/scan/checkFile")
|
||||||
self.auth_header = sb_cfg.get("auth_header", "X-API-Key")
|
self.auth_header = sb_cfg.get("auth_header", "X-API-Key")
|
||||||
self.api_key = sb_cfg.get("api_key", "")
|
self.api_key = sb_cfg.get("api_key", "")
|
||||||
self.file_field_name = sb_cfg.get("file_field_name", "file")
|
self.file_field_name = sb_cfg.get("file_field_name", "file")
|
||||||
@@ -380,9 +380,13 @@ class PTSandboxClient:
|
|||||||
|
|
||||||
def upload_file(self, file_path: Path) -> Optional[str]:
|
def upload_file(self, file_path: Path) -> Optional[str]:
|
||||||
"""
|
"""
|
||||||
Отправить файл в PT Sandbox на анализ.
|
Отправить файл в PT Sandbox на анализ (одним запросом — загрузка + запуск проверки).
|
||||||
Возвращает ID задачи (task_id) или None при ошибке.
|
Возвращает ID задачи (scan_id) или None при ошибке.
|
||||||
"""
|
"""
|
||||||
|
params = {
|
||||||
|
"file_name": file_path.name,
|
||||||
|
"async_result": "true",
|
||||||
|
}
|
||||||
url = f"{self.base_url}{self.upload_endpoint}"
|
url = f"{self.base_url}{self.upload_endpoint}"
|
||||||
logger.info("Отправка файла в Sandbox: %s (%d bytes)",
|
logger.info("Отправка файла в Sandbox: %s (%d bytes)",
|
||||||
file_path.name, file_path.stat().st_size)
|
file_path.name, file_path.stat().st_size)
|
||||||
@@ -393,18 +397,18 @@ class PTSandboxClient:
|
|||||||
fields = dict(self.extra_fields)
|
fields = dict(self.extra_fields)
|
||||||
|
|
||||||
resp = self._session.post(
|
resp = self._session.post(
|
||||||
url, files=files, data=fields,
|
url, params=params, files=files, data=fields,
|
||||||
timeout=(self.timeout_connect, self.timeout_read),
|
timeout=(self.timeout_connect, self.timeout_read),
|
||||||
verify=self.verify_ssl,
|
verify=self.verify_ssl,
|
||||||
)
|
)
|
||||||
|
|
||||||
if resp.status_code in (200, 201, 202):
|
if resp.status_code in (200, 201, 202):
|
||||||
result = resp.json()
|
result = resp.json()
|
||||||
task_id = (result.get("task_id") or result.get("id")
|
data = result.get("data", {})
|
||||||
or result.get("uuid") or str(result))
|
scan_id = data.get("scan_id") or result.get("task_id") or result.get("id")
|
||||||
logger.info("Файл %s принят Sandbox. task_id=%s",
|
logger.info("Файл %s принят Sandbox. scan_id=%s",
|
||||||
file_path.name, task_id)
|
file_path.name, scan_id)
|
||||||
return str(task_id)
|
return str(scan_id) if scan_id else None
|
||||||
else:
|
else:
|
||||||
logger.error("Sandbox вернул %s: %s",
|
logger.error("Sandbox вернул %s: %s",
|
||||||
resp.status_code, resp.text[:500])
|
resp.status_code, resp.text[:500])
|
||||||
|
|||||||
Reference in new issue
Block a user