docs(auth): исправить устаревшее описание авторизации
Документация утверждала, что доступ админский и задаётся заголовком X-Admin-Token со значением ADMIN_PASSWORD, и что без ADMIN_PASSWORD сервер не стартует. Ни то, ни другое не верно: - X-Admin-Token в server.js отсутствует полностью, авторизация держится на сессиях: POST /api/auth/login (bcrypt) выдаёт токен, который клиент шлёт в X-Auth-Token. Проверено на живом стенде: X-Auth-Token -> 200, X-Admin-Token -> 401 на /api/auth/me и /api/users; - ADMIN_PASSWORD участвует только в ensureFirstAdmin() — создании первого админа в пустой БД. Без него сервер пишет предупреждение и стартует; - роли и филиалы: requireAuth (любой активный), requireAdmin (role=admin, самодостаточный), optionalAuth; не-admin ограничены user_branches через branchScope/branchWhere — это в доках не описывалось. Заодно curl-пример проверки авторизации в AGENTS.md вёл на GET /api/groups, который публичный (optionalAuth) и отвечает 200 без токена, то есть авторизацию не проверял. Переведён на /api/auth/me. Секрет Gitea убран из URL remote в ~/.git-credentials (600) — deploy.sh работает без промпта.
This commit is contained in:
@@ -11,7 +11,7 @@ This document defines how AI agents should work with the WhatIDo codebase. Follo
|
||||
- **Stack**: Node.js 20 + Express, PostgreSQL 16, Redis 7, Docker Compose, S3-совместимое хранилище файлов, Tailscale (Serve/Funnel)
|
||||
- **Architecture**: Single Express server (`server.js`) + storage abstraction (`storage.js`) + cache/pub-sub abstraction (`redis.js`) + static frontend in `public/`
|
||||
- **Deployment**: Docker Compose (app + db + s3 + tailscale), bind-mounted uploads, named volumes for Postgres and S3 data
|
||||
- **Auth**: Admin-only via `X-Admin-Token` header (value = `ADMIN_PASSWORD` env var). No user sessions.
|
||||
- **Auth**: сессии в БД. `POST /api/auth/login` (bcrypt) → токен в заголовке `X-Auth-Token`. Роли: `admin` и не-admin, ограниченные филиалами (`user_branches`). `ADMIN_PASSWORD` используется **только** для автосоздания первого админа в пустой БД — это не механизм авторизации API
|
||||
|
||||
---
|
||||
|
||||
@@ -63,7 +63,8 @@ This document defines how AI agents should work with the WhatIDo codebase. Follo
|
||||
- **Секреты**: пароль только в `REDIS_URL` / `REDIS_PASSWORD`, порт 6379 публикуется лишь на `127.0.0.1`
|
||||
|
||||
### 4. API Patterns
|
||||
- **Admin routes**: `requireAdmin` middleware (checks `X-Admin-Token`)
|
||||
- **Middleware**: `requireAuth` — читает `X-Auth-Token`, 401 без валидной активной сессии. `requireAdmin` — самодостаточный (внутри вызывает `requireAuth`, если `req.user` ещё нет), 403 при `role !== 'admin'`. `optionalAuth` — для публичных страниц с персонализацией
|
||||
- **Филиалы**: `branchScope(user)` / `branchWhere(user, alias)` — для не-admin `user.branch_ids` (из `user_branches`) ограничивают выборку; у `admin` `ids = null` и фильтр не добавляется
|
||||
- **Public routes**: `apiLimiter` (300/15min), `entryLimiter` (10/15min), `fileLimiter` (300/15min) — все на `cache.rateLimitStore(...)`, не на `MemoryStore`
|
||||
- **Responses**: JSON, `{ error: 'message' }` on failure, data directly on success
|
||||
- **Pagination**: `limit` / `offset` query params, return `{ items, total }` or `{ entries, total }`
|
||||
@@ -72,7 +73,7 @@ This document defines how AI agents should work with the WhatIDo codebase. Follo
|
||||
### 5. Frontend (public/)
|
||||
- Vanilla HTML/CSS/JS, no build step
|
||||
- Each page = single HTML file + shared `admin.js` / `admin.css`
|
||||
- API calls via `fetch` with `X-Admin-Token` from `localStorage`
|
||||
- API calls via `fetch` with `X-Auth-Token` (токен из `localStorage`); `X-Admin-Token` больше не используется и не работает
|
||||
- Share pages (`share.html`, `links.html`) work without auth
|
||||
|
||||
### 6. Docker / Compose
|
||||
@@ -150,8 +151,13 @@ docker compose up -d --build
|
||||
# Check logs
|
||||
docker compose logs -f app
|
||||
|
||||
# Test API (replace TOKEN)
|
||||
curl -H "X-Admin-Token: $ADMIN_PASSWORD" http://localhost:3003/api/groups
|
||||
# Test API (replace LOGIN/PASS; X-Admin-Token больше не работает)
|
||||
TOKEN=$(curl -s -X POST http://localhost:3003/api/auth/login \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d "{\"username\":\"$LOGIN\",\"password\":\"$PASS\"}" | sed -E 's/.*"token":"([a-f0-9]+)".*/\1/')
|
||||
curl -H "X-Auth-Token: $TOKEN" http://localhost:3003/api/auth/me
|
||||
# /api/groups — публичный (optionalAuth), 200 даже без токена:
|
||||
# для проверки авторизации берите /api/auth/me или /api/users
|
||||
|
||||
# Run backup/restore scripts
|
||||
./scripts/backup.sh
|
||||
|
||||
Reference in New Issue
Block a user