diff --git a/src/backend/database/db/index.ts b/src/backend/database/db/index.ts index f9e1017f..ee65b059 100644 --- a/src/backend/database/db/index.ts +++ b/src/backend/database/db/index.ts @@ -201,12 +201,14 @@ async function initializeCompleteDatabase(): Promise { enable_tunnel INTEGER NOT NULL DEFAULT 1, tunnel_connections TEXT, enable_file_manager INTEGER NOT NULL DEFAULT 1, + enable_docker INTEGER NOT NULL DEFAULT 0, default_path TEXT, autostart_password TEXT, autostart_key TEXT, autostart_key_password TEXT, force_keyboard_interactive TEXT, stats_config TEXT, + docker_config TEXT, terminal_config TEXT, created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, @@ -486,6 +488,12 @@ const migrateSchema = () => { addColumnIfNotExists("ssh_data", "stats_config", "TEXT"); addColumnIfNotExists("ssh_data", "terminal_config", "TEXT"); addColumnIfNotExists("ssh_data", "quick_actions", "TEXT"); + addColumnIfNotExists( + "ssh_data", + "enable_docker", + "INTEGER NOT NULL DEFAULT 0", + ); + addColumnIfNotExists("ssh_data", "docker_config", "TEXT"); addColumnIfNotExists("ssh_credentials", "private_key", "TEXT"); addColumnIfNotExists("ssh_credentials", "public_key", "TEXT"); diff --git a/src/types/index.ts b/src/types/index.ts index 1970996a..293d2f96 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -23,7 +23,6 @@ export interface DockerConfig { tlsCaCert?: string; tlsCert?: string; tlsKey?: string; - apiVersion?: string; } export interface SSHHost { diff --git a/src/ui/desktop/apps/host-manager/HostManagerEditor.tsx b/src/ui/desktop/apps/host-manager/HostManagerEditor.tsx index 7332323d..e0041c1a 100644 --- a/src/ui/desktop/apps/host-manager/HostManagerEditor.tsx +++ b/src/ui/desktop/apps/host-manager/HostManagerEditor.tsx @@ -577,7 +577,6 @@ export function HostManagerEditor({ tlsCaCert: z.string().optional(), tlsCert: z.string().optional(), tlsKey: z.string().optional(), - apiVersion: z.string().optional(), }) .optional(), }) @@ -682,7 +681,6 @@ export function HostManagerEditor({ tlsCaCert: "", tlsCert: "", tlsKey: "", - apiVersion: "", }, }, }); @@ -738,6 +736,28 @@ export function HostManagerEditor({ parsedStatsConfig = { ...DEFAULT_STATS_CONFIG, ...parsedStatsConfig }; + let parsedDockerConfig = { + connectionType: "socket" as const, + socketPath: "/var/run/docker.sock", + host: "", + port: 2375, + tlsVerify: true, + tlsCaCert: "", + tlsCert: "", + tlsKey: "", + }; + try { + if (cleanedHost.dockerConfig) { + const parsed = + typeof cleanedHost.dockerConfig === "string" + ? JSON.parse(cleanedHost.dockerConfig) + : cleanedHost.dockerConfig; + parsedDockerConfig = { ...parsedDockerConfig, ...parsed }; + } + } catch (error) { + console.error("Failed to parse dockerConfig:", error); + } + const formData = { name: cleanedHost.name || "", ip: cleanedHost.ip || "", @@ -780,17 +800,7 @@ export function HostManagerEditor({ }, forceKeyboardInteractive: Boolean(cleanedHost.forceKeyboardInteractive), enableDocker: Boolean(cleanedHost.enableDocker), - dockerConfig: cleanedHost.dockerConfig || { - connectionType: "socket" as const, - socketPath: "/var/run/docker.sock", - host: "", - port: 2375, - tlsVerify: true, - tlsCaCert: "", - tlsCert: "", - tlsKey: "", - apiVersion: "", - }, + dockerConfig: parsedDockerConfig, }; if (defaultAuthType === "password") { @@ -852,7 +862,6 @@ export function HostManagerEditor({ tlsCaCert: "", tlsCert: "", tlsKey: "", - apiVersion: "", }, }; @@ -2877,26 +2886,6 @@ export function HostManagerEditor({ )} - - ( - - API Version (Optional) - - - - - Specify Docker API version, or leave empty to use - the default - - - )} - /> )} diff --git a/src/ui/desktop/apps/server-stats/ServerStats.tsx b/src/ui/desktop/apps/server-stats/ServerStats.tsx index af112c3c..20125083 100644 --- a/src/ui/desktop/apps/server-stats/ServerStats.tsx +++ b/src/ui/desktop/apps/server-stats/ServerStats.tsx @@ -461,7 +461,7 @@ export function ServerStats({ {(metricsEnabled && showStatsUI) || (currentHostConfig?.quickActions && currentHostConfig.quickActions.length > 0) ? ( -
+
{currentHostConfig?.quickActions && currentHostConfig.quickActions.length > 0 && (