naeel
932e5ca5b6
Fix: таймаут с диагностикой PG (URL + статус БД). Версия 0.1.25
2026-07-09 10:37:32 +04:00
naeel
bf24d1577f
Fix: таймаут 10с на все запросы — не висим, не даём nginx 503. Версия 0.1.25
2026-07-09 10:36:17 +04:00
naeel
9dec159e3d
Fix: errorPage undefined — заменён на inline HTML. Версия 0.1.17
2026-07-08 22:22:02 +04:00
naeel
158de70e4e
Fix: /ready всегда 200 — nginx не блокирует трафик. Версия 0.1.16
2026-07-08 22:20:09 +04:00
naeel
036441a9f1
Fix: ошибки показывают реальную причину, не скрытую
2026-07-08 21:29:28 +04:00
naeel
1b902c5540
Fix: убран process.exit(1) — приложение не падает, показывает сообщение об ошибке. Версия 0.1.14
2026-07-08 21:20:43 +04:00
naeel
73afce35bd
v0.5.178: graceful shutdown, CSRF_SECRET fail-fast, /ready probe
2026-06-22 20:02:01 +04:00
naeel
68c3edd8d8
v0.5.175: safeReturn fix, stack trace не утекает
2026-06-22 19:31:11 +04:00
naeel
df697cd703
v0.5.174: timeout IAM 5с, rate-limiters на login/CRUD/export
2026-06-22 19:24:58 +04:00
naeel
0135d28189
v0.5.173: OIDC state всегда, CSRF смонтирован, session.regenerate
2026-06-22 19:22:42 +04:00
naeel
e943b33a04
v0.5.172: удалён /debug-session, UNIQUE индекс, убраны test/dev IAM
2026-06-22 19:00:10 +04:00
naeel
3d20c2a31d
v0.5.166: /export→/v2/export редирект, экспорт только админам
2026-06-22 17:46:52 +04:00
naeel
24f1d5af77
v0.5.164: закомментированы старые UI/Api/export, всё в v2
2026-06-22 17:23:56 +04:00
naeel
ebcdb1ccb1
v0.5.107: inline-редактирование в таблице, редирект / → /v2/app
2026-06-15 13:57:48 +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
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
8c1787df19
bump 0.5.37 — debug /debug-session endpoint
2026-06-11 10:49:54 +04:00
naeel
61361ec7e2
bump 0.5.27 — error handler: URL, user, clientId, stack
2026-06-09 21:01:33 +04:00
naeel
d0bfdab085
bump 0.5.26 — fix server.js error handler to show message
2026-06-09 21:01:00 +04:00
naeel
9c74479121
bump 0.5.25 — error details on 500 page, ensureSchema catch
...
- ui/index.js: 500 page shows error.message
- server.js: ensureSchema error logged, doesn't crash startup
2026-06-09 20:56:58 +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
58e34042de
fix: header injection, api timeout, nginx duplicate + bump 0.5.21
...
- server.js: санитизация filename в /export (header injection)
- ui/api-client.js: req.setTimeout(15000) + try/catch JSON.parse
- docs/devops-deploy.md: убран дубль X-Forwarded-Proto
2026-06-04 15:41:03 +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
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
3dc5dc4ecc
v0.5.13: зачистка UI — мёртвый login.ejs, /exp→/export, комментарии
2026-06-03 06:06:40 +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
6bbd0fe1e2
v0.5.11: /export публичный (временно, с заделом на Keycloak SSO)
...
Изменения:
- server.js: публичный GET /export до всей авторизации
🔮 Для Keycloak SSO: раскомментировать auth.bearerMiddleware
- Удалён ошибочно созданный src/routes/exp.js
- Обновлены тесты: /export доступен без авторизации
2026-06-02 18:12:35 +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
b0a5875f4e
refactor: /exp в отдельный модуль src/routes/exp.js
2026-05-31 09:05:48 +03:00
naeel
ea4551ce13
feat: временный публичный /exp без авторизации (v0.4.9)
2026-05-31 09:03:30 +03:00
naeel
c85a438ba2
feat: UI-слой через /api/v1/* (ui/, views/ui-login.ejs, views/error.ejs)
...
- ui/api-client.js: HTTP-клиент к /api/v1/* (token из session.token)
- ui/routes/auth.js: /login (mock-пресеты), /login-token (Bearer paste), /logout
- ui/routes/entries.js: /, /add, /edit/:id, /delete/:id через API
- ui/routes/admin.js: /admin, /admin/limit/:id, /audit через API
- ui/routes/export.js: /export → проксирует /api/v1/entries/export
- ui/index.js: createUiRouter() — requireToken + resolveUser middleware
- views/ui-login.ejs: страница входа (mock + token)
- views/error.ejs: шаблон для 403/404/500
API расширения:
- GET /api/v1/entries теперь возвращает limit и used
- GET /api/v1/entries?company=<id> (admin): записи другой компании
- POST/PATCH/DELETE /api/v1/entries?company=<id> (admin): мутации для другой компании
- GET /api/v1/entries/export: агрегированный CIDR (перенесён из монолита)
- GET /api/v1/audit?company=<id>: журнал (перенесён из монолита)
server.js: заменены src/routes/* на ui/createUiRouter(), убран CSRF
2026-05-30 19:02:51 +03:00
naeel
87216389e3
feat: REST API v1 (Bearer JWT, CRUD entries + admin companies)
2026-05-30 18:04:27 +03:00
naeel
e97c36f19f
feat: integration tests CRUD 34/34 (supertest + real DB)
2026-05-30 17:06:42 +03:00
naeel
d96919e68c
fix: logo SVG viewBox (0 0 311 69), version in UI footer (v0.2.0)
2026-05-30 15:58:51 +03:00
naeel
bcd8c5631a
feat: authLimiter on POST /login, GET /callback, POST /dev-login (10 req / 5 min)
2026-05-30 15:38:38 +03:00
naeel
b6e8f31cc6
refactor: csp.js exports CSP_DIRECTIVES, helmet applies them in one call
2026-05-30 15:37:32 +03:00
naeel
695264e7b4
feat: CSP enabled via src/middleware/csp.js (unsafe-inline, blocks external/frame/object)
2026-05-30 15:36:22 +03:00
naeel
f4c9983612
feat: PG session store via connect-pg-simple (src/middleware/session.js)
2026-05-30 15:34:50 +03:00
naeel
a5170a062c
security: fix 7 vulnerabilities from Opus code review
...
- [A01] /export: mount after auth.middleware, filter by company for non-admin
- [A02] OIDC: verify issuer, audience, select key by kid; preload JWKS at startup
- [A07] session fixation: session.regenerate() in POST /login, GET /callback, POST /dev-login
- [A10] open redirect: safeReturn() helper validates returnTo (blocks //evil.com, https:// etc)
- [A05] CSRF: getSessionIdentifier uses req.sessionID instead of dead req.cookies.jwt
- [A05] fail-fast: reject default SESSION_SECRET / CSRF_SECRET in NODE_ENV=production
- [A05] DEV_MODE=true blocked in production
Tests: 68 PASS, 0 FAIL (was 50, added 18 new security-focused tests)
2026-05-30 15:25:57 +03:00
naeel
86ca944c52
feat: Authorization Code Flow (KK) + session middleware + dev-login
...
- src/auth.js: OIDC mode (KC_CLIENT_ID/KC_CLIENT_SECRET), session-based
middleware, legacy jwt-cookie migration, httpGet/httpPost без внешних зав.
- src/routes/auth.js: GET /callback (OIDC), GET+POST /dev-login (backdoor),
session-based login/logout для обоих режимов
- server.js: express-session (8h, httpOnly, sameSite lax), trust proxy в prod
- views/dev-login.ejs: форма с пресетами MOCK_USERS + произвольные поля
- views/login.ejs: ссылка на /dev-login если devLoginEnabled
- tests: +5 тестов (session middleware), 50 PASS / 0 FAIL
Env-переменные:
KC_CLIENT_ID, KC_CLIENT_SECRET, KC_BASE_URL, APP_URL — OIDC режим
SESSION_SECRET — секрет сессии
DEV_MODE=true — /dev-login без пароля
DEV_SECRET=xyz — /dev-login с ?key=xyz
2026-05-30 14:37:29 +03:00
naeel
ef564ee4e5
refactor: шаг 8 — server.js упрощён до 131 строки (только init + роутеры)
2026-05-30 13:42:43 +03:00
naeel
3f18e05d2d
refactor: шаг 7 — /audit /admin /admin/limit вынесены в src/routes/admin.js
2026-05-30 13:42:06 +03:00
naeel
87a841fa56
refactor: шаг 6 — GET / и POST /add /edit /delete вынесены в src/routes/entries.js
2026-05-30 13:40:50 +03:00
naeel
55d26c1ece
refactor: шаг 5 — /login /logout вынесены в src/routes/auth.js
2026-05-30 13:39:04 +03:00
naeel
f91a882379
refactor: шаг 4 — GET /export вынесен в src/routes/export.js
2026-05-30 13:38:03 +03:00
naeel
b25f346d97
refactor: шаг 3 — CSRF-инициализация вынесена в src/middleware/csrf.js
2026-05-30 13:37:08 +03:00