docs: план тест-режима 'только загрузка' (?upload-only=1) для проверки ВМ-загрузки без обработки
Deploy drhider / validate (push) Canceled after 0s
Deploy drhider / validate (push) Canceled after 0s
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
# ПЛАН: тест-режим «только загрузка» (для Флэша)
|
||||
|
||||
_Дата: 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` НЕ поднимать, пока это тестовый режим — либо поднять, если деплоим.
|
||||
Reference in New Issue
Block a user