From d2fabc998dff5c4da58ee5bc5f657a05001f1c2b Mon Sep 17 00:00:00 2001 From: lear Date: Wed, 4 Mar 2026 12:45:57 +0300 Subject: [PATCH] refactor: reuse safeDockerLoginCommand from registry.ts instead of duplicating shEscape --- packages/server/src/services/registry.ts | 2 +- packages/server/src/services/rollbacks.ts | 16 ++++++---------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/packages/server/src/services/registry.ts b/packages/server/src/services/registry.ts index f9d3977b9..ad18e0b66 100644 --- a/packages/server/src/services/registry.ts +++ b/packages/server/src/services/registry.ts @@ -16,7 +16,7 @@ function shEscape(s: string | undefined): string { return `'${s.replace(/'/g, `'\\''`)}'`; } -function safeDockerLoginCommand( +export function safeDockerLoginCommand( registry: string | undefined, user: string | undefined, pass: string | undefined, diff --git a/packages/server/src/services/rollbacks.ts b/packages/server/src/services/rollbacks.ts index 301438fed..51d978572 100644 --- a/packages/server/src/services/rollbacks.ts +++ b/packages/server/src/services/rollbacks.ts @@ -23,7 +23,7 @@ import { findDeploymentById } from "./deployment"; import type { Mount } from "./mount"; import type { Port } from "./port"; import type { Project } from "./project"; -import type { Registry } from "./registry"; +import { type Registry, safeDockerLoginCommand } from "./registry"; export const createRollback = async ( input: z.infer, @@ -175,10 +175,11 @@ const dockerLoginForRegistry = async ( registry: Registry, serverId?: string | null, ) => { - const escapedRegistry = shEscape(registry.registryUrl); - const escapedUser = shEscape(registry.username); - const escapedPassword = shEscape(registry.password); - const loginCommand = `printf %s ${escapedPassword} | docker login ${escapedRegistry} -u ${escapedUser} --password-stdin`; + const loginCommand = safeDockerLoginCommand( + registry.registryUrl, + registry.username, + registry.password, + ); if (serverId) { await execAsyncRemote(serverId, loginCommand); @@ -187,11 +188,6 @@ const dockerLoginForRegistry = async ( } }; -function shEscape(s: string | undefined): string { - if (!s) return "''"; - return `'${s.replace(/'/g, `'\\''`)}'`; -} - const rollbackApplication = async ( appName: string, image: string,