From e925801b631d75cf6d1e75e855af6712678b5916 Mon Sep 17 00:00:00 2001 From: Henry Heng Date: Wed, 29 Oct 2025 10:06:23 +0000 Subject: [PATCH] Bugfix/shared credentials not showing on ui (#5383) * fix shared credentials not showing on ui * Enhance credential retrieval by including createdDate, updatedDate, and workspaceId fields; sanitize shared item data by omitting encryptedData. --- .../enterprise/services/workspace.service.ts | 2 +- .../server/src/services/credentials/index.ts | 8 ++-- .../dialog/ShareWithWorkspaceDialog.jsx | 45 +++++++------------ 3 files changed, 20 insertions(+), 35 deletions(-) diff --git a/packages/server/src/enterprise/services/workspace.service.ts b/packages/server/src/enterprise/services/workspace.service.ts index a5c4aa58..fb8ec468 100644 --- a/packages/server/src/enterprise/services/workspace.service.ts +++ b/packages/server/src/enterprise/services/workspace.service.ts @@ -264,7 +264,7 @@ export class WorkspaceService { const itemIds = sharedItems.map((item) => item.sharedItemId) if (itemType === 'credential') { return await this.dataSource.getRepository(Credential).find({ - select: ['id', 'name', 'credentialName'], + select: ['id', 'name', 'credentialName', 'createdDate', 'updatedDate', 'workspaceId'], where: { id: In(itemIds) } }) } else if (itemType === 'custom_template') { diff --git a/packages/server/src/services/credentials/index.ts b/packages/server/src/services/credentials/index.ts index 89219cab..4a511b79 100644 --- a/packages/server/src/services/credentials/index.ts +++ b/packages/server/src/services/credentials/index.ts @@ -50,7 +50,7 @@ const deleteCredentials = async (credentialId: string): Promise => { const getAllCredentials = async (paramCredentialName: any, workspaceId?: string) => { try { const appServer = getRunningExpressApp() - let dbResponse = [] + let dbResponse: any[] = [] if (paramCredentialName) { if (Array.isArray(paramCredentialName)) { for (let i = 0; i < paramCredentialName.length; i += 1) { @@ -83,14 +83,14 @@ const getAllCredentials = async (paramCredentialName: any, workspaceId?: string) if (sharedItem.credentialName === name) { // @ts-ignore sharedItem.shared = true - dbResponse.push(sharedItem) + dbResponse.push(omit(sharedItem, ['encryptedData'])) } } } else { if (sharedItem.credentialName === paramCredentialName) { // @ts-ignore sharedItem.shared = true - dbResponse.push(sharedItem) + dbResponse.push(omit(sharedItem, ['encryptedData'])) } } } @@ -110,7 +110,7 @@ const getAllCredentials = async (paramCredentialName: any, workspaceId?: string) for (const sharedItem of sharedItems) { // @ts-ignore sharedItem.shared = true - dbResponse.push(sharedItem) + dbResponse.push(omit(sharedItem, ['encryptedData'])) } } } diff --git a/packages/ui/src/ui-component/dialog/ShareWithWorkspaceDialog.jsx b/packages/ui/src/ui-component/dialog/ShareWithWorkspaceDialog.jsx index f3b3a655..f9ba47e7 100644 --- a/packages/ui/src/ui-component/dialog/ShareWithWorkspaceDialog.jsx +++ b/packages/ui/src/ui-component/dialog/ShareWithWorkspaceDialog.jsx @@ -70,44 +70,29 @@ const ShareWithWorkspaceDialog = ({ show, dialogProps, onCancel, setError }) => ) useEffect(() => { - if (getSharedWorkspacesForItemApi.data) { - const data = getSharedWorkspacesForItemApi.data - if (data && data.length > 0) { - outputSchema.map((row) => { - data.map((ws) => { - if (row.id === ws.workspaceId) { - row.shared = true - } + if (getWorkspacesByOrganizationIdUserIdApi.data && getSharedWorkspacesForItemApi.data) { + const workspaces = [] + const sharedWorkspaces = getSharedWorkspacesForItemApi.data || [] + + getWorkspacesByOrganizationIdUserIdApi.data + .filter((ws) => ws.workspace.id !== user.activeWorkspaceId) + .map((ws) => { + const isShared = sharedWorkspaces.some((sw) => sw.workspaceId === ws.workspace.id) + workspaces.push({ + id: ws.workspace.id, + workspaceName: ws.workspace.name, + shared: isShared }) }) - setOutputSchema([...outputSchema]) - } + setOutputSchema(workspaces) } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [getSharedWorkspacesForItemApi.data]) + }, [getWorkspacesByOrganizationIdUserIdApi.data, getSharedWorkspacesForItemApi.data, user.activeWorkspaceId]) useEffect(() => { if (getSharedWorkspacesForItemApi.error && setError) { setError(getSharedWorkspacesForItemApi.error) } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [getSharedWorkspacesForItemApi.error]) - - useEffect(() => { - if (getWorkspacesByOrganizationIdUserIdApi.data) { - const workspaces = [] - getWorkspacesByOrganizationIdUserIdApi.data - .filter((ws) => ws.workspace.id !== user.activeWorkspaceId) - .map((ws) => { - workspaces.push({ - id: ws.workspace.id, - workspaceName: ws.workspace.name, - shared: false - }) - }) - setOutputSchema([...workspaces]) - } - }, [getWorkspacesByOrganizationIdUserIdApi.data, user.activeWorkspaceId]) + }, [getSharedWorkspacesForItemApi.error, setError]) useEffect(() => { if (getWorkspacesByOrganizationIdUserIdApi.error && setError) {