Merge branch 'master' into dev

This commit is contained in:
Nick O'Leary
2021-05-04 11:19:05 +01:00
53 changed files with 581 additions and 205 deletions

View File

@@ -95,6 +95,9 @@ function createNode(flow,config) {
} else if (nodeTypeConstructor) {
// console.log(nodeTypeConstructor)
var subflowConfig = parseConfig([nodeTypeConstructor.subflow].concat(nodeTypeConstructor.subflow.flow));
var subflowInstanceConfig = subflowConfig.subflows[nodeTypeConstructor.subflow.id];
delete subflowConfig.subflows[nodeTypeConstructor.subflow.id];
subflowInstanceConfig.subflows = subflowConfig.subflows;
var instanceConfig = clone(config);
instanceConfig.env = clone(nodeTypeConstructor.subflow.env);
@@ -124,7 +127,7 @@ function createNode(flow,config) {
nodeTypeConstructor.type,
flow,
flow.global,
subflowConfig.subflows[nodeTypeConstructor.subflow.id],
subflowInstanceConfig,
instanceConfig
);
subflow.start();

View File

@@ -63,6 +63,27 @@ var server;
*/
function init(userSettings,httpServer,_adminApi) {
server = httpServer;
if (server && server.on) {
// Add a listener to the upgrade event so that we can properly timeout connection
// attempts that do not get handled by any nodes in the user's flow.
// See #2956
server.on('upgrade',(request, socket, head) => {
// Add a no-op handler to the error event in case nothing upgrades this socket
// before the remote end closes it. This ensures we don't get as uncaughtException
socket.on("error", err => {})
setTimeout(function() {
// If this request has been handled elsewhere, the upgrade will have
// been completed and bytes written back to the client.
// If nothing has been written on the socket, nothing has handled the
// upgrade, so we can consider this an unhandled upgrade.
if (socket.bytesWritten === 0) {
socket.destroy();
}
},userSettings.inboundWebSocketTimeout || 5000)
});
}
userSettings.version = getVersion();
settings.init(userSettings);

View File

@@ -343,7 +343,11 @@ var api = module.exports = {
if (newCreds) {
delete node.credentials;
var savedCredentials = credentialCache[nodeID] || {};
if (/^subflow(:|$)/.test(nodeType)) {
// Need to check the type of constructor for this node.
// - Function : regular node
// - !Function: subflow module
if (/^subflow(:|$)/.test(nodeType) || typeof runtime.nodes.getType(nodeType) !== 'function') {
for (cred in newCreds) {
if (newCreds.hasOwnProperty(cred)) {
if (newCreds[cred] === "__PWRD__") {

View File

@@ -612,8 +612,15 @@ async function saveFlows(flows, user) {
var workflowMode = (gitSettings.workflow||{}).mode || settings.editorTheme.projects.workflow.mode;
if (workflowMode === 'auto') {
return activeProject.stageFile([flowsFullPath, credentialsFile]).then(() => {
return activeProject.commit(user,{message:"Update flow files"})
})
return activeProject.status(user, false).then((result) => {
const items = Object.values(result.files || {});
// check if saved flow make modification to repository
if (items.findIndex((item) => (item.status === "M ")) < 0) {
return Promise.resolve();
}
return activeProject.commit(user,{message:"Update flow files"})
});
});
}
}
});