Update terminal panel

This commit is contained in:
MacRimi
2026-03-15 16:27:37 +01:00
parent 65add36b2f
commit 0d6d570ae8
4 changed files with 56 additions and 48 deletions
+17 -3
View File
@@ -32,7 +32,7 @@ import { DialogHeader, DialogDescription } from "@/components/ui/dialog"
import { Input } from "@/components/ui/input"
import { Dialog as SearchDialog, DialogContent as SearchDialogContent, DialogTitle as SearchDialogTitle } from "@/components/ui/dialog"
import "@xterm/xterm/css/xterm.css"
import { fetchApi, getWebSocketUrl } from "@/lib/api-config"
import { API_PORT, fetchApi } from "@/lib/api-config"
interface LxcTerminalModalProps {
open: boolean
@@ -75,7 +75,21 @@ const proxmoxCommands = [
{ cmd: "clear", desc: "Clear terminal screen" },
]
// Use centralized getWebSocketUrl from api-config
function getWebSocketUrl(): string {
if (typeof window === "undefined") {
return "ws://localhost:8008/ws/terminal"
}
const { protocol, hostname, port } = window.location
const isStandardPort = port === "" || port === "80" || port === "443"
const wsProtocol = protocol === "https:" ? "wss:" : "ws:"
if (isStandardPort) {
return `${wsProtocol}//${hostname}/ws/terminal`
} else {
return `${wsProtocol}//${hostname}:${API_PORT}/ws/terminal`
}
}
export function LxcTerminalModal({
open: isOpen,
@@ -208,7 +222,7 @@ export function LxcTerminalModal({
fitAddonRef.current = fitAddon
// Connect WebSocket to host terminal
const wsUrl = getWebSocketUrl("/ws/terminal")
const wsUrl = getWebSocketUrl()
const ws = new WebSocket(wsUrl)
wsRef.current = ws
+17 -6
View File
@@ -26,7 +26,7 @@ import {
DropdownMenuLabel,
} from "@/components/ui/dropdown-menu"
import "@xterm/xterm/css/xterm.css"
import { getWebSocketUrl } from "@/lib/api-config"
import { API_PORT } from "@/lib/api-config"
interface WebInteraction {
type: "yesno" | "menu" | "msgbox" | "input" | "inputbox"
@@ -96,7 +96,7 @@ export function ScriptTerminalModal({
wsRef.current.close()
}
const wsUrl = getScriptWebSocketUrlLocal(sessionIdRef.current)
const wsUrl = getScriptWebSocketUrl(sessionIdRef.current)
const ws = new WebSocket(wsUrl)
wsRef.current = ws
@@ -259,7 +259,7 @@ export function ScriptTerminalModal({
}
}, 100)
const wsUrl = getScriptWebSocketUrlLocal(sessionIdRef.current)
const wsUrl = getScriptWebSocketUrl(sessionIdRef.current)
const ws = new WebSocket(wsUrl)
wsRef.current = ws
@@ -493,9 +493,20 @@ export function ScriptTerminalModal({
}
}, [isOpen, isComplete, attemptReconnect])
// Use centralized getWebSocketUrl from api-config
const getScriptWebSocketUrlLocal = (sid: string): string => {
return getWebSocketUrl(`/ws/script/${sid}`)
const getScriptWebSocketUrl = (sid: string): string => {
if (typeof window === "undefined") {
return `ws://localhost:${API_PORT}/ws/script/${sid}`
}
const { protocol, hostname, port } = window.location
const isStandardPort = port === "" || port === "80" || port === "443"
const wsProtocol = protocol === "https:" ? "wss:" : "ws:"
if (isStandardPort) {
return `${wsProtocol}//${hostname}/ws/script/${sid}`
} else {
return `${wsProtocol}//${hostname}:${API_PORT}/ws/script/${sid}`
}
}
const handleInteractionResponse = (value: string) => {
+22 -4
View File
@@ -2,7 +2,7 @@
import type React from "react"
import { useEffect, useRef, useState } from "react"
import { API_PORT, fetchApi, getWebSocketUrl as getWebSocketUrlFromConfig, getApiUrl as getApiUrlFromConfig } from "@/lib/api-config"
import { API_PORT, fetchApi } from "@/lib/api-config" // Unificando importaciones de api-config en una sola línea con alias @/
import {
Activity,
Trash2,
@@ -46,13 +46,31 @@ interface TerminalInstance {
pingInterval?: ReturnType<typeof setInterval> | null // Heartbeat interval to keep connection alive
}
// Use centralized functions from api-config.ts for SSL/proxy support
function getWebSocketUrl(): string {
return getWebSocketUrlFromConfig("/ws/terminal")
if (typeof window === "undefined") {
return "ws://localhost:8008/ws/terminal"
}
const { protocol, hostname, port } = window.location
const isStandardPort = port === "" || port === "80" || port === "443"
const wsProtocol = protocol === "https:" ? "wss:" : "ws:"
if (isStandardPort) {
return `${wsProtocol}//${hostname}/ws/terminal`
} else {
return `${wsProtocol}//${hostname}:${API_PORT}/ws/terminal`
}
}
function getApiUrl(endpoint?: string): string {
return getApiUrlFromConfig(endpoint || "")
if (typeof window === "undefined") {
return "http://localhost:8008"
}
const { protocol, hostname } = window.location
const apiProtocol = protocol === "https:" ? "https:" : "http:"
return `${apiProtocol}//${hostname}:${API_PORT}${endpoint || ""}`
}
const proxmoxCommands = [