fix(evobgp): требовать подтверждение проверки соединения
This commit is contained in:
1 parent
0d2affaf6b
commit
dd387cf379
7 files changed
+64
-3
No files matched your search
@@ -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, "Ошибка") }
|
||||
|
||||
@@ -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), /не подтверждено сервером/)
|
||||
}
|
||||
})
|
||||
@@ -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 не подтверждено сервером")
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user