Docker images / prepare-release (push) Successful in 7s
Docker images / backend-image (push) Successful in 1m37s
Docker images / frontend-image (push) Successful in 2m44s
Docker images / notify-webhook (push) Skipped
Docker images / updater-image (push) Successful in 40s
Docker images / publish-release (push) Successful in 10s
Added support for managing peer information in interface bindings, including new fields for peerPublicKey and peerName in the BoundIfaceTraffic interface. Updated the database schema to include these fields in user_interface_bindings and traffic_samples tables. Enhanced the UI components to display peer details alongside interface names, improving user experience and clarity in the traffic management system. Updated relevant functions and services to handle peer-specific logic, ensuring robust integration across the application.
45 lines
1.1 KiB
TypeScript
45 lines
1.1 KiB
TypeScript
import type { InterfaceType } from "./iface-type.js"
|
|
|
|
export class PeerBindError extends Error {
|
|
constructor(
|
|
message: string,
|
|
public readonly status: number,
|
|
) {
|
|
super(message)
|
|
this.name = "PeerBindError"
|
|
}
|
|
}
|
|
|
|
export function truncPeerKey(key: string): string {
|
|
const k = key.trim()
|
|
if (k.length <= 20) return k
|
|
return `${k.slice(0, 8)}…${k.slice(-8)}`
|
|
}
|
|
|
|
export function peerDisplayName(opts: {
|
|
publicKey: string
|
|
name?: string | null
|
|
comment?: string | null
|
|
}): string {
|
|
const name = (opts.name ?? "").trim()
|
|
if (name) return name
|
|
const comment = (opts.comment ?? "").trim()
|
|
if (comment) return comment
|
|
return truncPeerKey(opts.publicKey)
|
|
}
|
|
|
|
/** Ether/GRE — пустой ключ. WG — обязательный public-key. */
|
|
export function normalizeBindingPeer(
|
|
type: InterfaceType,
|
|
peerPublicKey: string | undefined,
|
|
): string {
|
|
const key = (peerPublicKey ?? "").trim()
|
|
if (type === "wg") {
|
|
if (!key) {
|
|
throw new PeerBindError("Для WireGuard укажите пир (public-key)", 400)
|
|
}
|
|
return key
|
|
}
|
|
return ""
|
|
}
|