Display an error when unsaved workflow gets executed with webhook

This commit is contained in:
Jan Oberhauser 2020-05-03 17:55:14 +02:00
parent a253192b0c
commit 42f6f4af2c
3 changed files with 12 additions and 15 deletions

View file

@ -512,11 +512,8 @@ class App {
const sessionId = GenericHelpers.getSessionId(req); const sessionId = GenericHelpers.getSessionId(req);
// Check if workflow is saved as webhooks can only be tested with saved workflows. // If webhooks nodes exist and are active we have to wait for till we receive a call
// If that is the case check if any webhooks calls are present we have to wait for and if (runData === undefined || startNodes === undefined || startNodes.length === 0 || destinationNode === undefined) {
// if that is the case wait till we receive it.
if (WorkflowHelpers.isWorkflowIdValid(workflowData.id) === true && (runData === undefined || startNodes === undefined || startNodes.length === 0 || destinationNode === undefined)) {
// Webhooks can only be tested with saved workflows
const credentials = await WorkflowCredentials(workflowData.nodes); const credentials = await WorkflowCredentials(workflowData.nodes);
const additionalData = await WorkflowExecuteAdditionalData.getBase(credentials); const additionalData = await WorkflowExecuteAdditionalData.getBase(credentials);
const nodeTypes = NodeTypes(); const nodeTypes = NodeTypes();

View file

@ -129,6 +129,10 @@ export class TestWebhooks {
return false; return false;
} }
if (workflow.id === undefined) {
throw new Error('Webhooks can only be added for saved workflows as an id is needed!');
}
// Remove test-webhooks automatically if they do not get called (after 120 seconds) // Remove test-webhooks automatically if they do not get called (after 120 seconds)
const timeout = setTimeout(() => { const timeout = setTimeout(() => {
this.cancelTestWebhook(workflowData.id.toString()); this.cancelTestWebhook(workflowData.id.toString());

View file

@ -728,12 +728,6 @@ export function getNodeWebhooks(workflow: Workflow, node: INode, additionalData:
return []; return [];
} }
if (workflow.id === undefined) {
// Workflow has no id which means it is not saved and so webhooks
// will not be enabled
return [];
}
const nodeType = workflow.nodeTypes.getByName(node.type) as INodeType; const nodeType = workflow.nodeTypes.getByName(node.type) as INodeType;
if (nodeType.description.webhooks === undefined) { if (nodeType.description.webhooks === undefined) {
@ -741,12 +735,14 @@ export function getNodeWebhooks(workflow: Workflow, node: INode, additionalData:
return []; return [];
} }
const workflowId = workflow.id || '__UNSAVED__';
const returnData: IWebhookData[] = []; const returnData: IWebhookData[] = [];
for (const webhookDescription of nodeType.description.webhooks) { for (const webhookDescription of nodeType.description.webhooks) {
let nodeWebhookPath = workflow.getSimpleParameterValue(node, webhookDescription['path'], 'GET'); let nodeWebhookPath = workflow.getSimpleParameterValue(node, webhookDescription['path'], 'GET');
if (nodeWebhookPath === undefined) { if (nodeWebhookPath === undefined) {
// TODO: Use a proper logger // TODO: Use a proper logger
console.error(`No webhook path could be found for node "${node.name}" in workflow "${workflow.id}".`); console.error(`No webhook path could be found for node "${node.name}" in workflow "${workflowId}".`);
continue; continue;
} }
@ -756,13 +752,13 @@ export function getNodeWebhooks(workflow: Workflow, node: INode, additionalData:
nodeWebhookPath = nodeWebhookPath.slice(1); nodeWebhookPath = nodeWebhookPath.slice(1);
} }
const path = getNodeWebhookPath(workflow.id, node, nodeWebhookPath); const path = getNodeWebhookPath(workflowId, node, nodeWebhookPath);
const httpMethod = workflow.getSimpleParameterValue(node, webhookDescription['httpMethod'], 'GET'); const httpMethod = workflow.getSimpleParameterValue(node, webhookDescription['httpMethod'], 'GET');
if (httpMethod === undefined) { if (httpMethod === undefined) {
// TODO: Use a proper logger // TODO: Use a proper logger
console.error(`The webhook "${path}" for node "${node.name}" in workflow "${workflow.id}" could not be added because the httpMethod is not defined.`); console.error(`The webhook "${path}" for node "${node.name}" in workflow "${workflowId}" could not be added because the httpMethod is not defined.`);
continue; continue;
} }
@ -771,7 +767,7 @@ export function getNodeWebhooks(workflow: Workflow, node: INode, additionalData:
node: node.name, node: node.name,
path, path,
webhookDescription, webhookDescription,
workflowId: workflow.id, workflowId,
workflowExecuteAdditionalData: additionalData, workflowExecuteAdditionalData: additionalData,
}); });
} }