From a480919ec3ff361c6aef97cce24fbed88213cabc Mon Sep 17 00:00:00 2001 From: Hiroyasu Nishiyama Date: Mon, 26 Apr 2021 09:05:53 +0900 Subject: [PATCH 1/5] fix error on auto commit for no flow change --- .../lib/storage/localfilesystem/projects/index.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/node_modules/@node-red/runtime/lib/storage/localfilesystem/projects/index.js b/packages/node_modules/@node-red/runtime/lib/storage/localfilesystem/projects/index.js index 0533fe5e6..1565decdd 100644 --- a/packages/node_modules/@node-red/runtime/lib/storage/localfilesystem/projects/index.js +++ b/packages/node_modules/@node-red/runtime/lib/storage/localfilesystem/projects/index.js @@ -608,8 +608,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"}) + }); + }); } } }); From 1d12017f116aebe020443e39566cd0645f2c2434 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 26 Apr 2021 10:13:57 +0100 Subject: [PATCH 2/5] Sort context stores in TypedInput and ensure default first Fixes #2954 --- .../editor-client/src/js/ui/common/typedInput.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js b/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js index 2dbd6d71a..0401be1b9 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/common/typedInput.js @@ -15,7 +15,7 @@ **/ (function($) { var contextParse = function(v,defaultStore) { - var parts = RED.utils.parseContextKey(v, defaultStore); + var parts = RED.utils.parseContextKey(v, defaultStore&&defaultStore.value); return { option: parts.store, value: parts.key @@ -279,6 +279,14 @@ var contextStores = RED.settings.context.stores; var contextOptions = contextStores.map(function(store) { return {value:store,label: store, icon:''} + }).sort(function(A,B) { + if (A.value === RED.settings.context.default) { + return -1; + } else if (B.value === RED.settings.context.default) { + return 1; + } else { + return A.value.localeCompare(B.value); + } }) if (contextOptions.length < 2) { allOptions.flow.options = []; From bbac49ff3819d9b0b6afce7825bd8e74e31860dc Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 26 Apr 2021 10:18:25 +0100 Subject: [PATCH 3/5] Ensure function expand button is above vertical scrollbar Fixes #2955 --- .../@node-red/nodes/core/function/10-function.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/core/function/10-function.html b/packages/node_modules/@node-red/nodes/core/function/10-function.html index a57655cf8..20e51da6c 100644 --- a/packages/node_modules/@node-red/nodes/core/function/10-function.html +++ b/packages/node_modules/@node-red/nodes/core/function/10-function.html @@ -74,21 +74,21 @@ From 4cb8e99430bcb6667e6e42dd9b22ea24f1bad313 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 26 Apr 2021 11:45:28 +0100 Subject: [PATCH 4/5] Timeout http upgrade requests that are not otherwise handled Fixes #2956 --- .../@node-red/runtime/lib/index.js | 21 +++++++++++++++++++ packages/node_modules/node-red/settings.js | 6 ++++++ 2 files changed, 27 insertions(+) diff --git a/packages/node_modules/@node-red/runtime/lib/index.js b/packages/node_modules/@node-red/runtime/lib/index.js index 30481740f..c09d202f9 100644 --- a/packages/node_modules/@node-red/runtime/lib/index.js +++ b/packages/node_modules/@node-red/runtime/lib/index.js @@ -64,6 +64,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); diff --git a/packages/node_modules/node-red/settings.js b/packages/node_modules/node-red/settings.js index 331654ed8..a39731f37 100644 --- a/packages/node_modules/node-red/settings.js +++ b/packages/node_modules/node-red/settings.js @@ -46,6 +46,12 @@ module.exports = { // defaults to 10Mb //execMaxBufferSize: 10000000, + // Timeout in milliseconds for inbound WebSocket connections that do not + // match any configured node. + // defaults to 5000 + //inboundWebSocketTimeout: 5000 + + // The maximum length, in characters, of any message sent to the debug sidebar tab debugMaxLength: 1000, From 8e7efd98b2c8ac2b387808dbf2f0c8ddd03b4858 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 26 Apr 2021 16:48:21 +0100 Subject: [PATCH 5/5] Don't let 'escape' whilst moving nodes interrupt things Fixes #2960 --- .../node_modules/@node-red/editor-client/src/js/ui/view.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js index e19387a1e..bffc6fd85 100755 --- a/packages/node_modules/@node-red/editor-client/src/js/ui/view.js +++ b/packages/node_modules/@node-red/editor-client/src/js/ui/view.js @@ -1751,7 +1751,6 @@ RED.view = (function() { } } if (mouse_mode == RED.state.IMPORT_DRAGGING) { - RED.keyboard.remove("escape"); updateActiveNodes(); RED.nodes.dirty(true); } @@ -1786,6 +1785,9 @@ RED.view = (function() { } function selectNone() { + if (mouse_mode === RED.state.MOVING || mouse_mode === RED.state.MOVING_ACTIVE) { + return; + } if (mouse_mode === RED.state.IMPORT_DRAGGING) { clearSelection(); RED.history.pop();