Commit Graph
70 Commits
Author SHA1 Message Date
naeel 0e1f34c913 v0.5.137: onchange + console.log для проверки 2026-06-16 05:01:30 +04:00
naeel 24e0e39782 v0.5.136: ↺ яркая, deleted сохраняется после restore/delete 2026-06-16 04:51:42 +04:00
naeel c4d592dcbe v0.5.135: UI таблицы — разделение столбцов, 💾, размеры 2026-06-16 04:48:41 +04:00
naeel 86a39c7881 v0.5.134: восстановление записей, кнопка удалённых, время МСК 2026-06-16 04:39:21 +04:00
naeel f0743c6bfe v0.5.133: type=submit на кнопке удаления 2026-06-15 17:17:43 +04:00
naeel e440700a72 v0.5.129: кнопка Выбрать, убран весь debug 2026-06-15 16:55:13 +04:00
naeel b41af5649f v0.5.128: обратно onchange, кнопка не нужна 2026-06-15 16:51:17 +04:00
naeel 6660cb3c77 v0.5.125: кнопка Выбрать вместо onchange 2026-06-15 16:41:04 +04:00
naeel ee0cf68fe3 v0.5.125: switchTo без редиректа, дебаг на странице 2026-06-15 16:37:29 +04:00
naeel 3493d45065 debug: логирование switchTo, resolveContext, enhanceImpersonation 2026-06-15 16:30:23 +04:00
naeel bde68c00a1 v0.5.119: ссылка на /export в футере для админа 2026-06-15 15:29:30 +04:00
naeel f5ee0a36de v0.5.112: стиль админки как на основной, убран Выйти, ⚙️→Лимиты и Аудит 2026-06-15 14:36:11 +04:00
naeel 8fe89f3a0a v0.5.111: админка — лимиты и аудит (/v2/admin), кнопка ⚙️ 2026-06-15 14:24:20 +04:00
naeel 6bff095a67 v0.5.110: inline-редактирование через простые формы, без JS innerHTML 2026-06-15 14:17:40 +04:00
naeel 11c3817376 v0.5.108: фикс inline-редактирования — innerHTML вместо show/hide 2026-06-15 14:04:11 +04:00
naeel ebcdb1ccb1 v0.5.107: inline-редактирование в таблице, редирект / → /v2/app 2026-06-15 13:57:48 +04:00
naeel eb3c17cd68 v0.5.106: фикс — админ всегда видит все компании, убран дубль (админ) 2026-06-15 13:51:37 +04:00
naeel 8ab0bb10ac v0.5.105: убран переключатель Администратор, adminMode всегда on 2026-06-15 13:45:33 +04:00
naeel 2545bc97f1 v0.5.104: админ видит (личное) у своих компаний в dropdown 2026-06-15 13:41:01 +04:00
naeel a31b3e61f2 v0.5.102: единый интерфейс /v2/app для юзеров и админов 2026-06-15 13:30:12 +04:00
naeel 7fa6b43562 v2: WZ01112 admin toggle 2026-06-15 12:05:09 +04:00
naeel cfaf8f34c3 v2: EJS-шаблоны — user, admin, admin-audit, admin-entries 2026-06-13 08:46:09 +04:00
naeel f818f454a3 fix: deleted entries shown with strikethrough + opacity, edit/delete hidden 2026-06-11 21:26:05 +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 447acba762 fix: impersonation banner shows activeClientId instead of raw JWT clientId 2026-06-11 20:27:08 +04:00
naeel 68ea44a81d fix: X-Imp-* headers bridge UI→API impersonation + timezone GMT+4 2026-06-11 20:17:07 +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 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 13466ebd37 simplify: toggle adminMode, canAdminMode flag, remove getOrCreateCompany fallback
- ui/index.js: canAdminMode = isAdmin AND WZ01112 (временно || WZ01112)
- views/index.ejs: checkbox → toggle с JS fetch, условие canAdminMode
- ui/routes/entries.js: убран getOrCreateCompany-фоллбек для админа
- Админ без ?company= видит список компаний, без автозагрузки
- isAdmin теперь чисто из IAM (без || WZ01112)
2026-06-11 13:15:37 +04:00
naeel 4f1f64dd6c feat: adminMode — чек-бокс переключения админского интерфейса
Шаг 1: /toggle-admin роут в ui/routes/auth.js
  - переключает req.session.adminMode
  - canAdmin = isAdmin || clientId === WZ01112 (временно)

Шаг 2: resolveUser в ui/index.js
  - req.user.adminMode из req.session.adminMode
  - isAdmin = IAM.isAdmin || clientId === WZ01112 (временно)

Шаг 3: adminMode вместо isAdmin в интерфейсе
  - ui/routes/entries.js: adminMode решает админский view
  - ui/routes/admin.js: requireAdmin проверяет adminMode

