Commit Graph
100 Commits
Author SHA1 Message Date
naeel 536a02c251 v0.6.19: шаблон читает req.session.user (с имперсонацией), не req.user 2026-06-15 11:18:08 +04:00
naeel 38cac02c90 v0.6.18: авто-имперсонация выставляет isAdmin + adminMode 2026-06-15 11:11:25 +04:00
naeel 5507d11608 v0.6.17: отладка ADMIN_EMAIL в ошибке 2026-06-15 11:10:59 +04:00
naeel b2480b8aac v0.6.16: req.clientId = activeClientId — без условий, CRUD не знает про имперсонацию 2026-06-15 11:09:44 +04:00
naeel 9854932f50 v0.6.15: фикс — switch компаний при имперсонации 2026-06-15 11:06:48 +04:00
naeel b4a3aa4e63 v0.6.14: расширенная отладка req.clientId (тип, длина) 2026-06-15 11:06:22 +04:00
naeel 3c11c20680 v2: документирование IAM API — clientID, profiles, impersonation 2026-06-15 11:01:13 +04:00
naeel a1f8e5a71a v0.6.13: отладка — показ email/clientId/env в ошибке 2026-06-15 10:55:13 +04:00
naeel 7a4dd6f3e5 v0.6.12: полный санитайзер IAM в resolveContext — защита от null/undefined/говна 2026-06-15 10:46:31 +04:00
naeel 2cf86a22de v0.6.11: guard на ВСЕ обязательные поля DB — companyId, cidr, userEmail, entryId 2026-06-15 10:45:21 +04:00
naeel b3d0fc36a6 v0.6.10: проверка clientId в getOrCreateCompany (3-й уровень) 2026-06-15 10:43:19 +04:00
naeel 00d3928a50 v0.6.9: защита от пустого clientId (null client_id) 2026-06-15 10:35:03 +04:00
naeel 3d3354c49e v0.6.8: Выйти — только реальный KC-юзер 2026-06-15 10:29:31 +04:00
naeel 68f230bedd v0.6.7: фикс — req.email=текущий, impersonatedBy=реальный (правильно) 2026-06-15 10:28:06 +04:00
naeel f007b4e721 v0.6.6: разделение — req.email(аудит) vs req.displayEmail(экран) 2026-06-15 10:23:04 +04:00
naeel 1c2b7fe189 v0.6.5: loginEmail из originalUserEmail, компания слева от email 2026-06-15 10:19:07 +04:00
naeel 6032a574a9 v0.6.4: авто-имперсонация (ORIGINAL→TARGET) + ADMIN_EMAIL 2026-06-15 10:14:16 +04:00
naeel ed58df38d8 v0.6.3: убрал (имперсонация) у email, жёлтый баннер сверху 2026-06-15 09:57:35 +04:00
naeel 9f7150c345 v0.6.2: email юзера справа от статистики + loginEmail в header 2026-06-15 09:55:35 +04:00
naeel 6acb8770c5 v0.6.1: фикс — email в header (Выйти) 2026-06-15 09:46:58 +04:00
naeel 0d7815df16 v0.6.0: дизайн Nubes — лого, header, стили, email, имперсонация 2026-06-15 09:42:33 +04:00
naeel 5b92dfe1e7 v2→main: интеграция — v2 как основной UI (/), старый UI закомментирован 2026-06-15 09:33:45 +04:00
naeel 3e418f9f4a v2: документирование интеграции 0.5.98 — таблицы + impersonation 2026-06-15 09:17:34 +04:00
naeel 814d066b10 v2: таблицы v2_→оригинальные + impersonation модуль (IMPERSONATION_TARGET + EXTRA_COMPANIES) 2026-06-15 09:16:10 +04:00
naeel cfaf8f34c3 v2: EJS-шаблоны — user, admin, admin-audit, admin-entries 2026-06-13 08:46:09 +04:00
naeel 30aaf8a7e4 v2: export слой — GET /v2/export, агрегация CIDR 2026-06-13 08:34:09 +04:00
naeel e5815279a1 v2: +admin мок-юзер (3 компании, без имперсонации) для полного тестирования 2026-06-13 07:52:01 +04:00
naeel 616b4ead09 v2: подробные комментарии во всех модулях — что, зачем, контракты 2026-06-13 07:37:07 +04:00
naeel 1af304b2a8 v2: admin — дашборд компаний, аудит, лимиты, просмотр записей 2026-06-13 07:31:01 +04:00
naeel 9454e9853f v2: userFlow action + ENABLE_TEST_API флаг — отключение без удаления кода 2026-06-13 07:25:36 +04:00
naeel fe5a7d0d37 v2: выделение валидации — validate() в crud, db/queries получает готовый cidr 2026-06-13 07:11:53 +04:00
naeel 3c061b6c4b v2: разделение слоёв — crud/index.js API-слой, user/ и test/ через crud 2026-06-13 06:55:18 +04:00
naeel 4b5ccc6a4c v2: fix chaos test — CIDR от 11 (10.x заблокирован), по 10 на компанию, проверка всех компаний 2026-06-12 23:04:40 +04:00
naeel 5bc1b5773a v2: fix test router mount /test/api → /test, /chaos теперь доступен без авторизации 2026-06-12 23:01:28 +04:00
naeel 0925ae4fd8 v2: /v2/test/chaos — параллельный хаос-тест внутри приложения (Promise.all) 2026-06-12 22:56:57 +04:00
naeel 2f59c033ac v2: убран хаос — curl через сеть слишком медленный 2026-06-12 22:55:23 +04:00
naeel 81921c4e38 v2: упрощённый хаос — 30 последовательных запросов с задержками 2026-06-12 22:49:13 +04:00
naeel 23c59c1aae v2: fix switch case in test API (был сломан sed-ом) 2026-06-12 22:29:24 +04:00
naeel e7f0611947 v2: switch + chaos тесты (50/54 pass, switch ждёт redeploy) 2026-06-12 22:23:09 +04:00
naeel 1772ade84b v2: test API — action=switch для переключения компаний 2026-06-12 22:02:12 +04:00
naeel 3f50a6fecf v2: 47 CRUD-тестов — все ТЗ, нагрузка, БД, имперсонация — ALL PASS 2026-06-12 22:01:13 +04:00
naeel 2a1f4add2b v2: фикс тестов — URL-encoding кириллицы 2026-06-12 21:56:36 +04:00
naeel 545d1c8aac v2: /v2/test/api — CRUD эндпоинт + внешние тесты curl 2026-06-12 21:43:28 +04:00
naeel 7f7124e44e v2: встроенные CRUD-тесты — /v2/test/crud (production-база) 2026-06-12 21:40:22 +04:00
naeel 8522988151 v2: /v2/login → returnTo=/v2/app 2026-06-12 21:21:16 +04:00
naeel cd49398660 v2: убран v2_ префикс из req.* — роутер и модули согласованы 2026-06-12 21:19:43 +04:00
naeel 53dec84045 v2: документирован чеклист переименования при интеграции 2026-06-12 21:14:15 +04:00
naeel d3b753e6bd v2: убраны v2_ префиксы сессии — user/adminMode/token как в основном коде 2026-06-12 21:13:15 +04:00
naeel 287d196eaf v2: resolveContext — копирует session.user → v2_user если нет своей 2026-06-12 21:10:36 +04:00
naeel a835cf0f16 v2: user CRUD + schema автозапуск + router тесты — модуль пользователя готов 2026-06-12 21:09:30 +04:00
naeel df72fa2fe1 v2: роутер по роли + пустышки user/admin — resolveContext middleware 2026-06-12 21:03:41 +04:00
naeel 15da5cd441 v2: fio — строка (fullName), не объект 2026-06-12 20:54:48 +04:00
naeel b18429049e v2: минимум — /v2/login→основной, /v2/iam→IAM-данные из сессии 2026-06-12 20:42:14 +04:00
naeel eacf90e433 v2: откат auth/config/server к 5c09844 — чистый модуль аутентификации 2026-06-12 20:15:02 +04:00
naeel 33b879c098 v2: ⚠️ КОСТЫЛЬ /v2/test — вход с TEST_TOKEN (WZ01112) в обход Keycloak 2026-06-12 17:37:32 +04:00
naeel 0dc9820a31 v2: версия 0.5.70 — отображается в /v2 и /v2/app 2026-06-12 17:08:46 +04:00
naeel 1a2dd87705 v2: schema создаётся внутри v2, основной server.js не трогаем 2026-06-12 17:05:48 +04:00
naeel 522d2adfda v2: отдельный модуль schema.js — автосоздание таблиц при старте 2026-06-12 17:04:25 +04:00
naeel e91f1b0ff3 v2: CRUD-модуль — /v2/app с выбором компании, добавление/изменение/удаление записей 2026-06-12 16:53:33 +04:00
naeel 03d480de12 v2: документирован конфиг — тестовый KC vs production, инструкция перехода 2026-06-12 16:43:20 +04:00
naeel 53f2b49049 v2: убран JWT fallback — IAM обязателен, нет IAM = ошибка 2026-06-12 16:41:39 +04:00
naeel 21a2c65296 v2: IAM fallback — JWT claims если IAM недоступен 2026-06-12 16:31:18 +04:00
naeel 8f8093fa29 v2: детальное логирование postForm + exchangeCode 2026-06-12 16:26:17 +04:00
naeel 3e4c5cb1af v2: отладка exchangeCode — логируем ответ Keycloak 2026-06-12 16:08:10 +04:00
naeel 5aee05e8dc v2: конфиг — process.env с умолчаниями, без dotenv и .env 2026-06-12 16:00:34 +04:00
naeel 0733f4eaa1 v2: хардкод конфиг — без env, без V2_*, без .env 2026-06-12 15:59:25 +04:00
naeel ac13330fdb v2: изоляция — свои V2_* env, v2/.env, не трогает основные переменные 2026-06-12 15:58:17 +04:00
naeel 5c09844002 v2: модуль аутентификации Keycloak + IAM, роутер /v2
- v2/src/auth/index.js — login(), fetchIamUser(), exchangeCode(), buildAuthUrl()
- v2/src/config/index.js — приоритет V2_* → KC_* → умолчания
- v2/server.js — createV2Router(), монтируется в server.js как /v2
- server.js — app.use('/v2', createV2Router()) перед UI-роутером
- bump 0.5.57 → 0.5.58
2026-06-12 15:47:32 +04:00
naeel b2f1cae37d docs: session history 2026-06-11 with remaining tasks 2026-06-12 13:43:25 +04:00
naeel 2993f95b8d tz 2026-06-11 21:38:19 +04:00
naeel 199585be67 docs: add actual TOR (ТЗ-факт) based on implemented features 2026-06-11 21:36:40 +04:00
naeel f818f454a3 fix: deleted entries shown with strikethrough + opacity, edit/delete hidden 2026-06-11 21:26:05 +04:00
naeel bc209aeab8 release: bump 0.5.57 2026-06-11 21:15:45 +04:00
naeel a601570a4a fix: return includeDeleted checkbox + submit button for admin filter (no JS) 2026-06-11 21:07:59 +04:00
naeel 5781b37882 fix: audit table has impersonated_by column + filter uses button submit (no JS) 2026-06-11 20:47:03 +04:00
naeel ffdc12bdf8 fix: syntax error in /debug-session — missing closing brace 2026-06-11 20:39:30 +04:00
naeel 001db2a556 debug: /debug-session shows last audit log entries (impersonated_by) 2026-06-11 20:32:23 +04:00
naeel 447acba762 fix: impersonation banner shows activeClientId instead of raw JWT clientId 2026-06-11 20:27:08 +04:00
naeel 8f9e0a96ad fix: reject client_id when allowedIds list is empty (no IAM, no JWT claims) 2026-06-11 20:18:55 +04:00
naeel 68ea44a81d fix: X-Imp-* headers bridge UI→API impersonation + timezone GMT+4 2026-06-11 20:17:07 +04:00
naeel d0a0fdc264 chore: exclude sonnet analysis files from git 2026-06-11 20:03:08 +04:00
naeel 1350f0dbba security: fix OIDC state check bypass + open redirect in login-token
- oidc.js: remove || true — state check now works in all environments
- auth.js: wrap returnTo in safeReturn (was unprotected on line 166)
2026-06-11 20:02:49 +04:00
naeel 351cb6afe6 feat: test impersonation via IMPERSONATION_ORIGINAL/TARGET/COMPANY env vars
- ui/index.js: resolveUser checks env vars, only for matching email
- Закомментировать блок 'TEST IMPERSONATION' для прода
2026-06-11 19:25:11 +04:00
naeel e0cbf4bf35 fix: /export defaults to JSON, ?format=txt for plain text 2026-06-11 16:32:19 +04:00
naeel e3c4c738aa feat: /export?format=json — JSON export for admin 2026-06-11 16:29:24 +04:00
naeel 3bc285dc93 fix: /export only for adminMode users, not public 2026-06-11 16:28:15 +04:00
naeel 6025d84959 fix: add ALTER TABLE migration for impersonated_by column 2026-06-11 16:20:52 +04:00
naeel 7758d70dcf feat: double audit — impersonated_by in audit_log
- db.js: add impersonated_by column to audit_log
- queries.js: logAudit accepts impersonatedBy, all CRUD pass it
- api/routes/entries.js: pass req.user.originalUserEmail as impersonatedBy
- При имперсонации: created_by=импактируемый, impersonated_by=админ
2026-06-11 16:10:41 +04:00
naeel 9c51e449ab fix: remove canWrite from IAM — it is IAM RBAC, not our app logic
- IAM permissions.can_write defaults to false for all users
- Our app controls writes via adminMode + company membership
2026-06-11 16:01:55 +04:00
naeel 9a331eec82 feat: full IAM impersonation support — read-only + original user + canWrite
- src/auth.js: all impersonation fields + permissions.can_write
- src/routes/oidc.js: save all fields to session
- ui/index.js: canWrite, originalUserEmail in req.user
- ui/routes/entries.js: read-only guard on POST/PATCH/DELETE
- docs/PLAN-impersonation.md: updated with implemented items
2026-06-11 15:54:56 +04:00
naeel a2cfd2c10f feat: IAM impersonation support — isImpersonated flag + banner
- src/auth.js: fetchIamUser extract isImpersonated from response
- src/routes/oidc.js: save isImpersonated to session
- ui/index.js: isImpersonated in req.user
- ui/routes/entries.js: pass isImpersonated to render
- views/index.ejs: banner 'Режим имперсонации'
- docs/PLAN-impersonation.md: план дальнейших шагов (двойной аудит)
2026-06-11 15:34:19 +04:00
naeel 7b3dd8b4b3 fix: всегда показывать email залогиненного, не owner_email компании
- Убрано selectedCompany.owner_email из отображения «пользователь»
- Админ видит свой email, а не создателя компании
2026-06-11 15:16:59 +04:00
naeel ce6b67e72a fix: email from session.user first, not JWT payload
- req.session.user.email приоритетнее payload.email
- Исправляет отображение чужого email в header
2026-06-11 15:08:07 +04:00
naeel 9cb53df8b1 fix: toggle as pure HTML form — no JS, no fetch, just POST+redirect
- views/index.ejs: onclick+fetch → form method=POST с button
- ui/routes/auth.js: JSON → res.redirect(Referer)
- Текст меняется: «Администратор» ↔ «Выйти из админки»
2026-06-11 14:59:59 +04:00
naeel fa4d5646fa fix: toggle now works — JSON response + immediate CSS flip
- /toggle-admin returns JSON {ok, adminMode} instead of redirect
- onclick: toggle CSS instantly, then fetch, then reload on ok
2026-06-11 14:42:31 +04:00
naeel f739754c3b fix: pass canAdminMode to render + bump 0.5.47 2026-06-11 14:34:42 +04:00
naeel cad6ebb4d6 release: bump 0.5.46 2026-06-11 14:24:46 +04:00
naeel 8b891a4bed fix: remove duplicate catch block causing startup crash 2026-06-11 14:19:01 +04:00
naeel 08248229b9 fix: если email мой — isAdmin = true, canAdminMode = true
- isAdmin = iamAdmin || (payload.email/login === ntazetdinov@nubes.ru)
2026-06-11 14:10:52 +04:00
naeel 2fbdc3259b hardcode: canAdminMode для ntazetdinov@nubes.ru без зависимостей
- Просто хардкод email = 'ntazetdinov@nubes.ru'
- Убран лишний фетч email из сессии/payload/logging
2026-06-11 14:10:00 +04:00