6.2 KiB
Актуальный план разработки — IP WhiteList Microservice
Автор: GitHub Copilot (Gemini 3.1 Pro Preview) Дата: 2026-05-30 Основание: ТЗ (WhiteIPlist.txt) + Реальный код (Node.js/Express)
1. Анализ предыдущего плана и моё мнение
Мой предыдущий план (plan-gemini.md) оказался полностью оторванным от реальности. Я предполагал писать всё с нуля на Python/FastAPI+SQLModel. На деле же ядро полностью готово и написано на Node.js, Express, EJS и чистом SQL (pg pool).
Писать с нуля на питоне — это плодить техдолг и выкидывать рабочий код. Более того, серверная валидация, структура БД, CRUD и UI уже в целом соответствуют ТЗ, но сильно не хватает связующих звеньев.
Поэтому мой главный тезис: хватит придумывать архитектуру, нужно закрывать дыры по функциональным требованиям ТЗ в текущем Node.js проекте.
2. Разрыв между ТЗ (WhiteIPlist.txt) и кодом (Node.js)
Что готово и работает:
- База данных: Полная структура (
companies,whitelist_entries,audit_log), реализован soft delete (deleted_at). - Слой данных (
queries.js): Работает базовый CRUD, сохраняются логи аудита, обрабатываются ограничения (глобальные и кастомные). - Валидация (
validators.js): Реализованы проверки на IPv4, маски /22-/32, зашиты все запрещённые диапазоны (RFC1918, CGNAT, Loopback и т.д.). - UI: Причесанный EJS-шаблон добавления/просмотра/удаления.
Чего не хватает по ТЗ (Фокус дальнейшей разработки):
- Авторизация (Keycloak OIDC): Сейчас сделан временный парсинг JWT через Base64 без валидации ключей (DEV_MODE).
- Multi-company и Роли (Админ/Клиент): Не реализованы переключатель компаний и админские страницы (видимость всех записей, изменение лимитов, просмотр аудита).
- Редактирование записей: Метод
updateEntryнаписан в БД-слое, но UI и роут отсутствуют. Формально ТЗ не закрыто. - Агрегация в Экспорте: Маршрут
GET /exportпросто выплёвывает адреса в столбик, тогда как ТЗ жёстко требует суммаризировать подсети в минимальный набор CIDR. - Клиентская валидация: ТЗ явно требует валидировать формат и маски на фронтенде перед отправкой.
3. Детальный план по шагам (Node.js)
Этап 1: Исправление багов в текущем MVP
- Баг с overlaps: В
validators.jsфункцияoverlaps()содержит логическую ошибку вstart/end(может пропускать пересекающиеся подсети). Переписать условие. - UI Редактирования: Добавить роут
POST /update/:idвserver.jsи добавить кнопку/форму "Изменить" вindex.ejs, подключив существующуюupdateEntry(...).
Этап 2: Строгое соответствие ТЗ (Валидация и Экспорт)
- Суммаризация CIDR: Так как в Node.js нет
ipaddress.collapse_addresses, необходимо использовать библиотеку вродеcidr-tools(функцияmerge()отлично справится) дляGET /export. - Клиентская валидация: Добавить минимальный JavaScript в
index.ejsдля проверки валидности вводимого IP-адреса и маски до ухода POST-запроса, чтобы экономить серверные ресурсы (Требование ТЗ).
Этап 3: Подключение OIDC Keycloak
- Установка библиотеки
openid-client(илиpassport-openidconnect). - Настройка middleware: получение сертификатов из Keycloak, валидация подписи JWT-токена.
- Извлечение claim
clientID(и логика переключения между компаниями, еслиclientIDявляется массивом). Определение роли (кто админ,WZ01112). Обязательный отказ от dev-заглушки в PROD.
Этап 4: Админ-панель (пользователь WZ01112)
- Роут
GET /adminи шаблонadmin.ejs. Таблица со всеми компаниями и их лимитами, фильтрацией. - Функционал установки
custom_limitдля компании. - Страница/вкладка
GET /admin/auditдля просмотраaudit_log. - Переключатель отображения Soft-deleted записей.
4. Зависимости
В package.json придется добавить лишь две новые production-зависимости, не усложняя проект:
cidr-tools(для агрегации при экспорте)openid-client/jsonwebtoken(для безопасной работы с Keycloak)
Всё остальное будет реализовано в рамках существующего стека.