fix(netflow): согласовать проверку сетевых параметров формы и сервера

This commit is contained in:
Denozordec committed 2026-10-03 12:59:05 +07:00
1 parent 32b7812169
commit b80fa042d5
12 files changed
+56 -20

No files matched your search

@@ -14,7 +14,7 @@ await app.register(createTrafficFlowSettingsRoutes({
hostFiles: async () => { exports++; return [{id:"wg",label:"WG",filename:"wg-flow.conf",code:"fixture-only"}] },
}), {prefix:"/api"})
const put = (payload:unknown) => app.inject({method:"PUT",url:"/api/traffic/flow/settings",payload})
for(const bad of [{}, {ignored:true}, {flowListenPort:65536}, {wgListenPort:0}, {enabled:"false"}, {topN:1001}]) assert.equal((await put(bad)).statusCode,400)
for(const bad of [{}, {ignored:true}, {flowListenPort:65536}, {wgListenPort:0}, {enabled:"false"}, {topN:1001}, {collectorIp:"not-an-ip"}, {collectorIp:"2001:db8::1"}, {prefix:"10.255.254.0/33"}, {publicEndpoint:"https://collector.test"}, {collectorIp:"$(fixture)"}, {publicEndpoint:"host.test:51821"}, {publicEndpoint:"host.test\nfixture"}]) assert.equal((await put(bad)).statusCode,400)
assert.equal(updates,0); assert.equal(starts,0)
assert.equal((await app.inject({method:"GET",url:"/api/traffic/flow/host-files"})).statusCode,409)
assert.equal(keys,0); assert.equal(exports,0)
+1 -5
View File
@@ -1,5 +1,4 @@
import type { FastifyPluginAsyncZod } from "@fastify/type-provider-zod"
import { z } from "zod"
import { trafficFlowSettingsPatchSchema, type TrafficFlowSettingsDto, type TrafficFlowSettingsPatch, type TrafficFlowHostFile } from "@mmapp/contracts/traffic-flow"
type Dependencies = {
@@ -10,10 +9,7 @@ type Dependencies = {
hasPrivateKey: () => Promise<boolean>
hostFiles: () => Promise<TrafficFlowHostFile[]>
}
const patchSchema = trafficFlowSettingsPatchSchema.extend({
flowListenPort: z.number().int().min(1).max(65535).optional(),
wgListenPort: z.number().int().min(1).max(65535).optional(),
}).strict().refine(patch => Object.values(patch).some(value => value !== undefined))
const patchSchema = trafficFlowSettingsPatchSchema.strict().refine(patch => Object.values(patch).some(value => value !== undefined))
export function createTrafficFlowSettingsRoutes(deps: Dependencies): FastifyPluginAsyncZod {
return async app => {
@@ -1,11 +1,12 @@
import { generateNativeConf } from "./wireguard-config.js"
import { getTrafficFlowSettingsRow, listHostPeers } from "./traffic-flow-settings.js"
import type { TrafficFlowHostFile } from "@mmapp/contracts/traffic-flow"
import { trafficFlowCollectorIpSchema, type TrafficFlowHostFile } from "@mmapp/contracts/traffic-flow"
const COMPOSE_DIR = "/opt/cdn-mm"
export async function buildHostWgQuickConf(): Promise<string> {
const row = await getTrafficFlowSettingsRow()
trafficFlowCollectorIpSchema.parse(row.collectorIp)
const peers = await listHostPeers()
return generateNativeConf({
name: "wg-flow",
@@ -25,6 +26,7 @@ export async function buildHostWgQuickConf(): Promise<string> {
export async function buildHostComposeOverride(): Promise<string> {
const row = await getTrafficFlowSettingsRow()
trafficFlowCollectorIpSchema.parse(row.collectorIp)
return [
"# Docker Compose merge для /opt/cdn-mm",
"# Не править docker-compose.yml. Traefik не трогать.",
@@ -44,6 +46,7 @@ export async function buildHostComposeOverride(): Promise<string> {
export async function buildHostLinuxInstallSh(): Promise<string> {
const row = await getTrafficFlowSettingsRow()
trafficFlowCollectorIpSchema.parse(row.collectorIp)
const conf = (await buildHostWgQuickConf()).replace(/\s+$/, "") + "\n"
const override = await buildHostComposeOverride()
const collector = row.collectorIp