fix: XHR+FormData like main service, multipart on VM — v1.3
Deploy contracts-flask / validate (push) Successful in 0s

This commit is contained in:
2026-06-29 18:05:26 +04:00
parent 0a663645c6
commit f5f8bf294b
2 changed files with 51 additions and 48 deletions
+24 -12
View File
@@ -215,24 +215,36 @@ class Handler(BaseHTTPRequestHandler):
# ── POST /api/drhider ────────────────────────────────────────────────
def _handle_drhider(self):
"""Обфускация: JSON {files: [{name, data: base64}]} → ZIP."""
"""Обфускация: multipart files → ZIP."""
from services.drhider import obfuscate_files
import base64
import cgi, io as io_mod
length = int(self.headers.get("Content-Length", 0))
raw = self.rfile.read(length)
ctype = self.headers.get("Content-Type", "")
body = json.loads(raw) if raw else {}
raw_files = body.get("files", [])
if not raw_files:
self._json({"ok": False, "error": "No files"}, 400)
return
# Простой multipart приём (как в upload.py)
import cgi, io as io_mod
_, params = cgi.parse_header(ctype)
fs = cgi.FieldStorage(
fp=io_mod.BytesIO(raw),
environ={'REQUEST_METHOD': 'POST', 'CONTENT_TYPE': ctype},
keep_blank_values=True
)
items = fs.getlist("files") if hasattr(fs, 'getlist') else ([fs["files"]] if "files" in fs else [])
files = []
for f in raw_files:
name = f.get("name", "unnamed")
data = base64.b64decode(f.get("data", ""))
files.append((name, data, f.get("type", "")))
for item in items:
if not getattr(item, 'filename', None):
continue
name = os.path.basename(item.filename)
if not name or ".." in name or "/" in name or "\\" in name:
continue
data = item.file.read()
files.append((name, data, ""))
if not files:
self._json({"ok": False, "error": "Нет файлов"}, 400)
return
class _VMLLM:
def complete(self, prompt):