# ПЛАН: тест-режим «только загрузка» (для Флэша) _Дата: 2026-08-23. Цель: при нажатии «Обфусцировать» — только загрузить файлы (браузер→ВМ→Flask), НЕ запускать обработку (SSE/LLM/обфускацию)._ ## Суть Добавить флаг тест-режима в фронтенд. Когда он включён, `uploadFiles()` проходит Фазу 1 полностью (PUT на ВМ + `POST /api/upload_refs` — pull в сессию), а потом **останавливается до Фазы 2** (не открывает EventSource, не запускает обработку). Плюс опциональный отладочный endpoint на бэке — проверить, что файлы реально легли в сессию с корректными размерами. --- ## Изменение 1 — флаг (site/templates/index.html) В начало скрипта, рядом с `VM_UPLOAD_URL` (строка ~201), добавить: ```js // Тест-режим: открыть страницу с ?upload-only=1 → только загрузка, без обработки const TEST_UPLOAD_ONLY = new URLSearchParams(location.search).get('upload-only') === '1'; ``` ## Изменение 2 — ранний выход после загрузки (site/templates/index.html) В `uploadFiles()`, сразу ПОСЛЕ блока «Шаг 1b» (try/catch `POST /api/upload_refs`) и ПЕРЕД комментарием `// Фаза 2: обработка (SSE — прогресс по каждому файлу)`. При этом в шаге 1b зафиксировать число загруженных файлов. Сейчас там: ```js const data = await resp.json(); if (!data.ok) throw new Error(data.error || 'HTTP ' + resp.status); currentSid = data.session; ``` Запомнить count: ```js const data = await resp.json(); if (!data.ok) throw new Error(data.error || 'HTTP ' + resp.status); currentSid = data.session; uploadedCount = data.count || refs.length; // сколько реально легло в сессию ``` (объявить `let uploadedCount = 0;` рядом с `const refs = [];` в начале Фазы 1). Сразу после `catch` шага 1b вставить: ```js if (TEST_UPLOAD_ONLY) { st.className = 'status done'; st.textContent = '✅ Загружено ' + uploadedCount + ' файлов (тест: обработка пропущена). Сессия: ' + currentSid; ub.disabled = false; return; } ``` То есть: показываем итог, снова включаем кнопку, выходим из функции. Фаза 2 не выполняется. ## Изменение 3 (опционально, рекомендуется) — debug-endpoint (site/routes/api_bp.py) Чтобы проверить размеры файлов в сессии (не повредились ли при pull), добавить: ```python @api_bp.route("/session_files/", methods=["GET"]) def session_files(sid): """Отладка: список файлов сессии с размерами.""" files = get_files(sid) if files is None: return jsonify({"ok": False, "error": "Session not found"}), 404 return jsonify({ "ok": True, "count": len(files), "files": [{"name": n, "size": len(b)} for n, b in files], }) ``` `get_files` уже импортирован в `api_bp.py`. Endpoint временный — убрать после теста. --- ## Как тестировать 1. Поднять сервис (локально `cd site && python app.py` или redeploy на Штурвале). 2. Открыть `https://drhider.pythonk8s.dev.nubes.ru/?upload-only=1` (или `http://127.0.0.1:5000/?upload-only=1`). 3. Выбрать файлы (в т.ч. большой >1МБ), нажать «Обфусцировать». 4. Ожидать: прогресс «Загрузка на ВМ…» по каждому файлу → «Передача ссылок…» → «✅ Загружено N файлов (тест: обработка пропущена)». SSE НЕ открывается. 5. (Если сделан п.3) в консоли/curl: `curl /api/session_files/` → сверить `size` с оригиналом. 6. Проверить на ВМ: после pull файлы удалены (`ls /var/www/drhider-upload/` пусто). ## Как вернуть обратно (после теста) - Флаг `TEST_UPLOAD_ONLY` без `?upload-only=1` даёт обычное поведение — **ничего выпиливать не надо**, режим включается только query-параметром. - Debug-endpoint (п.3) — убрать, когда тест завершён (или оставить под комментарием «отладка»). ## Замечания - НЕ трогать бэк-логику pull (`/api/upload_refs`) — она уже работает (v0.0.58). - НЕ менять Фазу 2 (SSE) — только добавить ранний `return` до неё. - После правки: `python3 -c "import py_compile; py_compile.compile('site/routes/api_bp.py', doraise=True)"`, JS проверить `node --check` (извлечь блок `