From e9f882220ec409332002df00e905bfa8cccc0e30 Mon Sep 17 00:00:00 2001 From: Cian Johnston Date: Tue, 4 Mar 2025 13:22:03 +0000 Subject: [PATCH] feat(site): allow opening web terminal to container (#16797) Co-authored-by: BrunoQuaresma --- site/src/pages/TerminalPage/TerminalPage.tsx | 6 ++++++ site/src/utils/terminal.ts | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/site/src/pages/TerminalPage/TerminalPage.tsx b/site/src/pages/TerminalPage/TerminalPage.tsx index 4a93fadc68..c86a3f9ed5 100644 --- a/site/src/pages/TerminalPage/TerminalPage.tsx +++ b/site/src/pages/TerminalPage/TerminalPage.tsx @@ -55,6 +55,8 @@ const TerminalPage: FC = () => { // a round-trip, and must be a UUIDv4. const reconnectionToken = searchParams.get("reconnect") ?? uuidv4(); const command = searchParams.get("command") || undefined; + const containerName = searchParams.get("container") || undefined; + const containerUser = searchParams.get("container_user") || undefined; // The workspace name is in the format: // [.] const workspaceNameParts = params.workspace?.split("."); @@ -234,6 +236,8 @@ const TerminalPage: FC = () => { command, terminal.rows, terminal.cols, + containerName, + containerUser, ) .then((url) => { if (disposed) { @@ -302,6 +306,8 @@ const TerminalPage: FC = () => { workspace.error, workspace.isLoading, workspaceAgent, + containerName, + containerUser, ]); return ( diff --git a/site/src/utils/terminal.ts b/site/src/utils/terminal.ts index 70d90914ff..ba3a08bb2d 100644 --- a/site/src/utils/terminal.ts +++ b/site/src/utils/terminal.ts @@ -7,6 +7,8 @@ export const terminalWebsocketUrl = async ( command: string | undefined, height: number, width: number, + containerName: string | undefined, + containerUser: string | undefined, ): Promise => { const query = new URLSearchParams({ reconnect }); if (command) { @@ -14,6 +16,12 @@ export const terminalWebsocketUrl = async ( } query.set("height", height.toString()); query.set("width", width.toString()); + if (containerName) { + query.set("container", containerName); + } + if (containerName && containerUser) { + query.set("container_user", containerUser); + } const url = new URL(baseUrl || `${location.protocol}//${location.host}`); url.protocol = url.protocol === "https:" ? "wss:" : "ws:";