From 7ce736359b883888ed6f15e237e491151c3375be Mon Sep 17 00:00:00 2001 From: Grzegorz Zdunek Date: Wed, 17 Jan 2024 11:23:57 +0100 Subject: [PATCH 1/2] Prevent crashing Teleport Connect after downgrading from v15 (#36730) * Backport changes from #36393 * Show UNKNOWN for app connections * Use `connection satisfies never` * Remove `connection satisfies never` check --- .../src/ui/Documents/DocumentsRenderer.tsx | 24 +++++++++++++++---- .../ConnectionItem.tsx | 21 +++++++++++----- .../trackedConnectionOperationsFactory.ts | 2 +- .../documentsService/documentsService.ts | 2 +- web/packages/teleterm/src/ui/uri.ts | 12 ++++++++++ 5 files changed, 49 insertions(+), 12 deletions(-) diff --git a/web/packages/teleterm/src/ui/Documents/DocumentsRenderer.tsx b/web/packages/teleterm/src/ui/Documents/DocumentsRenderer.tsx index ce1c7ba890cf1..32096fccbbce2 100644 --- a/web/packages/teleterm/src/ui/Documents/DocumentsRenderer.tsx +++ b/web/packages/teleterm/src/ui/Documents/DocumentsRenderer.tsx @@ -17,6 +17,7 @@ import React, { useMemo } from 'react'; import styled from 'styled-components'; +import { Text } from 'design'; /* eslint-disable @typescript-eslint/ban-ts-comment*/ // @ts-ignore import { DocumentAccessRequests } from 'e-teleterm/ui/DocumentAccessRequests/DocumentAccessRequests'; @@ -34,7 +35,7 @@ import DocumentGateway from 'teleterm/ui/DocumentGateway'; import { DocumentTerminal } from 'teleterm/ui/DocumentTerminal'; import Document from 'teleterm/ui/Document'; -import { RootClusterUri } from 'teleterm/ui/uri'; +import { RootClusterUri, isDatabaseUri } from 'teleterm/ui/uri'; import { WorkspaceContextProvider } from './workspaceContext'; import { KeyboardShortcutsPanel } from './KeyboardShortcutsPanel'; @@ -96,8 +97,21 @@ function MemoizedDocument(props: { doc: types.Document; visible: boolean }) { switch (doc.kind) { case 'doc.cluster': return ; - case 'doc.gateway': - return ; + case 'doc.gateway': { + if (isDatabaseUri(doc.targetUri)) { + return ; + } + return ( + + + Cannot create a gateway for the target "{doc.targetUri}". +
+ Only database and kube targets are supported. +
+
+ ); + } + case 'doc.gateway_cli_client': return ; case 'doc.terminal_shell': @@ -109,7 +123,9 @@ function MemoizedDocument(props: { doc: types.Document; visible: boolean }) { default: return ( - Document kind "{doc.kind}" is not supported + + Document kind "{doc.kind}" is not supported. + ); } diff --git a/web/packages/teleterm/src/ui/TopBar/Connections/ConnectionsFilterableList/ConnectionItem.tsx b/web/packages/teleterm/src/ui/TopBar/Connections/ConnectionsFilterableList/ConnectionItem.tsx index bc044820f6c5e..41f18a1357ddc 100644 --- a/web/packages/teleterm/src/ui/TopBar/Connections/ConnectionsFilterableList/ConnectionItem.tsx +++ b/web/packages/teleterm/src/ui/TopBar/Connections/ConnectionsFilterableList/ConnectionItem.tsx @@ -20,7 +20,7 @@ import { Trash, Unlink } from 'design/Icon'; import { ExtendedTrackedConnection } from 'teleterm/ui/services/connectionTracker'; import { ListItem } from 'teleterm/ui/components/ListItem'; -import { assertUnreachable } from 'teleterm/ui/utils'; +import { isDatabaseUri } from 'teleterm/ui/uri'; import { useKeyboardArrowsNavigation } from 'teleterm/ui/components/KeyboardArrowsNavigation'; @@ -105,7 +105,7 @@ export function ConnectionItem(props: ConnectionItemProps) { border-radius: 4px; `} > - {getKindName(props.item.kind)} + {getKindName(props.item)} Date: Wed, 17 Jan 2024 11:52:11 +0100 Subject: [PATCH 2/2] Remove "kube" from supported gateway targets --- web/packages/teleterm/src/ui/Documents/DocumentsRenderer.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/packages/teleterm/src/ui/Documents/DocumentsRenderer.tsx b/web/packages/teleterm/src/ui/Documents/DocumentsRenderer.tsx index 32096fccbbce2..a4468a3764769 100644 --- a/web/packages/teleterm/src/ui/Documents/DocumentsRenderer.tsx +++ b/web/packages/teleterm/src/ui/Documents/DocumentsRenderer.tsx @@ -106,7 +106,7 @@ function MemoizedDocument(props: { doc: types.Document; visible: boolean }) { Cannot create a gateway for the target "{doc.targetUri}".
- Only database and kube targets are supported. + Only database targets are supported.
);