Безопасность довёл до ума — 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 Код готов к плаванию. Капитан может идти писать фронт.
23 lines
725 B
Bash
23 lines
725 B
Bash
# 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)
|