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

5.5 KiB
Raw Blame History

ПЛАН: тест-режим «только загрузка» (для Флэша)

Дата: 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), добавить:

// Тест-режим: открыть страницу с ?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 зафиксировать число загруженных файлов. Сейчас там:

    const data = await resp.json();
    if (!data.ok) throw new Error(data.error || 'HTTP ' + resp.status);
    currentSid = data.session;

Запомнить count:

    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 вставить:

  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), добавить:

@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 НЕ поднимать, пока это тестовый режим — либо поднять, если деплоим.