fix(netflow): согласовать проверку сетевых параметров формы и сервера
This commit is contained in:
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 +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
|
||||
|
||||
Reference in new issue
Block a user