4.6 KiB
Код-ревью DrHider — промпт для Соннета
Ты — строгий ревьюер. Проведи код-ревью сервиса DrHider (Flask + vanilla JS) — обфускация персональных данных в документах.
СТРОГО просматривай ТОЛЬКО эти файлы (больше ничего не читай)
site/app.pysite/routes/api_bp.pysite/session.pysite/templates/index.htmldrhider/__init__.pydrhider/builder.pydrhider/config.pydrhider/extractor.pydrhider/llm_client.pydrhider/obfuscator.pydrhider/replacer.pydrhider/scanner.py
НЕ смотри: History/, docs/, tests/, file_list.csv, files/, TMP/, TSTFILES/.
Контекст (кратко, не лезь в файлы)
- Загрузка файлов: браузер → PUT на ВМ-буфер (
contracts.kube5s.ru/drhider-upload/), затемPOST /api/upload_refs→ Flask тянет файлы egress-GET (pull) в сессию. - Обработка:
GET /api/process_stream/<sid>(SSE) → воркер-поток →obfuscate_files()→ извлечение текста → regex+LLM-сканирование → замена → ZIP + mapping.csv. - Лимиты: 50 МБ/файл, 500 МБ/сессия.
- Есть мягкая отмена (кнопка «Прервать»,
cancel_event).
Вопросы — ответь по каждому, с указанием файла и строки
-
Корректность загрузки (
api_bp.py::upload_refs,index.html::uploadFiles):- атомарность pull при ошибке на середине списка файлов;
- ретраи при DNS/сетевых сбоях — покрыты ли все transient-ошибки;
- различимы ли «сессия не найдена» vs «превышен лимит сессии».
-
SSE/потоки (
api_bp.py::process_stream,obfuscator.py):- корректна ли обработка disconnect клиента и остановка воркера;
- нет ли гонок при
cancel_event/queue/pause_ttl/resume_ttl; - TTL сессии: не умирает ли сессия во время долгой обработки.
-
Соответствие индексов фронт↔бэк (события
start/done/file_*сidx):obfuscator.py::expand_zipsи_dedupe_file_namesмогут изменить число/порядок файлов после того, как фронт уже построил список — не ломается лиsendIdx[d.idx]?
-
Статусы файлов (
index.html): консистентность «пропущен (лимит)» / «не извлечён» / «done» / «analyzed» / «pending»; нет ли путей, где статус зависает или перетирается. -
Безопасность (
extractor.py,session.py,api_bp.py):- path traversal через имена файлов (в т.ч. из ZIP);
- zip-бомба (расширение, сжатие, суммарный размер);
- инъекции/экранирование имён в HTML (
index.html— вывод имён файлов).
-
Утечки/ресурсы: закрытие
httpx-сессий,zipfile,EventSource/XHR, таймеры (setInterval) — всё ли очищается вresetAll/finishProcUI/finally. -
Краевые случаи: пустой файл, файл без текста, битый PDF, дубли имён, отмена на каждом этапе, 0 файлов, все файлы сверх лимита.
-
Что я мог пропустить — любые реальные баги/риски, не перечисленные выше.
Правила ответа
- БЕЗ воды. Только конкретика: файл, функция, строка, суть бага, серьёзность (🔴/🟠/🟡), фикс.
- Не предлагай «улучшения» вне рамок ревью (рефакторинг, стиль) — только баги и риски.
- Если тебе нужен контекст, которого нет выше (назначение функции, формат данных, ожидаемое поведение), — задай уточняющий вопрос, не домысливай.
- В конце — итоговая таблица: баг | файл | строка | серьёзность | что делать.