fix: Remove foreign credentials when copying nodes or duplicating workflow (#4880)

* fix: Remove foreign credentials when copying nodes or duplicating workflow

* chore: fix linting issue
This commit is contained in:
Alex Grozav 2022-12-12 12:59:16 +02:00 committed by GitHub
parent 4765d767e3
commit 7d2e2ee0f7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 28 additions and 2 deletions

View file

@ -315,7 +315,7 @@ export interface IWorkflowDb {
sharedWith?: Array<Partial<IUser>>;
ownedBy?: Partial<IUser>;
versionId: string;
usedCredentials?: Array<Partial<ICredentialsResponse>>;
usedCredentials?: IUsedCredential[];
}
// Identical to cli.Interfaces.ts

View file

@ -125,8 +125,10 @@ export default mixins(showMessage, workflowHelpers, restApi).extend({
try {
let workflowToUpdate: IWorkflowDataUpdate | undefined;
if (currentWorkflowId !== PLACEHOLDER_EMPTY_WORKFLOW_ID) {
const { createdAt, updatedAt, ...workflow } = await this.restApi().getWorkflow(this.data.id);
const { createdAt, updatedAt, usedCredentials, ...workflow } = await this.restApi().getWorkflow(this.data.id);
workflowToUpdate = workflow;
this.removeForeignCredentialsFromWorkflow(workflowToUpdate, this.credentialsStore.allCredentials);
}
const saved = await this.saveAsNewWorkflow({

View file

@ -67,6 +67,7 @@ import { useTemplatesStore } from '@/stores/templates';
import { useNodeTypesStore } from '@/stores/nodeTypes';
import useWorkflowsEEStore from "@/stores/workflows.ee";
import {useUsersStore} from "@/stores/users";
import {ICredentialMap, ICredentialsResponse, IUsedCredential} from "@/Interface";
let cachedWorkflowKey: string | null = '';
let cachedWorkflow: Workflow | null = null;
@ -928,5 +929,23 @@ export const workflowHelpers = mixins(
return true;
},
removeForeignCredentialsFromWorkflow(workflow: IWorkflowData | IWorkflowDataUpdate, usableCredentials: ICredentialsResponse[]): void {
workflow.nodes.forEach((node: INode) => {
if (!node.credentials) {
return;
}
node.credentials = Object.entries(node.credentials)
.reduce<INodeCredentials>((acc, [credentialType, credential]) => {
const isUsableCredential = usableCredentials.some((ownCredential) => `${ownCredential.id}` === `${credential.id}`);
if (credential.id && isUsableCredential) {
acc[credentialType] = node.credentials![credentialType];
}
return acc;
}, {});
});
},
},
});

View file

@ -69,6 +69,7 @@ const createEmptyWorkflow = (): IWorkflowDb => ({
tags: [],
pinData: {},
versionId: '',
usedCredentials: [],
});
export const useWorkflowsStore = defineStore(STORES.WORKFLOWS, {
@ -269,6 +270,7 @@ export const useWorkflowsStore = defineStore(STORES.WORKFLOWS, {
},
setUsedCredentials(data: IUsedCredential[]) {
this.workflow.usedCredentials = data;
this.usedCredentials = data.reduce<{ [name: string]: IUsedCredential }>((accu, credential) => {
accu[credential.id!] = credential;
return accu;

View file

@ -1230,7 +1230,10 @@ export default mixins(
...data,
};
this.removeForeignCredentialsFromWorkflow(workflowToCopy, this.credentialsStore.allCredentials);
const nodeData = JSON.stringify(workflowToCopy, null, 2);
this.copyToClipboard(nodeData);
if (data.nodes.length > 0) {
if (!isCut) {