fix(evobgp): требовать подтверждение проверки соединения

This commit is contained in:
Denozordec committed 2026-10-01 22:17:42 +07:00
1 parent 0d2affaf6b
commit dd387cf379
7 files changed
+64 -3

No files matched your search

+3 -1
View File
@@ -10,6 +10,7 @@ import {
} from "react"
import { useDataSource } from "@/lib/data-source"
import type { Domain, IpRange, Asn } from "@/lib/data"
import { confirmEvoBgpConnection } from "@/lib/evobgp-test-receipt"
import { parseEvoBgpCatalog } from "@/lib/evobgp-catalog"
import { ApiClientError, requestJson } from "@/shared/api/http-client"
@@ -172,10 +173,11 @@ export function EvoBGPProvider({ children }: { children: React.ReactNode }) {
const testConnection = useCallback(
async (draft?: EvoBgpTestDraft) => {
try {
await requestJson<{ ok?: boolean }>(backendUrl, "/api/evobgp/test", {
const receipt = await requestJson<unknown>(backendUrl, "/api/evobgp/test", {
method: "POST",
body: JSON.stringify(draft ?? {}),
})
confirmEvoBgpConnection(receipt)
return { ok: true, message: "Соединение с EvoBGP установлено" }
} catch (e) {
return { ok: false, message: errorMessage(e, "Ошибка") }
+10
View File
@@ -0,0 +1,10 @@
import assert from "node:assert/strict"
import { test } from "node:test"
import { confirmEvoBgpConnection } from "./evobgp-test-receipt"
test("only explicit true confirms the connection", () => {
assert.doesNotThrow(() => confirmEvoBgpConnection({ ok: true }))
for (const raw of [null, {}, { ok: false }, { ok: 1 }, { ok: "true" }, []]) {
assert.throws(() => confirmEvoBgpConnection(raw), /не подтверждено сервером/)
}
})
+9
View File
@@ -0,0 +1,9 @@
import { z } from "zod"
const receipt = z.object({ ok: z.literal(true) })
export function confirmEvoBgpConnection(raw: unknown): void {
if (!receipt.safeParse(raw).success) {
throw new Error("Соединение с EvoBGP не подтверждено сервером")
}
}