diff --git a/History/opus-drhider-reuse-analysis-2026-06-29.md b/History/opus-drhider-reuse-analysis-2026-06-29.md new file mode 100644 index 0000000..06bedd2 --- /dev/null +++ b/History/opus-drhider-reuse-analysis-2026-06-29.md @@ -0,0 +1,56 @@ +# Opus — анализ: переиспользовать логику загрузки Сверки для DrHider + +Файл: `/home/naeel/nubes/contracts/contracts-flask/History/opus-drhider-reuse-analysis-2026-06-29.md` + +29.06.2026 + +## Ключевые выводы + +### 1. JS: копировать паттерн, не 1:1 + +Основная загрузка в `/home/naeel/nubes/contracts/contracts-flask/deploy/files.js`: +- `XMLHttpRequest` + `FormData` + `xhr.upload.onprogress` +- Один файл, ждёт JSON с `doc_id` +- Умеет `.doc → /convert-doc` + +Для DrHider адаптировать: +- `files.forEach(f => fd.append('files', f, f.name))` — много файлов +- `xhr.responseType = 'blob'` — ждём ZIP +- `onload` → скачивание ZIP +- POST на `VM_API + '/api/drhider'` +- Drag&drop оставить из текущего drhider.html + +### 2. parse_multipart — для ОДНОГО файла + +`/home/naeel/nubes/contracts/contracts-flask/deploy/services/upload.py:parse_multipart` берёт `fs["files"]`, если список — `item[0]`. Только первый файл. + +Нужен мульти-парсер той же техникой: `cgi.FieldStorage` + пройти по всем элементам `fs["files"]`. + +### 3. _handle_drhider: заменить JSON/base64 на multipart + +Локальная правка ~15 строк: +- `content_type = self.headers.get("Content-Type")` +- `cl = Content-Length`, `raw = self.rfile.read(cl)` +- Мульти-парс → `files` +- Остальное не трогать: `obfuscate_files(files, llm_client=_VMLLM())` + отправка ZIP + +### 4. Nginx: нужен CORS + timeout + +Текущий `/api/` — 30s timeout, без CORS для OPTIONS. +Для `/api/drhider`: +- `client_max_body_size 100m` +- `proxy_read_timeout 300s` +- CORS: preflight OPTIONS + `Access-Control-Allow-Origin` + +### 5. Рассинхрон бэкендов + +drhider.html шлёт на относительный `/api/drhider` → managed Flask. +Нужно: слать на `https://contracts.kube5s.ru/api/drhider` (VM напрямую). +Flask-обработчик убрать. + +## План правок + +1. `/home/naeel/nubes/contracts/contracts-flask/site/templates/drhider.html` — JS: XHR+FormData вместо fetch+JSON, URL на VM +2. `/home/naeel/nubes/contracts/contracts-flask/deploy/convert_server.py` — `_handle_drhider`: multipart вместо JSON +3. `/etc/nginx/sites-enabled/nginx-contracts.conf` — CORS для `/api/drhider` +4. `/home/naeel/nubes/contracts/contracts-flask/site/app.py` — убрать `/api/drhider`