Files
drhider/History/2026-07-12-audit-and-plan.md
T

96 lines
5.1 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.
# DrHider — Полный аудит и план рефакторинга
**Дата:** 2026-07-12
**Платформа:** Штурвал (Managed Flask) — запускает Flask сам, без Dockerfile/gunicorn
**URL:** https://drhider.pythonk8s.dev.nubes.ru/
**Репозиторий:** https://gitea.services.ngcloud.ru/Nail/drhider
---
## Текущее состояние (аудит каждого файла)
| Файл | Статус | Решение |
|---|---|---|
| `Dockerfile` | ❌ НЕ НУЖЕН | Штурвал сам запускает Flask. Удалить. |
| `drhider_server.py` | ❌ НЕ НУЖЕН | Standalone-сервер с ВМ (:8767). Flask app.py уже обрабатывает /api/drhider. Удалить. |
| `requirements.txt` | ⚠️ Нужны правки | Убрать `gunicorn` и `gevent`. Оставить `flask`, `python-docx`, `pdfplumber`, `httpx`. |
| `.gitignore` | ✅ OK | Без изменений. |
| `.gitea/workflows/deploy.yaml` | ✅ OK | CI для Штурвала. |
| `site/app.py` | ⚠️ Нужны правки | Удалить блок `if __name__ == "__main__"` (gunicorn). При рефакторинге — вынести LLMClient. |
| `site/templates/index.html` | ✅ OK | UI. |
| `site/static/favicon.svg` | ✅ OK | Иконка (из loadtest). |
| `drhider.py` | ⚠️ МОНОЛИТ | 560 строк. Разбить на ~20 модулей. |
| `History/` | ✅ OK | Документация. |
---
## План рефакторинга (Фаза 1: удаление лишнего)
### Шаг 1.1 — Удалить `Dockerfile`
### Шаг 1.2 — Удалить `drhider_server.py`
### Шаг 1.3 — Исправить `requirements.txt` (убрать gunicorn, gevent)
### Шаг 1.4 — Исправить `site/app.py` (убрать блок `if __name__ == "__main__"`)
### Шаг 1.5 — Проверить синтаксис → commit → push
---
## План рефакторинга (Фаза 2: модульная структура)
### Новая структура `drhider/` пакета (вместо `drhider.py` 560 строк):
```
drhider/ # Пакет ядра обфускации
├── __init__.py # re-export: obfuscate_files()
├── config.py # Константы: ENTITY_PATTERNS, COMPANY_PATTERN, PERSON_PATTERN,
│ # RU_SURNAMES, RU_NAMES, RU_PATRONYMICS,
│ # RU_CITIES, RU_STREETS, FAKE_DOMAINS
├── checksum.py # _checksum_inn10, _checksum_inn12, _checksum_ogrn
├── random_utils.py # _random_digits, _random_letters
├── generators/ # Генераторы фиктивных значений
│ ├── __init__.py # ENTITY_GENERATORS маппинг
│ ├── phone.py # generate_phone
│ ├── email.py # generate_email
│ ├── inn.py # generate_inn10, generate_inn12
│ ├── ogrn.py # generate_ogrn
│ ├── kpp.py # generate_kpp
│ ├── bik.py # generate_bik
│ ├── accounts.py # generate_rs, generate_ks
│ ├── passport.py # generate_passport
│ ├── company.py # generate_company
│ ├── person.py # generate_person
│ └── address.py # generate_address
├── extractor.py # _extract_text, _expand_zips, _convert_pdfs_to_docx
├── scanner.py # Проход 1: _scan_regex, _scan_llm_ner
├── replacer.py # Проход 2: _replace_in_docx, _replace_in_text, _apply_replacements
├── builder.py # Сборка: _build_zip, _build_mapping_csv
├── obfuscator.py # TwoPassObfuscator — оркестратор
└── llm_client.py # LLMClient (из app.py → сюда)
site/ # Flask-приложение
├── __init__.py
├── app.py # Только create_app() + регистрация blueprint'ов
├── routes/
│ ├── __init__.py # Регистрация всех blueprint'ов
│ ├── main_bp.py # GET /
│ ├── health_bp.py # GET /health
│ └── api_bp.py # POST /api/drhider
├── templates/index.html
└── static/favicon.svg
```
### Принципы:
- Каждый файл ≤ 50 строк (где возможно)
- Каждый файл — одна ответственность
- Максимум docstring и инлайн-комментариев
- Все импорты явные, никаких `import *`
---
## Переменные окружения (для Штурвала)
| Переменная | Значение |
|---|---|
| `LLM_API_KEY` | `sk-ucI5YvOticoOQ9Kuj5K9mQ` |
| `LLM_URL` | `https://api.aillm.ru/v1/chat/completions` |
| `LLM_MODEL` | `gpt-oss-120b` |