Commit Graph
100 Commits
Author SHA1 Message Date
naeel 453e25e40f ui: убрать вход по Bearer токену, добавить ручной ввод clientId (отладка) 2026-06-02 17:31:21 +03:00
naeel 51a003e078 v0.5.10: /export — attachment default, ?view=1 inline, ?filename=custom 2026-06-02 14:49:50 +03:00
naeel 72e021acfe docs: уточнение — любой юзер компании может редактировать whitelist 2026-06-02 14:37:27 +03:00
naeel 9384e516ed docs: deploy-vm + copilot-instructions 2026-06-02 14:20:24 +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 ff4b35414c v0.5.6: bump version 2026-06-02 11:30:23 +03:00
naeel 23d55a1005 v0.5.4: auto-switch on select change, remove buttons 2026-06-02 11:30:03 +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
naeel 8ab2271ff9 v0.5.4: fix isolation — resolveUser syncs activeClientId from session 2026-06-02 11:11:20 +03:00
naeel 1b1b3b6bd7 v0.5.3: fix multi-company API isolation (client_id param) 2026-06-02 10:57:52 +03:00
naeel a083f65323 v0.5.2: multi-company, isAdmin fix, appVersion, docs 2026-06-02 10:52:12 +03:00
naeel 07528b0de3 cluster cleanup 2026-06-01: remove fission, sless, fix metrics-server 2026-06-01 17:17:43 +03:00
naeel 94fb12b99d chore: скрыть questions-devops.md + обновить 2026-05-31 13:40:30 +03:00
naeel a3d535781c chore: скрыть agent review files из репо 2026-05-31 13:38:41 +03:00
naeel f75214c2a7 chore: скрыть prompt-opus файлы (.gitignore) 2026-05-31 13:37:27 +03:00
naeel c4bb86f2fc chore: скрыть внутреннюю аналитику из публичного репо (.gitignore) 2026-05-31 13:33:18 +03:00
naeel 1e581b3208 test: helpers.js — безопасные тестовые CIDR, проверка коллизий, удаление аудита + fix compliance 2026-05-31 13:17:21 +03:00
naeel 10ef2011be fix: pre-cleanup удаляет только тестовые CIDR, не все записи 2026-05-31 13:06:21 +03:00
naeel d1d591299e fix: compliance cleanup — add 86.0.0.0/24, 87.0.0.1/32 to cleanup list 2026-05-31 13:04:32 +03:00
naeel 63d3a67eea fix: убрать кнопку Применить из аудита — onchange достаточно 2026-05-31 13:01:32 +03:00
naeel 64da1f9834 test: compliance fix mask overlap + test results log (340 pass, 0 fail) 2026-05-31 12:58:20 +03:00
naeel 0abaa65bf8 fix: preserve form values on error + rename Дата→Добавлена, Изменён→Изменена + bump 0.5.1 2026-05-31 12:48:08 +03:00
naeel bfeae74e71 docs: README — секция 'Как получить список', /export vs /exp 2026-05-31 12:43:02 +03:00
naeel 707319ed23 docs: README — в процессе разработки, описание функционала, без установки 2026-05-31 12:41:04 +03:00
naeel e90b0454c1 docs: README — quick start, architecture, roles, deploy 2026-05-31 12:37:49 +03:00
naeel 5e1ce80003 test: ТЗ compliance — 45 API-тестов + полный отчёт о соответствии 2026-05-31 10:26:28 +03:00
naeel 35d8b7fcc2 docs: full documentation update — AGENT.md v0.5.0 + CONTEXT.md fixes/changes summary 2026-05-31 10:21:27 +03:00
naeel d8613c7112 test: stress tests expanded to 191 (concurrency, boundary IPs, CIDR masks, auth attacks, unicode, session, massive parallel) 2026-05-31 10:18:33 +03:00
naeel a24634199b test: stress tests — concurrency, races, edge cases (32 pass) + bump 0.5.0 2026-05-31 10:10:48 +03:00
naeel d8de91577c 1 2026-05-31 10:06:50 +03:00
naeel c0c10a5ea0 docs: добавить исходный ТЗ docx 2026-05-31 09:43:14 +03:00
naeel 0413b44051 fix: P0/P1 fixes (auth+limit+schema) + project audit docs 2026-05-31 09:42:46 +03:00
naeel d81430dc9a docs: AGENT.md — полное резюме проекта для агентов и разработчиков 2026-05-31 09:12:38 +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 02d842fd73 fix: display dates in Europe/Moscow timezone + bump 0.4.8 2026-05-31 08:13:36 +03:00
naeel 5c286af43b refactor: entries.js — remove 'own' hack, clean admin company routing + bump 0.4.7 2026-05-31 07:25:42 +03:00
naeel a355b34e4a fix: remove duplicate own company option in dropdown + bump 0.4.6 2026-05-31 07:23:25 +03:00
naeel fa67872f30 feat: admin own company option in dropdown + fix company=own routing + bump 0.4.5 2026-05-31 06:57:34 +03:00
naeel c19480336d fix: remove inline JS handlers (onclick/onchange/onsubmit) -> event delegation + bump 0.4.4 2026-05-31 06:26:47 +03:00
naeel a6177c4cef feat: admin auto-redirect to first company on / + bump 0.4.3 2026-05-31 06:15:37 +03:00
naeel 8531a0b545 fix: audit filter onchange restore + bump 0.4.2 2026-05-31 06:04:19 +03:00
naeel 6cf4bc0b44 fix: /admin — pass defaultLimit to template (fixes 500) 2026-05-31 05:52:01 +03:00
naeel 86b782bc33 fix: audit filter — add submit button, fix type comparison 2026-05-31 05:49:37 +03:00
naeel ed5b3c8367 feat: comprehensive API tests (104 pass) + fix: validation errors → 400, comment length limit 2026-05-30 19:44:37 +03:00
naeel 7779bf416a chore: bump version 0.4.0 → 0.4.1 2026-05-30 19:20:00 +03:00
naeel aef7da5740 fix: ReferenceError message/wasNormalized → success в шаблонах (500 на всех страницах) 2026-05-30 19:19:15 +03:00
naeel d31b8952b4 docs: перенос документации из IPWhiteList + CONTEXT.md (резюме для нового чата) 2026-05-30 19:10:34 +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 09bb56c6f4 test: long comment, limit=0, invalid limit (59/59 pass) 2026-05-30 17:22:18 +03:00
naeel 7d2b6a309f test: export content, empty comment, deleted not in export (53/53 pass) 2026-05-30 17:20:41 +03:00
naeel 1e330a4395 test: IPv6, boundary CIDR, race condition, rate-limiter (49/49 pass) 2026-05-30 17:18:56 +03:00
naeel 91d18afe10 test: IDOR + admin ACL + audit ACL sections (45/45 pass) 2026-05-30 17:14:19 +03:00
naeel 1f5c0d8623 test: XSS + rate-limiter sections (40/40 pass) 2026-05-30 17:11:42 +03:00
naeel 8ab7eed629 test: limit + audit_log sections (38/38 pass) 2026-05-30 17:09:50 +03:00
naeel e97c36f19f feat: integration tests CRUD 34/34 (supertest + real DB) 2026-05-30 17:06:42 +03:00
naeel 093b96b9ae fix: CSRF 403 — читать токен из body (_csrf), cookieName без __Host- (v0.4.0) 2026-05-30 16:49:35 +03:00
naeel 0845440f86 chore: bump version to 0.3.0 2026-05-30 16:40:25 +03:00
naeel 97c3f66b3c fix: saveUninitialized true — CSRF токен валиден между GET и POST /login 2026-05-30 16:29:05 +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 289e7cd751 fix: overlaps() canonical formula (a.start<=b.end && b.start<=a.end) 2026-05-30 15:31:37 +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 ed6e9c4464 промпт для код ревью от Опус 4.8 2026-05-30 15:07:30 +03:00
naeel e9bfe6dae6 код ревью от Опус 4.8 2026-05-30 15:06:51 +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 876e03b78b research: payg-report полная копия репы (все файлы, без .git) 2026-05-30 14:23:10 +03:00
naeel 032b41b3f5 research: auth-flow.md — полная документация SSO, KK endpoints, JWT claims, открытые вопросы 2026-05-30 14:21:42 +03:00
naeel 374a1a87b6 research: SSO-пример из payg-report (Application.cfc, oauth2.cfc, jwt.cfc) 2026-05-30 14:19:51 +03:00
naeel 6de5631451 test: добавлен tests/run-tests.js (45 тестов без БД) 2026-05-30 13:59:21 +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
naeel 35210291d0 refactor: шаг 2 — лимитеры вынесены в src/middleware/rateLimit.js 2026-05-30 13:36:10 +03:00
naeel 631641bbf0 refactor: шаг 1 — MOCK_USERS и backUrl вынесены в src/config.js 2026-05-30 13:35:16 +03:00
naeel 695ed231e6 feat: CSRF защита (double-submit cookie) — все мутирующие POST-роуты, login-форма 2026-05-30 13:28:01 +03:00
naeel 2332827326 feat: helmet (security headers) + rate-limit (30/min mutations, 20/min export) 2026-05-30 13:22:54 +03:00
naeel c319e76c74 feat: UI — edit modal, admin-панель выбора компании, кнопки Аудит/Лимиты; views/audit.ejs, views/admin.ejs 2026-05-30 09:16:08 +03:00
naeel 8c1bafeb97 feat: роуты /edit, /audit, /admin, /admin/limit — admin-ветки, публичный /export с агрегацией 2026-05-30 09:11:41 +03:00
naeel c6c9d01cd7 feat: admin-роль (isAdmin, requireAdmin), getCompanyById, getAllCompanies, setLimit, getAudit с JOIN 2026-05-30 09:09:24 +03:00
naeel cda0b085e6 feat: CIDR агрегация (aggregateCIDRs) для /export по ТЗ 2026-05-30 09:07:30 +03:00
naeel 2fb4548bf6 fix: auth.js на jsonwebtoken (CJS) вместо jose (ESM) 2026-05-30 08:45:21 +03:00
naeel 28b8e7bd27 feat: мок JWT-аутентификация (RS256, JWKS, cookie)
- src/auth.js: генерация ключей RS256, JWKS endpoint, verify/issue/middleware
- views/login.ejs: мок-страница входа с выбором пользователя
- server.js: cookie-parser, /login, /logout, auth.middleware
- При переключении на прод: JWKS_URL в env → всё остальное без изменений
2026-05-30 08:42:09 +03:00
naeel 51f2f4ddaf fix: гонки (транзакции), валидатор (суперсеть, parseInt, слэши), auth (401, DEV_MODE, export), схема (UNIQUE, CHECK, FK), client-валидация 2026-05-30 08:28:21 +03:00
naeel 60972169c5 feat: логотип Nubes в header'е 2026-05-29 23:58:07 +03:00
naeel 0270432bfc style: UI в стиле платформы — карточки с header'ом, таблица с разделителями 2026-05-29 23:46:55 +03:00
naeel 4702f14dc9 feat: favicon Nubes 2026-05-29 23:40:46 +03:00
naeel 39feac109b style: UI в стиле Nubes — тёмный header, карточки, индикаторы 2026-05-29 23:38:29 +03:00
naeel a0a52e99fb feat: роуты и UI — список, добавление, удаление, экспорт 2026-05-29 23:30:43 +03:00
naeel d4a70bb947 feat: валидатор IPv4, CRUD-запросы, схема БД 2026-05-29 23:29:11 +03:00