Files
ipwhitelist-app/docs/ai-review-comparison.md
T
naeel bbcda90378 fix: IAM баги после ревью
- 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-токен, токен только через аргумент
2026-06-04 15:08:40 +03:00

68 lines
4.5 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.
# AI‑анализ проекта ipwhitelist‑app — сравнение
> Дата: 2026-06-04
> Простая модель (GPT) vs DeepSeek V4 Pro
---
## 1. Анализ простой модели (promptreview.txt)
### Общее заключение
Нет. Нельзя деплоить в production в текущем состоянии.
### Найденные проблемы
| # | Серьёзность | Описание |
|---|---|---|
| 1 | **Critical** | `ui/routes/auth.js``await` без `async` в `POST /logintoken` → 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 нужен более глубокий анализ.