Files
Netcatty/components/HostDetailsPanel.helpers.ts
陈奇 11da55abf7 fix: respect group telnet port defaults during protocol switch
When a host is in a group with telnetPort configured, switching
protocol should not override the port to 23 — let the group default
take effect. Also handles undefined port during switch (fallback to
protocol default when no group defaults exist).
2026-06-05 02:15:50 +00:00

81 lines
2.7 KiB
TypeScript

import type { GroupConfig } from "../domain/models";
import type { Host } from "../types";
import { LINUX_DISTRO_OPTIONS, NETWORK_DEVICE_OPTIONS } from "../domain/host";
export const parseOptionalPortInput = (value: string): number | undefined =>
value ? Number(value) : undefined;
export const resolvePrimaryProtocolSwitchPort = (
currentPort: number | undefined,
nextProtocol: "ssh" | "telnet",
hasGroupTelnetPortDefault: boolean,
hasGroupSshPortDefault: boolean,
): number | undefined => {
if (nextProtocol === "telnet") {
// Don't override if group provides a Telnet default
if (hasGroupTelnetPortDefault || hasGroupSshPortDefault) return currentPort;
if (currentPort === 22 || currentPort === undefined) return 23;
return currentPort;
}
if (nextProtocol === "ssh") {
if (hasGroupSshPortDefault) return currentPort;
if (currentPort === 23 || currentPort === undefined) return 22;
return currentPort;
}
return currentPort;
};
export const resolvePrimaryProtocolSavePort = (
protocol: Host["protocol"],
currentPort: number | undefined,
hasGroupSshPortDefault: boolean,
hasGroupTelnetPortDefault: boolean,
): number | undefined => {
if (protocol === "telnet") {
if (currentPort !== undefined) return currentPort;
if (hasGroupTelnetPortDefault || hasGroupSshPortDefault) return undefined;
return 23;
}
return currentPort ?? (hasGroupSshPortDefault ? undefined : 22);
};
export const resolveDetailsTelnetPort = (
host: Host,
groupDefaults?: Partial<GroupConfig>,
): number => {
if (host.telnetPort !== undefined && host.telnetPort !== null) return host.telnetPort;
if (groupDefaults?.telnetPort !== undefined && groupDefaults.telnetPort !== null) {
return groupDefaults.telnetPort;
}
if (host.protocol === "telnet") {
if (host.port !== undefined && host.port !== null) return host.port;
if (groupDefaults?.port !== undefined && groupDefaults.port !== null) return groupDefaults.port;
}
return 23;
};
export const resolveDetailsTelnetUsername = (
host: Host,
groupDefaults?: Partial<GroupConfig>,
): string =>
host.telnetUsername !== undefined
? host.telnetUsername
: groupDefaults?.telnetUsername !== undefined
? groupDefaults.telnetUsername
: host.username ?? groupDefaults?.username ?? "";
export const resolveDetailsTelnetPassword = (
host: Host,
groupDefaults?: Partial<GroupConfig>,
): string =>
host.telnetPassword !== undefined
? host.telnetPassword
: groupDefaults?.telnetPassword !== undefined
? groupDefaults.telnetPassword
: host.password ?? groupDefaults?.password ?? "";
export const LINUX_DISTRO_OPTION_IDS = [
...LINUX_DISTRO_OPTIONS,
...NETWORK_DEVICE_OPTIONS,
];