feat: External Secrets storage for credentials (#6477)

Github issue / Community forum post (link here to close automatically):

---------

Co-authored-by: Romain Minaud <romain.minaud@gmail.com>
Co-authored-by: Valya Bullions <valya@n8n.io>
Co-authored-by: Csaba Tuncsik <csaba@n8n.io>
Co-authored-by: Giulio Andreini <g.andreini@gmail.com>
Co-authored-by: Omar Ajoue <krynble@gmail.com>
This commit is contained in:
Alex Grozav
2023-08-25 11:33:46 +03:00
committed by GitHub
parent c833078c87
commit ed927d34b2
89 changed files with 4164 additions and 57 deletions

View File

@@ -2,6 +2,7 @@ import { defineComponent } from 'vue';
import type { PropType } from 'vue';
import { mapStores } from 'pinia';
import type { IDataObject } from 'n8n-workflow';
import { Expression, ExpressionExtensions } from 'n8n-workflow';
import { ensureSyntaxTree } from '@codemirror/language';
@@ -19,6 +20,10 @@ export const expressionManager = defineComponent({
targetItem: {
type: Object as PropType<TargetItem | null>,
},
additionalData: {
type: Object as PropType<IDataObject>,
default: () => ({}),
},
},
data() {
return {
@@ -194,7 +199,7 @@ export const expressionManager = defineComponent({
const ndvStore = useNDVStore();
if (!ndvStore.activeNode) {
// e.g. credential modal
result.resolved = Expression.resolveWithoutWorkflow(resolvable);
result.resolved = Expression.resolveWithoutWorkflow(resolvable, this.additionalData);
} else {
let opts;
if (ndvStore.isInputParentOfActiveNode) {
@@ -203,6 +208,7 @@ export const expressionManager = defineComponent({
inputNodeName: this.ndvStore.ndvInputNodeName,
inputRunIndex: this.ndvStore.ndvInputRunIndex,
inputBranchIndex: this.ndvStore.ndvInputBranchIndex,
additionalKeys: this.additionalData,
};
}
result.resolved = this.resolveExpression('=' + resolvable, undefined, opts);

View File

@@ -71,6 +71,7 @@ export function resolveParameter(
inputNodeName?: string;
inputRunIndex?: number;
inputBranchIndex?: number;
additionalKeys?: IWorkflowDataProxyAdditionalKeys;
} = {},
): IDataObject | null {
let itemIndex = opts?.targetItem?.itemIndex || 0;
@@ -146,6 +147,8 @@ export function resolveParameter(
// deprecated
$executionId: PLACEHOLDER_FILLED_AT_EXECUTION_TIME,
$resumeWebhookUrl: PLACEHOLDER_FILLED_AT_EXECUTION_TIME,
...opts.additionalKeys,
};
let runIndexCurrent = opts?.targetItem?.runIndex ?? 0;
@@ -646,6 +649,7 @@ export const workflowHelpers = defineComponent({
inputRunIndex?: number;
inputBranchIndex?: number;
c?: number;
additionalKeys?: IWorkflowDataProxyAdditionalKeys;
} = {},
) {
const parameters = {