Шхуна не тонет: security, infra и доки на русском.
Безопасность довёл до ума — Cursor-генерацию переписал руками. IDOR закрыл, CSRF задушил, refresh rotation теперь как надо. HSTS на staging, ENABLE_DOCS=false, install.env recovery протестил. Backend: - jwt_denylist + auth_epoch: мгновенный revoke access JWT (logout/block/reset) - auth/admin/users: bump epoch, logout с Bearer, forgot_password skip для blocked - install_secrets: путь всегда apps/api/data/secrets/ (bootstrap из корня не ломает Docker) - seed: SEED_DEMO_USERS=false на prod/staging - тесты: jwt revoke, integration, coverage gate 90% Frontend: - logout шлёт Bearer, обработка TOKEN_REVOKED - guards TypeScript fix - E2E: blocked user → 401 сразу после block Infra: - staging/prod compose, TLS nginx, deploy-скрипты - k6 §17.2, backup/health/smoke scripts Docs: - docs/ на русском: project, security, deploy, release (старые md слили) - README короткий + план ТЗ + стандартные логины dev Код готов к плаванию. Капитан может идти писать фронт.
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
# Production API environment (non-secret keys). Secrets live in data/secrets/install.env
|
||||
APP_ENV=production
|
||||
ENABLE_DOCS=false
|
||||
ENABLE_TEST_ROUTES=false
|
||||
COOKIE_SECURE=true
|
||||
ENABLE_RATE_LIMIT=true
|
||||
EMAIL_DELIVERY_MODE=smtp
|
||||
SEED_DEMO_USERS=false
|
||||
JWT_ACCESS_TTL_MIN=15
|
||||
JWT_REFRESH_TTL_DAYS=30
|
||||
STORAGE_MODE=s3
|
||||
S3_BUCKET=compton
|
||||
S3_REGION=us-east-1
|
||||
AVATAR_MAX_BYTES=2097152
|
||||
MEDIA_URL_TTL_SECONDS=600
|
||||
LOG_LEVEL=INFO
|
||||
AUDIT_RETENTION_DAYS=90
|
||||
COMPTON_SETTINGS_PATH=data/compton_settings.json
|
||||
ADMIN_AUDIT_LOG_PATH=data/logs/admin-audit.jsonl
|
||||
SERVER_LOG_PATH=data/logs/server.log
|
||||
PASSWORD_DENYLIST_PATH=data/security/password-denylist.txt
|
||||
# Set on server: FRONTEND_URL, PUBLIC_BASE_URL, CORS_ORIGINS, SMTP_*, DATABASE_URL (via install.env)
|
||||
Reference in New Issue
Block a user