naeel
3d20c2a31d
v0.5.166: /export→/v2/export редирект, экспорт только админам
2026-06-22 17:46:52 +04:00
naeel
d72bb84d25
v0.5.155: src/auth.js переведён на v2/config IAM_API_BASE
2026-06-17 14:44:04 +04:00
naeel
fb17c83e60
v0.5.154: fix приоритет IAM_API_URL, docs/IAM-ENV.md
2026-06-17 14:30:59 +04:00
naeel
f60713f127
v0.5.153: приоритет IAM_API_BASE выше IAM_API_URL
2026-06-17 14:03:21 +04:00
naeel
74f805682f
v0.5.152: fix приоритет IAM_API_URL выше IAM_API_BASE
2026-06-17 13:51:04 +04:00
naeel
060b20002c
v0.5.151: IAM_API_URL → IAM_API_BASE (единая переменная)
2026-06-17 11:35:30 +04:00
naeel
24fb8cdc56
v0.5.150: IAM_API_URL dev→prod, confirm logout
2026-06-17 11:10:52 +04:00
naeel
08abab6e36
v0.5.138: CSP script-src-attr unsafe-inline для onchange
2026-06-16 05:05:37 +04:00
naeel
cb1e4fac22
v0.5.116: фикс impersonatedCompanyId в сессии + тестовая имперсонация по трём ENV
2026-06-15 15:05:21 +04:00
naeel
2e89a71afa
oidc: force redirect to /v2/app after login, v0.5.100
2026-06-15 12:28:33 +04:00
naeel
9eba8859cf
oidc: default returnTo /v2/app, v0.5.99
2026-06-15 12:22:18 +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
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
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
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
02859d6a7a
fix: replace regex constraint with LIKE '%/%' for PG compat
...
- constraint CHECK (value_cidr LIKE '%/%') instead of regex
- regex broke on managed PG with standard_conforming_strings=off
- ALTER TABLE adds constraint on existing tables
2026-06-10 11:51:08 +04:00
naeel
e22b7ac408
bump 0.5.34 — save idToken for logout
2026-06-09 22:37:05 +04:00
naeel
9fc3665292
bump 0.5.32 — remove audience check from JWT verify
2026-06-09 22:17:23 +04:00
naeel
4a45546b0d
bump 0.5.31 — disable state check in production for SSO test
2026-06-09 22:01:26 +04:00
naeel
9b76333b22
bump 0.5.30 — restore state check, clean code
2026-06-09 21:59:26 +04:00
naeel
a39f97f3b4
bump 0.5.29 — add KC_BASE_URL to exchange error
2026-06-09 21:56:45 +04:00
naeel
6c5215513c
bump 0.5.28 — disable state check for SSO test
2026-06-09 21:53:07 +04:00
naeel
f40bcb84fd
feat: ensureSchema — приложение само создаёт таблицы при старте
...
- db.js: ensureSchema() = CREATE TABLE IF NOT EXISTS для всех таблиц
- server.js: вызов ensureSchema() после коннекта к БД
- Больше не нужен ручной psql -f sql/schema.sql
2026-06-09 19:55:07 +04:00
naeel
b0e43f981b
Revert "feat: auto-migration on startup (ensureSchema)"
...
This reverts commit dce2368712 .
2026-06-09 19:48:43 +04:00
naeel
dce2368712
feat: auto-migration on startup (ensureSchema)
...
- db.js: ensureSchema() creates tables if not exist
- server.js: calls ensureSchema() after DB connection
- No manual SQL needed for deployment
2026-06-09 19:46:19 +04:00
naeel
9fd808bc1f
chore: DB defaults for managed platform, reduce required env vars
...
- db.js: DB_HOST default postgresqlk8s-master, DB_NAME default ipwhitelist, DB_USER default super
- server.js: fail-fast for DB_PASS in production (instead of IAM_API_URL)
- After this change: only DB_PASS is required for mock mode
2026-06-09 19:20:29 +04:00
naeel
393595301b
fix: IAM_API_URL default to dev, document env selection
...
- .env.example: показаны три URL стендов (dev/test/prod), dev по умолчанию
- src/config.js: дефолт IAM_API_URL сменён с prod на dev (безопаснее)
- docs/devops-deploy.md: добавлена строка IAM_API_URL в таблицу настройки .env
2026-06-06 12:00:27 +04:00
naeel
e9bd94cea3
fix: 0.0.0.0/8 → blocked ranges + bump 0.5.23
2026-06-04 16:13:04 +03:00
naeel
c1df27d29d
fix: DeepSeek audit — header injection + IAM limit + bump 0.5.22
...
- src/api/routes/entries.js: санитизация filename в /api/v1/entries/export
- ui/routes/export.js: санитизация filename в UI /export
- src/auth.js: лимит 100KB для IAM-ответов
- src/api/routes/entries.js: fallback для пустого allowedIds
2026-06-04 15:48:16 +03:00
naeel
99796202cb
fix: IAM warning, nginx doc, fail-fast IAM_API_URL + bump 0.5.20
...
- src/routes/oidc.js: console.error при IAM fallback вместо warn
- server.js: проверка IAM_API_URL в production mode
- docs/devops-deploy.md: X-Forwarded-Proto в nginx config
2026-06-04 15:33:32 +03:00
naeel
8cbbe52316
fix: safeReturn для всех редиректов (security)
...
- ui/routes/auth.js: safeReturn() для returnTo в POST /login и /login-token
- src/routes/oidc.js: safeLocal() для oidcReturnTo в /callback
2026-06-04 15:26:26 +03:00
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
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
ba0779db51
v0.5.13: подготовка OIDC (Keycloak) — роуты готовы, ждут DevOps
...
- src/routes/oidc.js: /login, /callback, /logout
Активны ТОЛЬКО при KC_CLIENT_ID+KC_CLIENT_SECRET
Сейчас (mock) — пустой router, запросы уходят в UI
- server.js: подключены OIDC-роуты
- docs/deploy-keycloak.md: что нужно от DevOps для включения
2026-06-03 06:12:22 +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
51a003e078
v0.5.10: /export — attachment default, ?view=1 inline, ?filename=custom
2026-06-02 14:49:50 +03:00
naeel
66a52d9363
v0.5.9: fix tests IDs, revert dotenv abs paths, deploy-vm doc
2026-06-02 14:20:16 +03:00
naeel
b91b78ab04
v0.5.8: distinct MOCK_USERS (WZ88888=АЛЬФА, WZ77777=БЕТА)
2026-06-02 11:36:53 +03:00
naeel
f1416e6566
v0.5.7: unique company names in MOCK_USERS
2026-06-02 11:32:41 +03:00
naeel
8ea10f1e37
v0.5.4: fix multi-company API — client_id validation, export isolation, 121 tests PASS
2026-06-02 11:20:51 +03:00
naeel
59ad0fa67e
v0.5.5: fix export client_id + multi-company tests (section O)
2026-06-02 11:17:23 +03:00