- прод-режим отказывается стартовать без AUTH_REQUIRED и реальных секретов (opt-out через EVOFW_ALLOW_UNSAFE) - CORS: whitelist через CORS_ORIGINS вместо origin:true; CSP для раздаваемого SPA - транзакции для setAgentPolicySets, reorderPolicyRules, replaceResolvedForRule, replaceIpListEntries - install-скрипты: Zod-валидация имени ссылки, экранирование $ и контрольных символов в RouterOS-рендере - constant-time сравнение enroll-seed - опциональное шифрование токена EvoBGP в БД (EVOFW_SECRET_KEY, AES-256-GCM) и маскирование per-list api_token в ответах - graceful shutdown (SIGTERM/SIGINT) + тесты
36 lines
1.3 KiB
Bash
36 lines
1.3 KiB
Bash
# Database
|
||
DATABASE_URL=sqlite:data/app.db
|
||
|
||
# Auth — portal SSO (prod) или локальный режим (dev)
|
||
# AUTH_REQUIRED=true → JWT от auth-portal, app id `fw`
|
||
AUTH_REQUIRED=false
|
||
AUTH_JWT_SECRET=dev-secret-change-me
|
||
AUTH_ISSUER=https://auth.shnt.top
|
||
AUTH_PORTAL_URL=http://localhost:5175
|
||
JWT_TTL_HOURS=24
|
||
PUBLIC_BASE_URL=http://localhost:8080
|
||
EVOFW_ENROLL_SEED=dev-enroll-seed-change-me
|
||
|
||
# Frontend (Vite) — apps/web/.env.local
|
||
# VITE_AUTH_ENABLED=true
|
||
# VITE_AUTH_PORTAL_URL=http://localhost:5175
|
||
|
||
# ReUI PRO (apps/web/components.json → @reui Authorization)
|
||
REUI_LICENSE_KEY=
|
||
|
||
# EvoBGP integration (source of prefix lists)
|
||
# EVOBGP_API_URL=https://bgp.example.com
|
||
# EVOBGP_INTEGRATION_TOKEN=
|
||
|
||
# Server
|
||
SERVER_PORT=8080
|
||
|
||
# Security hardening (prod)
|
||
# В prod (NODE_ENV=production) сервер откажется стартовать без AUTH_REQUIRED=true
|
||
# и реальных секретов; EVOFW_ALLOW_UNSAFE=true — явный opt-out для изолированных стендов.
|
||
# EVOFW_ALLOW_UNSAFE=false
|
||
# Разрешённые CORS-origins через запятую; пусто = только same-origin
|
||
# CORS_ORIGINS=https://fw.example.com
|
||
# Ключ для шифрования секретов в БД (AES-256-GCM, напр. токен EvoBGP); пусто = без шифрования
|
||
# EVOFW_SECRET_KEY=
|