Files
drhider/History/upload/2026-08-23-test-upload-only-plan.md
T

107 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ПЛАН: тест-режим «только загрузка» (для Флэша)
_Дата: 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/<sid>", 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/<sid>` → сверить `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` (извлечь блок `<script>` из index.html).
- Версию `VERSION` в `site/app.py` НЕ поднимать, пока это тестовый режим — либо поднять, если деплоим.