fix(ui): защищать чтение WireGuard при смене источника
This commit is contained in:
1 parent
e51964b4d2
commit
c7aec1500c
11 files changed
+182
-53
No files matched your search
@@ -1,5 +1,5 @@
|
||||
import { parseConfigRevisions } from "@/lib/config-revisions"
|
||||
import { wgIfaceDtoSchema, wgImportResponseSchema, wgExportResponseSchema } from "@mmapp/contracts/wireguard"
|
||||
import { wgListResponseSchema, wgIfaceDtoSchema, wgImportResponseSchema, wgExportResponseSchema } from "@mmapp/contracts/wireguard"
|
||||
import type {
|
||||
WgCreateInterface,
|
||||
WgCreatePeerRequest,
|
||||
@@ -21,7 +21,14 @@ export async function listWireGuard(
|
||||
if (opts?.serverId) q.set("serverId", opts.serverId)
|
||||
if (opts?.includePrivateKey) q.set("includePrivateKey", "1")
|
||||
const qs = q.toString()
|
||||
return requestJson<WgListResponse>(baseUrl, `/api/wireguard${qs ? `?${qs}` : ""}`)
|
||||
const parsed = wgListResponseSchema.safeParse(await requestJson<unknown>(baseUrl, `/api/wireguard${qs ? `?${qs}` : ""}`))
|
||||
if (!parsed.success) throw new Error("Ответ сервера содержит некорректный каталог WireGuard")
|
||||
const catalog = parsed.data, failures = catalog.failures ?? []
|
||||
const uniqueInterfaces = new Set(catalog.interfaces.map(row => JSON.stringify([row.serverId, row.id]))).size === catalog.interfaces.length
|
||||
const uniquePeers = catalog.interfaces.every(row => new Set(row.peers.map(peer => peer.id)).size === row.peers.length)
|
||||
const consistentFailures = failures.every(f => f.serverId.trim().length > 0) && new Set(failures.map(f => f.serverId)).size === failures.length && !catalog.interfaces.some(row => failures.some(f => f.serverId === row.serverId))
|
||||
if (!uniqueInterfaces || !uniquePeers || !consistentFailures) throw new Error("Ответ сервера содержит некорректный каталог WireGuard")
|
||||
return catalog
|
||||
}
|
||||
|
||||
export async function createWireGuardInterface(
|
||||
|
||||
Reference in new issue
Block a user