fix(ui): подтверждать выполнение команд терминала
This commit is contained in:
1 parent
bc20e5b9f4
commit
a2eae189be
7 files changed
+205
-422
No files matched your search
@@ -0,0 +1,24 @@
|
||||
import {z} from "zod"
|
||||
export const terminalServersSchema=z.array(z.object({
|
||||
id:z.number().int().positive(),name:z.string(),host:z.string().min(1),country:z.string(),enabled:z.boolean(),
|
||||
status:z.enum(["online","offline","degraded"]).nullable(),os:z.string().nullable().optional(),identityName:z.string().nullable().optional(),
|
||||
})).refine(rows=>new Set(rows.map(row=>row.id)).size===rows.length)
|
||||
const response=z.object({output:z.string().max(1024*1024)}).strict()
|
||||
export function readTerminalOutput(raw:unknown) {
|
||||
const data=response.safeParse(raw)
|
||||
if(!data.success)throw new Error("Некорректный ответ API: вывод команды не подтверждён.")
|
||||
if(/^(error:|bad command name |Usage:)/i.test(data.data.output))throw new Error(data.data.output)
|
||||
return data.data.output
|
||||
}
|
||||
export function readTerminalUrl(params:URLSearchParams) {
|
||||
const server=params.get("server"),host=params.get("host")
|
||||
const error=["server","host"].some(key=>params.getAll(key).length>1)?"В ссылке повторяется устройство терминала."
|
||||
:server!==null&&host!==null?"В ссылке одновременно указаны server и host."
|
||||
:server!==null&&!/^[a-zA-Z0-9_.:-]{1,64}$/.test(server)?"В ссылке указан некорректный сервер."
|
||||
:host!==null&&(!host.trim()||host.length>256||/[\u0000-\u001f]/.test(host))?"В ссылке указан некорректный host.":null
|
||||
return {server,host,error}
|
||||
}
|
||||
export function patchTerminalUrl(params:URLSearchParams,server:string|null){
|
||||
const next=new URLSearchParams(params);next.delete("server");next.delete("host");if(server)next.set("server",server)
|
||||
return "/terminal"+(next.size?"?"+next.toString():"")
|
||||
}
|
||||
Reference in new issue
Block a user