docs: актуализация README/ARCHITECTURE + план паттерна ВМ-буфер+pull (снимок перед ВМ-инкапсуляцией загрузки)
Deploy drhider / validate (push) Canceled after 0s

This commit is contained in:
“Naeel”
2026-08-21 15:35:45 +03:00
parent a9d4139afb
commit 705b39ab7d
3 changed files with 182 additions and 75 deletions
+20 -33
View File
@@ -51,48 +51,31 @@ git add -A && git commit -m "подробное описание" && git push
### `drhider/` — пакет ядра обфускации
| Файл | Назначение | Строк |
|---|---|---|
| `__init__.py` | re-export: `obfuscate_files`, `LLMClient`, `TwoPassObfuscator` | 10 |
| `config.py` | Константы: regex-паттерны (ENTITY_PATTERNS, COMPANY_PATTERN, PERSON_PATTERN), словари имён/городов/улиц | 80 |
| `checksum.py` | Контрольные суммы: ИНН10, ИНН12, ОГРН | 60 |
| `random_utils.py` | Утилиты: `random_digits`, `random_letters` | 20 |
| `llm_client.py` | LLMClient — HTTP-клиент к LLM API (aillm.ru) | 50 |
| `extractor.py` | Извлечение текста из .docx/.pdf/.txt + `expand_zips` + `convert_pdfs_to_docx` | 180 |
| `scanner.py` | Проход 1: `scan_regex` (regex) + `scan_llm_ner` (LLM NER) | 110 |
| `replacer.py` | Проход 2: `apply_replacements`, `replace_in_docx`, `replace_in_text` | 100 |
| `builder.py` | Сборка: `build_zip`, `build_mapping_csv` | 65 |
| `obfuscator.py` | `TwoPassObfuscator` — оркестратор + `obfuscate_files()` | 100 |
### `drhider/generators/` — генераторы фиктивных значений
Каждый файл — один генератор (10–40 строк). Интерфейс: `generate_xxx(original: str) -> str`.
| Файл | Что генерирует |
| Файл | Назначение |
|---|---|
| `phone.py` | +7 (XXX) XXX-XX-XX |
| `email.py` | user@fake-domain |
| `inn.py` | ИНН 10 и 12 знаков (с контрольной суммой) |
| `ogrn.py` | ОГРН 13 знаков |
| `kpp.py` | КПП 9 знаков |
| `bik.py` | БИК 9 знаков (04XXXXXXX) |
| `accounts.py` | Расчётный счёт (40702...) + корр. счёт (30101...) |
| `passport.py` | Паспорт (XX XX XXXXXX) |
| `company.py` | ООО/ЗАО/АО «СлучайноеНазвание» |
| `person.py` | Фамилия И.О. |
| `address.py` | Город, ул. Улица, д. N |
| `__init__.py` | re-export: `obfuscate_files`, `LLMClient`, `TwoPassObfuscator` |
| `config.py` | Константы: regex-паттерны (ENTITY_PATTERNS, COMPANY_PATTERN, PERSON_PATTERN), словари имён/городов/улиц |
| `llm_client.py` | LLMClient — HTTP-клиент к LLM API (aillm.ru) |
| `extractor.py` | Извлечение текста из .docx/.pdf/.doc/.txt + `expand_zips` |
| `scanner.py` | Проход 1: `scan_regex` (regex) + `scan_llm_ner` (LLM NER) + генерация гибридных токенов |
| `replacer.py` | Проход 2: `apply_replacements`, `replace_in_docx` |
| `builder.py` | Сборка: `build_zip`, `build_mapping_csv` |
| `obfuscator.py` | `TwoPassObfuscator` — оркестратор + `obfuscate_files()` |
`__init__.py` содержит `ENTITY_GENERATORS` — маппинг `entity_type → генератор`.
Фиктивные значения — **гибридные токены** (шаблон + номер), генерируются в `scanner.py`
через `TYPE_POOLS` + `_next_token()`. Примеры: `Иванов_0001`, `ООО_Технология_0034`, `ул_Ленина_0015`.
Отдельного пакета генераторов (`generators/`) нет.
### `site/` — Flask-приложение
| Файл | Назначение |
|---|---|
| `app.py` | `create_app()` — создание Flask, регистрация blueprint'ов, VERSION |
| `session.py` | Управление сессиями: файлы, результат, CSV, очистка по таймауту |
| `routes/__init__.py` | `register_routes(app)` |
| `routes/main_bp.py` | `GET /` — HTML-интерфейс |
| `routes/health_bp.py` | `GET /health` — `{"ok": true, "version": "..."}` |
| `routes/api_bp.py` | `POST /api/drhider` — multipart files → ZIP |
| `routes/api_bp.py` | API загрузки/обработки/скачивания (см. раздел API) |
| `templates/index.html` | UI (выбор файлов, прогресс, скачивание) |
| `static/favicon.svg` | Иконка |
@@ -116,8 +99,12 @@ git add -A && git commit -m "подробное описание" && git push
| Метод | Путь | Что делает |
|---|---|---|
| `GET` | `/` | HTML-интерфейс |
| `GET` | `/health` | `{"ok": true, "version": "2.0.0"}` |
| `POST` | `/api/drhider` | multipart/form-data (поле `files`) → `application/zip` |
| `GET` | `/health` | `{"ok": true, "version": "..."}` |
| `POST` | `/api/upload` | Загрузка файлов в сессию → `{ok, session, count}` |
| `GET` | `/api/process_stream/<sid>` | SSE: обработка файлов сессии, прогресс пофайлово |
| `POST` | `/api/process/<sid>` | Обработка файлов сессии (legacy) |
| `GET` | `/api/download/<sid>` | Скачать ZIP с обфусцированными файлами |
| `GET` | `/api/csv/<sid>` | Скачать mapping.csv отдельно |
---