Шаг 4: views/index.ejs
  - чек-бокс «Администратор» (виден только если isAdmin)
  - ссылки Аудит/Лимиты видны только при adminMode
  - селектор компаний — при adminMode
2026-06-11 11:08:03 +04:00
naeel 28954515e3 cleanup: убраны устаревшие comma-separated clientId 2026-06-04 16:38:33 +03:00
naeel a8a07fe019 feat: IAM API интеграция + обновление ТЗ + тесты
- src/auth.js: fetchIamUser(), switchProfile(), userFromPayload(iamData)
- src/config.js: IAM_API_URL из env
- src/routes/oidc.js: обогащение сессии через IAM (с fallback на JWT)
- ui/routes/auth.js: обогащение при токен-логине
- ui/routes/entries.js: switchTo через POST /switch-profile
- src/api/routes/entries.js: resolveCompany через profiles[]
- views/index.ejs: переключатель компаний с названиями из profiles
- .env.example: IAM_API_URL
- docs: обновлены ТЗ-реализация.md, ТЗ-плюс.md, добавлен iam-integration.md
- tests: api-crud.sh (14 тестов CRUD + валидации)
- .gitignore: исключены .env.test, DEPLOY-TESTING.md
2026-06-04 13:53:44 +03:00
naeel 878e46287b v0.5.17: owner_email в companies + универсальный парсер токенов + jwt.decode fallback 2026-06-03 15:17:56 +03:00
naeel 38c7adf25d v0.5.14 — вход по токену, JWKS в mock-режиме, production deploy docs
- POST /login-token: принимает реальный JWT (не только clientId)
- auth.js: verifyAnyToken — mock + JWKS (Keycloak Nubes) одновременно
- auth.js: JWKS предзагружается всегда, даже в mock-режиме
- devops-deploy.md: полная production-инструкция для DevOps
- .env.example: production-ready шаблон
- README.md: актуальный (v0.5.13, архитектура, тесты, ссылки)
- .gitignore: очищен от дубликатов
2026-06-03 12:37:10 +03:00
naeel 9344eb57fb v0.5.13: убраны футеры с версией (версия в шапке и title) 2026-06-03 06:06:53 +03:00
naeel 3dc5dc4ecc v0.5.13: зачистка UI — мёртвый login.ejs, /exp→/export, комментарии 2026-06-03 06:06:40 +03:00
naeel d7afff4bcd v0.5.12: версия в title и заголовке страниц
- <title> → IP WhiteList v<%= appVersion %> — ...
- <h1> на login → IP WhiteList v<%= appVersion %>
- Header → «Белые списки IP v...»
- Футер с версией уже был
2026-06-03 05:42:23 +03:00
naeel 0fd5b43a94 v0.5.12: доделки перед сдачей заказчику
§4.7: агрегация CIDR в публичном /export (aggregateCIDRs)
§5: клиентская JS-валидация (запрещённые диапазоны + нормализация)
§4.1: фильтр «показать удалённые» для admin (API + UI)
§5: уведомление о нормализации (уже работало, проверено)

Файлы:
- server.js: +aggregateCIDRs в /export
- views/index.ejs: JS-валидация + чек-бокс удалённых
- src/api/routes/entries.js: ?includeDeleted=true (admin only)
- ui/routes/entries.js: проброс includeDeleted
- docs/PLAN-predsdachey.md: план доделок
2026-06-02 19:04:24 +03:00
naeel 15b458eb35 v0.5.11: зачистка мёртвого кода + новые интеграционные тесты
Удалено:
- src/routes/*.js (5 файлов) — старая монолитная архитектура
- views/dev-login.ejs — старый dev-логин
- tests/debug-session.js — тесты старой архитектуры

Добавлено:
- safeReturn в src/auth.js
- Новые интеграционные тесты tests/integration.js (67 тестов, UI+API)

Обновлено:
- tests/run-tests.js — убраны старые require, добавлены новые модули
- tests/tz-compliance.js — /exp → /api/v1/entries/export
- server.js — убран require('./src/routes/exp')
2026-06-02 18:04:33 +03:00
naeel 453e25e40f ui: убрать вход по Bearer токену, добавить ручной ввод clientId (отладка) 2026-06-02 17:31:21 +03:00
naeel 23d55a1005 v0.5.4: auto-switch on select change, remove buttons 2026-06-02 11:30:03 +03:00
naeel a083f65323 v0.5.2: multi-company, isAdmin fix, appVersion, docs 2026-06-02 10:52:12 +03:00
naeel 63d3a67eea fix: убрать кнопку Применить из аудита — onchange достаточно 2026-05-31 13:01:32 +03:00
naeel 0abaa65bf8 fix: preserve form values on error + rename Дата→Добавлена, Изменён→Изменена + bump 0.5.1 2026-05-31 12:48:08 +03:00
naeel 02d842fd73 fix: display dates in Europe/Moscow timezone + bump 0.4.8 2026-05-31 08:13:36 +03:00