v1.10.0 #471

Merged
LukeGus merged 106 commits from dev-1.10.0 into main 2026-01-01 04:20:12 +00:00
4 changed files with 32 additions and 36 deletions
Showing only changes of commit 48933e9b11 - Show all commits

View File

@@ -201,12 +201,14 @@ async function initializeCompleteDatabase(): Promise<void> {
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");

View File

@@ -23,7 +23,6 @@ export interface DockerConfig {
tlsCaCert?: string;
tlsCert?: string;
tlsKey?: string;
apiVersion?: string;
}
export interface SSHHost {

View File

@@ -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({
</AccordionItem>
</Accordion>
)}
<FormField
control={form.control}
name="dockerConfig.apiVersion"
render={({ field }) => (
<FormItem>
<FormLabel>API Version (Optional)</FormLabel>
<FormControl>
<Input
placeholder="1.41 (leave empty for auto)"
{...field}
/>
</FormControl>
<FormDescription>
Specify Docker API version, or leave empty to use
the default
</FormDescription>
</FormItem>
)}
/>
</>
)}
</TabsContent>

View File

@@ -461,7 +461,7 @@ export function ServerStats({
{(metricsEnabled && showStatsUI) ||
(currentHostConfig?.quickActions &&
currentHostConfig.quickActions.length > 0) ? (
<div className="rounded-lg border-2 border-dark-border m-3 p-4 overflow-y-auto relative flex-1 flex flex-col">
<div className="rounded-lg border-dark-border m-3 p-1 overflow-y-auto relative flex-1 flex flex-col">
{currentHostConfig?.quickActions &&
currentHostConfig.quickActions.length > 0 && (
<div className={metricsEnabled && showStatsUI ? "mb-4" : ""}>