UNPKG

n8n-nodes-base

Version:

Base nodes of n8n

60 lines 3.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.renderFormCompletion = exports.binaryResponse = void 0; const n8n_workflow_1 = require("n8n-workflow"); const utils_1 = require("./utils"); const SANDBOX_CSP = 'sandbox allow-downloads allow-forms allow-modals allow-orientation-lock allow-pointer-lock allow-popups allow-presentation allow-scripts allow-top-navigation allow-top-navigation-by-user-activation allow-top-navigation-to-custom-protocols'; const getBinaryDataFromNode = (context, nodeName) => { return context.evaluateExpression(`{{ $('${nodeName}').first().binary }}`); }; const binaryResponse = async (context) => { const inputDataFieldName = context.getNodeParameter('inputDataFieldName', ''); const parentNodes = context.getParentNodes(context.getNode().name); const binaryNode = parentNodes .reverse() .find((node) => getBinaryDataFromNode(context, node?.name)?.hasOwnProperty(inputDataFieldName)); if (!binaryNode) { throw new n8n_workflow_1.OperationalError(`No binary data with field ${inputDataFieldName} found.`); } const binaryData = getBinaryDataFromNode(context, binaryNode?.name)[inputDataFieldName]; return { // If a binaryData has an id, the following field is set: // N8N_DEFAULT_BINARY_DATA_MODE=filesystem data: binaryData.id ? await context.helpers.binaryToBuffer(await context.helpers.getBinaryStream(binaryData.id)) : atob(binaryData.data), fileName: binaryData.fileName ?? 'file', type: binaryData.mimeType, }; }; exports.binaryResponse = binaryResponse; const renderFormCompletion = async (context, res, trigger) => { const completionTitle = context.getNodeParameter('completionTitle', ''); const completionMessage = (0, utils_1.handleNewlines)((0, utils_1.sanitizeHtml)(context.getNodeParameter('completionMessage', ''))); const redirectUrl = context.getNodeParameter('redirectUrl', ''); const options = context.getNodeParameter('options', {}); const responseText = context.getNodeParameter('responseText', '') ?? ''; const respondWith = context.getNodeParameter('respondWith', ''); const binary = respondWith === 'returnBinary' ? await (0, exports.binaryResponse)(context) : ''; let title = options.formTitle; if (!title) { title = context.evaluateExpression(`{{ $('${trigger?.name}').params.formTitle }}`); } const appendAttribution = context.evaluateExpression(`{{ $('${trigger?.name}').params.options?.appendAttribution === false ? false : true }}`); if (respondWith !== 'redirect') { res.setHeader('Content-Security-Policy', SANDBOX_CSP); } res.render('form-trigger-completion', { title: completionTitle, message: completionMessage, formTitle: title, appendAttribution, responseText, responseBinary: encodeURIComponent(JSON.stringify(binary)), dangerousCustomCss: (0, utils_1.sanitizeCustomCss)(options.customCss), redirectUrl: (0, utils_1.validateSafeRedirectUrl)(redirectUrl) ?? undefined, }); return { noWebhookResponse: true }; }; exports.renderFormCompletion = renderFormCompletion; //# sourceMappingURL=formCompletionUtils.js.map