4.9 KiB
4.9 KiB
IP WhiteList — План разработки
Дата: 2026-05-30
Основание: WhiteIPlist.txt (ТЗ) + фактический код в ipwhitelist-app
Статус: каноничный — единственный актуальный план
1. Текущее состояние
Готово ✅
| Слой | Файлы | Что есть |
|---|---|---|
| БД | sql/schema.sql |
companies, whitelist_entries (soft delete), audit_log + индексы |
| Валидатор | src/validators.js |
Все 14 запрещённых диапазонов Приложения А, /22–/32, нормализация host-битов, проверка пересечений |
| CRUD | src/queries.js |
createEntry, updateEntry, deleteEntry (soft), listEntries, getExportCIDRs, getAudit, getLimit |
| UI | views/index.ejs |
Список, форма добавления, кнопка удаления, стиль Nubes |
| Роуты | server.js |
GET /, POST /add, POST /delete/:id, GET /export, GET /healthz |
Написано в queries.js, но не подключено к роутам
updateEntry— нетPOST /update/:id, нет UI редактированияgetAudit— нет страницы аудитаlistEntries(companyId, includeDeleted=true)— флаг есть, не используется
2. Что требует ТЗ, но отсутствует
| # | Требование | Готовность |
|---|---|---|
| 1 | Редактирование записи из UI | ❌ queries есть, роута нет |
| 2 | Админ-панель (все компании, лимиты, аудит, фильтры) | ❌ |
| 3 | OIDC Keycloak вместо base64-заглушки | ❌ |
| 4 | Суммаризация CIDR в /export |
❌ отдаёт сырой список |
| 5 | Клиентская валидация (JS в форме) | ❌ |
| 6 | Переключатель компаний (multi-company) | ❌ |
| 7 | Просмотр soft-deleted записей админом | ❌ |
| 8 | Изменение custom_limit для компании |
❌ |
3. Порядок реализации
Этап 1 — Пользовательский сценарий (client-flow)
- Валидатор IPv4/CIDR — полный
- Создание / удаление / экспорт
- Добавить
POST /update/:idвserver.js - Добавить inline-форму редактирования в
views/index.ejs - Клиентская валидация (JS: формат, маска, длина комментария)
Этап 2 — Административная панель
- Определение admin-роли (
clientId === 'WZ01112'+ чекбокс) GET /admin— страница со всеми компаниямиPOST /admin/limit/:companyId— изменение custom_limitGET /admin/audit— журнал аудита- Фильтр по компании + показ удалённых записей
Этап 3 — Авторизация Keycloak OIDC
npm install openid-client- Замена base64-decode на проверку подписи JWT
- Маппинг claims →
req.user(clientId, email, role) - Оставить
DEV_MODEтолько для локальной разработки
Этап 4 — Экспорт и Multi-company
npm install cidr-tools— суммаризация вGET /export- Переключатель активной компании (если несколько
clientIdв claims)
Этап 5 — Завершение
- Автотесты (
jest+supertest) - Пагинация (если лимит > 50)
- Сверка всех пунктов ТЗ
4. Что НЕ делать
- ❌ Не переписывать на Python/FastAPI
- ❌ Не менять схему БД
- ❌ Не переписывать
validators.js(он полный) - ❌ Не переписывать
queries.js - ❌ Не делать SPA
5. Зависимости для установки
npm install cidr-tools openid-client
npm install --save-dev jest supertest
Всё остальное — в рамках Express + EJS + pg.
6. Риски
- Admin-роль: неясно как «отдельный чек-бокс» из ТЗ попадает в токен — требует уточнения с командой Keycloak
- Multi-company claims: ТЗ говорит о нескольких компаниях, но в claims только
clientID— нужен реальный формат - IP-ограничение
/export: делать в приложении или на уровне ingress — решить при деплое