- ui/routes/auth.js: POST /login-token сделан async (был await без async)
- ui/routes/auth.js: IAM enrichment только при auth.isOidc (не в mock-режиме)
- src/auth.js: fetchIamUser, switchProfile возвращаются из initAuth()
- src/routes/oidc.js: auth.fetchIamUser вместо require('../auth') (устранение циклической зависимости)
- ui/routes/auth.js: auth.fetchIamUser вместо require
- tests/api-crud.sh: удалён хардкоженный prod-токен, токен только через аргумент
4.5 KiB
4.5 KiB
AI‑анализ проекта ipwhitelist‑app — сравнение
Дата: 2026-06-04
Простая модель (GPT) vs DeepSeek V4 Pro
1. Анализ простой модели (prompt‑review.txt)
Общее заключение
Нет. Нельзя деплоить в production в текущем состоянии.
Найденные проблемы
| # | Серьёзность | Описание |
|---|---|---|
| 1 | Critical | ui/routes/auth.js — await без async в POST /login‑token → SyntaxError |
| 2 | Critical | server.js — /export открыт публично без авторизации |
| 3 | Major | Источники профилей не унифицированы (JWT vs IAM), хардкод WZ01112 для admin |
| 4 | Major | jwt.decode() без верификации в UI |
| 5 | Minor | 'unsafe-inline' в CSP |
| 6 | Minor | Разнобой таймаутов HTTP (5s vs 10s) |
| 7 | Minor | Логирование IAM слабое |
Оценки
| Критерий | Балл |
|---|---|
| Понятность DevOps | 8/10 |
| Чистота кода | 6/10 |
2. Оценка DeepSeek V4 Pro
Что модель нашла верно
awaitбезasync— реальный критический баг, приложение упадёт при запуске./exportбез авторизации — реальная дыра безопасности.- Дублирование IAM/JWT‑логики — действительно размазано по
oidc.js,auth.js,ui/routes/auth.js. 'unsafe-inline'в CSP — надо убирать (nonce/hash).- Разнобой таймаутов — мелочь, но стоит унифицировать.
Что модель пропустила
| # | Серьёзность | Описание |
|---|---|---|
| 1 | Critical | Хардкоженный IAM‑токен tazetdinovn@gmail.com (prod) лежит в tests/api-crud.sh в открытом виде и уже в гите. |
| 2 | Major | DEV_MODE=true на итало — но код пытается вызывать fetchIamUser даже в mock‑режиме. IAM недоступен локально → каждый логин будет падать с таймаутом или ошибкой. |
| 3 | Major | Порядок middleware: session → oidc → ui — в OIDC‑роутере src/routes/oidc.js свой req.session.user, а ui/index.js делает свой jwt.decode() — возможен конфликт/перезапись. |
| 4 | Major | Нет механизма миграций БД — только schema.sql с CREATE, нет ALTER/версионирования. |
| 5 | Minor | csrfToken в views/index.ejs передаётся как пустая строка (csrfToken: '') — CSRF фактически отключён для UI‑слоя. |
| 6 | Minor | package.json → "version": "0.5.17", а README.md → v0.5.14 — расхождение версий. |
| 7 | Minor | require('../auth') внутри src/routes/oidc.js создаёт циклическую зависимость: auth.js → routes/oidc.js → auth.js. Работает только из‑за кеша Node.js, но хрупко. |
3. Итоговое сравнение
| Параметр | Простая модель | DeepSeek |
|---|---|---|
| Критические баги найдены | 2 из 3 | +1 (токен в гите) |
| Архитектурные проблемы | Поверхностно | Глубже (middleware, циклические зависимости, миграции) |
| Рантайм‑поведение | Не анализировала | Учёл DEV_MODE и реальные сценарии |
| Точность попаданий | 6/7 верных | Все найденные подтверждены + новые |
| Ложные срабатывания | 0 | 0 |
Вывод: простая модель дала добротный первый проход — нашла два критических бага и дала разумные рекомендации. Но не копнула глубже: пропустила утекший токен, не проверила рантайм‑поведение в DEV_MODE и не заметила архитектурные завязки. Для production‑review нужен более глубокий анализ.