From b6ef41a57bbd4d7363c97e142f82980a1ce781f4 Mon Sep 17 00:00:00 2001 From: Ben Hesseldieck <1849459+BHesseldieck@users.noreply.github.com> Date: Sat, 3 Sep 2022 10:45:41 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20adjust=20credentials=20tes?= =?UTF-8?q?t=20route=20to=20also=20allow=20testing=20for=20sharees=20(#399?= =?UTF-8?q?9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ⚡️ pull data if user is sharee * fix: Removed sharedWith and ownedBy from credentialData on testing credentials. Co-authored-by: Alex Grozav --- .../credentials/credentials.controller.ee.ts | 38 ++++++++++++++++++- .../CredentialEdit/CredentialEdit.vue | 3 +- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/packages/cli/src/credentials/credentials.controller.ee.ts b/packages/cli/src/credentials/credentials.controller.ee.ts index 131d3dbde11d1..ba39a32764204 100644 --- a/packages/cli/src/credentials/credentials.controller.ee.ts +++ b/packages/cli/src/credentials/credentials.controller.ee.ts @@ -1,6 +1,6 @@ /* eslint-disable import/no-cycle */ import express from 'express'; -import { LoggerProxy } from 'n8n-workflow'; +import { INodeCredentialTestResult, LoggerProxy } from 'n8n-workflow'; import { Db, ResponseHelper } from '..'; import type { CredentialsEntity } from '../databases/entities/CredentialsEntity'; @@ -99,7 +99,41 @@ EECredentialsController.get( ); /** - * (EE) POST /credentials/:id/share + * POST /credentials/test + * + * Test if a credential is valid. + */ +EECredentialsController.post( + '/test', + ResponseHelper.send(async (req: CredentialRequest.Test): Promise => { + const { credentials, nodeToTestWith } = req.body; + + const encryptionKey = await EECredentials.getEncryptionKey(); + + if ( + !credentials.data || + // @ts-ignore + !Object.keys(credentials.data).every((key) => !!credentials.data[key]) + ) { + const sharing = await EECredentials.getSharing(req.user, credentials.id); + if (!sharing) { + throw new ResponseHelper.ResponseError( + `Credential with ID "${credentials.id}" could not be found.`, + undefined, + 404, + ); + } + + const decryptedData = await EECredentials.decrypt(encryptionKey, sharing.credentials); + Object.assign(credentials, { data: decryptedData }); + } + + return EECredentials.test(req.user, encryptionKey, credentials, nodeToTestWith); + }), +); + +/** + * (EE) PUT /credentials/:id/share * * Grant or remove users' access to a credential. */ diff --git a/packages/editor-ui/src/components/CredentialEdit/CredentialEdit.vue b/packages/editor-ui/src/components/CredentialEdit/CredentialEdit.vue index 03e3d5febe227..a6a97ad094449 100644 --- a/packages/editor-ui/src/components/CredentialEdit/CredentialEdit.vue +++ b/packages/editor-ui/src/components/CredentialEdit/CredentialEdit.vue @@ -657,11 +657,12 @@ export default mixins(showMessage, nodeHelpers).extend({ (access) => !!access, ) as ICredentialNodeAccess[]; + const { ownedBy, sharedWith, ...credentialData } = this.credentialData; const details: ICredentialsDecrypted = { id: this.credentialId, name: this.credentialName, type: this.credentialTypeName!, - data: this.credentialData, + data: credentialData, nodesAccess, };