fix(api): fail-safe прод-старт, транзакции и санитизация install-скриптов
- прод-режим отказывается стартовать без 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) + тесты
This commit is contained in:
@@ -492,8 +492,22 @@ export const dashboardStatsSchema = z.object({
|
||||
lists_total: z.number().int(),
|
||||
})
|
||||
|
||||
/**
|
||||
* Install-link client name. The name is embedded into generated bash /
|
||||
* RouterOS install scripts, so it is limited to safe printable characters.
|
||||
*/
|
||||
export const installLinkNameSchema = z
|
||||
.string()
|
||||
.trim()
|
||||
.min(1)
|
||||
.max(64)
|
||||
.regex(
|
||||
/^[\p{L}\p{N}][\p{L}\p{N} .:_-]*$/u,
|
||||
'Имя может содержать буквы, цифры и символы . : _ - (без перевода строк и кавычек)',
|
||||
)
|
||||
|
||||
export const createInstallLinkBodySchema = z.object({
|
||||
name: z.string().min(1),
|
||||
name: installLinkNameSchema,
|
||||
platform: agentPlatformSchema.optional().default('linux'),
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user