From c3d44215921aa16c927a044314ae1c97a33fc426 Mon Sep 17 00:00:00 2001 From: Dave Conway-Jones Date: Wed, 9 Oct 2024 16:49:27 +0100 Subject: [PATCH 1/8] Add option to use pfx or p12 for TLS connections --- package.json | 2 +- .../@node-red/nodes/core/network/05-tls.html | 74 +++++++++++++++++-- .../@node-red/nodes/core/network/05-tls.js | 46 +++++++++--- .../nodes/locales/en-US/messages.json | 10 ++- 4 files changed, 111 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index 6015c0c9e..e948f8cd9 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "@node-rs/bcrypt": "1.10.4" }, "devDependencies": { - "dompurify": "2.4.1", + "dompurify": "3.1.7", "grunt": "1.6.1", "grunt-chmod": "~1.1.1", "grunt-cli": "~1.4.3", diff --git a/packages/node_modules/@node-red/nodes/core/network/05-tls.html b/packages/node_modules/@node-red/nodes/core/network/05-tls.html index 8414e98ca..1dda38842 100644 --- a/packages/node_modules/@node-red/nodes/core/network/05-tls.html +++ b/packages/node_modules/@node-red/nodes/core/network/05-tls.html @@ -20,6 +20,13 @@
+ + +
+
@@ -31,7 +38,7 @@
-
+
@@ -43,11 +50,23 @@
-
- - +
+ + + + + + + + + +
+ + +
+
@@ -83,6 +102,7 @@ category: 'config', defaults: { name: {value:""}, + certType: {value:"files"}, cert: {value:"", validate: function(v,opt) { var currentKey = $("#node-config-input-key").val(); if (currentKey === undefined) { @@ -103,6 +123,8 @@ } return RED._("node-red:tls.error.invalid-key"); }}, + p12: {value:""}, + p12name: {value:""}, ca: {value:""}, certname: {value:""}, keyname: {value:""}, @@ -115,6 +137,7 @@ certdata: {type:"text"}, keydata: {type:"text"}, cadata: {type:"text"}, + p12data: {type:"text"}, passphrase: {type:"password"} }, label: function() { @@ -124,6 +147,21 @@ return this.name?"node_label_italic":""; }, oneditprepare: function() { + $("#node-config-input-certType").on('change',function() { + if ($("#node-config-input-certType").val() === "pfx") { + $("#node-tls-conf-cer").hide(); + $("#node-tls-conf-key").hide(); + $("#node-tls-conf-ca").hide(); + $("#node-tls-conf-p12").show(); + } + else { + $("#node-tls-conf-cer").show(); + $("#node-tls-conf-key").show(); + $("#node-tls-conf-ca").show(); + $("#node-tls-conf-p12").hide(); + } + }); + function updateFileUpload() { if ($("#node-config-input-uselocalfiles").is(':checked')) { $(".tls-config-input-path").show(); @@ -145,9 +183,19 @@ reader.onload = function(event) { $("#tls-config-"+property+"name").text(filename); $(filenameInputId).val(filename); - $(dataInputId).val(event.target.result); + if (property === "p12") { + $(dataInputId).val(btoa(String.fromCharCode(...new Uint8Array(event.target.result)))) + } + else { + $(dataInputId).val(event.target.result); + } + } + if (property === "p12") { + reader.readAsArrayBuffer(file); + } + else { + reader.readAsText(file,"UTF-8"); } - reader.readAsText(file,"UTF-8"); } $("#node-config-input-certfile" ).on("change", function() { saveFile("cert", this.files[0]); @@ -158,6 +206,9 @@ $("#node-config-input-cafile" ).on("change", function() { saveFile("ca", this.files[0]); }); + $("#node-config-input-p12file" ).on("change", function() { + saveFile("p12", this.files[0]); + }); function clearNameData(prop) { $("#tls-config-"+prop+"name").text(""); @@ -173,6 +224,9 @@ $("#tls-config-button-ca-clear").on("click", function() { clearNameData("ca"); }); + $("#tls-config-button-p12-clear").on("click", function() { + clearNameData("p12"); + }); if (RED.settings.tlsConfigDisableLocalFiles) { $("#node-config-row-uselocalfiles").hide(); @@ -180,12 +234,13 @@ $("#node-config-row-uselocalfiles").show(); } // in case paths were set from old TLS config - if(this.cert || this.key || this.ca) { + if (this.cert || this.key || this.ca || this.p12) { $("#node-config-input-uselocalfiles").prop('checked',true); } $("#tls-config-certname").text(this.certname); $("#tls-config-keyname").text(this.keyname); $("#tls-config-caname").text(this.caname); + $("#tls-config-p12name").text(this.p12name); updateFileUpload(); }, oneditsave: function() { @@ -193,10 +248,13 @@ clearNameData("ca"); clearNameData("cert"); clearNameData("key"); - } else { + clearNameData("p12"); + } + else { $("#node-config-input-ca").val(""); $("#node-config-input-cert").val(""); $("#node-config-input-key").val(""); + $("#node-config-input-p12").val(""); } } }); diff --git a/packages/node_modules/@node-red/nodes/core/network/05-tls.js b/packages/node_modules/@node-red/nodes/core/network/05-tls.js index 888d749fd..c1b2c2105 100644 --- a/packages/node_modules/@node-red/nodes/core/network/05-tls.js +++ b/packages/node_modules/@node-red/nodes/core/network/05-tls.js @@ -25,6 +25,8 @@ module.exports = function(RED) { var certPath = n.cert.trim(); var keyPath = n.key.trim(); var caPath = n.ca.trim(); + var p12Path = n.p12.trim(); + this.certType = n.certType || "files"; this.servername = (n.servername||"").trim(); this.alpnprotocol = (n.alpnprotocol||"").trim(); @@ -46,18 +48,31 @@ module.exports = function(RED) { if (caPath) { this.ca = fs.readFileSync(caPath); } - } catch(err) { + } + catch(err) { this.valid = false; this.error(err.toString()); return; } - } else { + } + else if (p12Path.length > 0) { + try { + this.pfx = fs.readFileSync(p12Path); + } + catch(err) { + this.valid = false; + this.error(err.toString()); + return; + } + } + else { if (this.credentials) { var certData = this.credentials.certdata || ""; var keyData = this.credentials.keydata || ""; var caData = this.credentials.cadata || ""; + var p12Data = this.credentials.p12data || ""; - if ((certData.length > 0) !== (keyData.length > 0)) { + if ((certData.length > 0) !== (keyData.length > 0) && p12Data.length === 0) { this.valid = false; this.error(RED._("tls.error.missing-file")); return; @@ -72,6 +87,9 @@ module.exports = function(RED) { if (caData) { this.ca = caData; } + if (p12Data) { + this.pfx = Buffer.from(p12Data, 'base64'); + } } } } @@ -80,6 +98,7 @@ module.exports = function(RED) { certdata: {type:"text"}, keydata: {type:"text"}, cadata: {type:"text"}, + p12data: {type:"text"}, passphrase: {type:"password"} }, settings: { @@ -92,14 +111,21 @@ module.exports = function(RED) { TLSConfig.prototype.addTLSOptions = function(opts) { if (this.valid) { - if (this.key) { - opts.key = this.key; + if (this.certType === "files") { + if (this.key) { + opts.key = this.key; + } + if (this.cert) { + opts.cert = this.cert; + } + if (this.ca) { + opts.ca = this.ca; + } } - if (this.cert) { - opts.cert = this.cert; - } - if (this.ca) { - opts.ca = this.ca; + else { + if (this.pfx) { + opts.pfx = this.pfx; + } } if (this.credentials && this.credentials.passphrase) { opts.passphrase = this.credentials.passphrase; diff --git a/packages/node_modules/@node-red/nodes/locales/en-US/messages.json b/packages/node_modules/@node-red/nodes/locales/en-US/messages.json index bc89992e2..ae6d76072 100644 --- a/packages/node_modules/@node-red/nodes/locales/en-US/messages.json +++ b/packages/node_modules/@node-red/nodes/locales/en-US/messages.json @@ -204,19 +204,25 @@ "ca": "CA Certificate", "verify-server-cert": "Verify server certificate", "servername": "Server Name", - "alpnprotocol": "ALPN Protocol" + "alpnprotocol": "ALPN Protocol", + "certtype": "Cert Type", + "files": "Individual files", + "p12": "pfx or p12", + "pfx": "pfx or p12 file" }, "placeholder": { "cert": "path to certificate (PEM format)", "key": "path to private key (PEM format)", + "p12": "path to .pfx or .p12 (PKCS12 format)", "ca": "path to CA certificate (PEM format)", - "passphrase": "private key passphrase (optional)", + "passphrase": "password or passphrase (optional)", "servername": "for use with SNI", "alpnprotocol": "for use with ALPN" }, "error": { "missing-file": "No certificate/key file provided", "invalid-cert": "Certificate not specified", + "invalid-p12": "pfx/p12 not specified", "invalid-key": "Private key not specified" } }, From 214fbc0e47cc9688d691a7dcdd3a9e621b4567a0 Mon Sep 17 00:00:00 2001 From: Dave Conway-Jones Date: Wed, 9 Oct 2024 16:56:24 +0100 Subject: [PATCH 2/8] revert dompurify to match dev branch --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e948f8cd9..6015c0c9e 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "@node-rs/bcrypt": "1.10.4" }, "devDependencies": { - "dompurify": "3.1.7", + "dompurify": "2.4.1", "grunt": "1.6.1", "grunt-chmod": "~1.1.1", "grunt-cli": "~1.4.3", From 71440be009b11a787f510743f6a5036cb682af7b Mon Sep 17 00:00:00 2001 From: Dave Conway-Jones Date: Wed, 9 Oct 2024 17:46:07 +0100 Subject: [PATCH 3/8] Fixup tls config for tests --- .../@node-red/nodes/core/network/05-tls.js | 13 +++++++------ test/resources/50-file-test-file.txt | 2 ++ .../lib/nodes/.testUserHome/.config.runtime.json | 4 ++++ 3 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 test/resources/50-file-test-file.txt create mode 100644 test/unit/@node-red/runtime/lib/nodes/.testUserHome/.config.runtime.json diff --git a/packages/node_modules/@node-red/nodes/core/network/05-tls.js b/packages/node_modules/@node-red/nodes/core/network/05-tls.js index c1b2c2105..5a3147af6 100644 --- a/packages/node_modules/@node-red/nodes/core/network/05-tls.js +++ b/packages/node_modules/@node-red/nodes/core/network/05-tls.js @@ -22,15 +22,16 @@ module.exports = function(RED) { RED.nodes.createNode(this,n); this.valid = true; this.verifyservercert = n.verifyservercert; - var certPath = n.cert.trim(); - var keyPath = n.key.trim(); - var caPath = n.ca.trim(); - var p12Path = n.p12.trim(); + var certPath, keyPath, caPath, p12Path; + if (n.cert) { certPath = n.cert.trim(); } + if (n.key) { keyPath = n.key.trim(); } + if (n.ca) { caPath = n.ca.trim(); } + if (n.p12) { p12Path = n.p12.trim(); } this.certType = n.certType || "files"; this.servername = (n.servername||"").trim(); this.alpnprotocol = (n.alpnprotocol||"").trim(); - if ((certPath.length > 0) || (keyPath.length > 0) || (caPath.length > 0)) { + if ((certPath && certPath.length > 0) || (keyPath && keyPath.length > 0) || (caPath && caPath.length > 0)) { if ( (certPath.length > 0) !== (keyPath.length > 0)) { this.valid = false; @@ -55,7 +56,7 @@ module.exports = function(RED) { return; } } - else if (p12Path.length > 0) { + else if (p12Path && p12Path.length > 0) { try { this.pfx = fs.readFileSync(p12Path); } diff --git a/test/resources/50-file-test-file.txt b/test/resources/50-file-test-file.txt new file mode 100644 index 000000000..0491f12fe --- /dev/null +++ b/test/resources/50-file-test-file.txt @@ -0,0 +1,2 @@ +File message line 1 +File message line 2 diff --git a/test/unit/@node-red/runtime/lib/nodes/.testUserHome/.config.runtime.json b/test/unit/@node-red/runtime/lib/nodes/.testUserHome/.config.runtime.json new file mode 100644 index 000000000..7bf5a81bd --- /dev/null +++ b/test/unit/@node-red/runtime/lib/nodes/.testUserHome/.config.runtime.json @@ -0,0 +1,4 @@ +{ + "instanceId": "bff8dba3f474d406", + "_credentialSecret": "c9ca84d93a4f6236426cc740b147b50f32b3dd9aab9f4191390a604197722a4d" +} \ No newline at end of file From e4e3e0be7b420e0b389b0690dbbf085e140f85e7 Mon Sep 17 00:00:00 2001 From: Dave Conway-Jones Date: Wed, 9 Oct 2024 21:30:28 +0100 Subject: [PATCH 4/8] Add pfx tls test for tls config node --- .../nodes/core/network/21-httprequest_spec.js | 35 ++++++++++++++++-- test/resources/ssl/test.pfx | Bin 0 -> 2579 bytes 2 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 test/resources/ssl/test.pfx diff --git a/test/nodes/core/network/21-httprequest_spec.js b/test/nodes/core/network/21-httprequest_spec.js index 0df73b970..703fa1576 100644 --- a/test/nodes/core/network/21-httprequest_spec.js +++ b/test/nodes/core/network/21-httprequest_spec.js @@ -211,7 +211,7 @@ describe('HTTP Request Node', function() { } else { hash = crypto.createHash('md5'); } - + var hex = hash.update(value).digest('hex'); if (algorithm === 'SHA-512-256') { hex = hex.slice(0, 64); @@ -1802,10 +1802,37 @@ describe('HTTP Request Node', function() { }) }); + it('should use pfx tls file', function(done) { + var flow = [ + {id:"n1",type:"http request",wires:[["n2"]],method:"GET",ret:"txt",url:getSslTestURLWithoutProtocol('/text'),tls:"n3"}, + {id:"n2", type:"helper"}, + {id:"n3", type:"tls-config", p12:"test/resources/ssl/test.pfx", verifyservercert:false}]; + var testNodes = [httpRequestNode, tlsNode]; + helper.load(testNodes, flow, function() { + var n3 = helper.getNode("n3"); + var n2 = helper.getNode("n2"); + var n1 = helper.getNode("n1"); + n2.on("input", function(msg) { + try { + msg.should.have.property('payload','hello'); + msg.should.have.property('statusCode',200); + msg.should.have.property('headers'); + msg.headers.should.have.property('content-length',''+('hello'.length)); + msg.headers.should.have.property('content-type').which.startWith('text/html'); + msg.should.have.property('responseUrl').which.startWith('https://'); + done(); + } catch(err) { + done(err); + } + }); + n1.receive({payload:"foo"}); + }); + }); + it('should use env var http_proxy', function(done) { const url = getTestURL('/postInspect') const proxyUrl = "http://localhost:" + testProxyPort - + const flow = [ { id: "n1", type: "http request", wires: [["n2"]], method: "POST", ret: "obj", url: url }, { id: "n2", type: "helper" }, @@ -1830,7 +1857,7 @@ describe('HTTP Request Node', function() { it('should use env var https_proxy', function(done) { const url = getSslTestURL('/postInspect') const proxyUrl = "http://localhost:" + testProxyPort - + const flow = [ { id: "n1", type: "http request", wires: [["n2"]], method: "POST", ret: "obj", url: url }, { id: "n2", type: "helper" }, @@ -1855,7 +1882,7 @@ describe('HTTP Request Node', function() { it('should not use env var http*_proxy when no_proxy is set', function(done) { const url = getSslTestURL('/postInspect') const proxyUrl = "http://localhost:" + testProxyPort - + const flow = [ { id: "n1", type: "http request", wires: [["n2"]], method: "POST", ret: "obj", url: url }, { id: "n2", type: "helper" }, diff --git a/test/resources/ssl/test.pfx b/test/resources/ssl/test.pfx new file mode 100644 index 0000000000000000000000000000000000000000..519d8a3fc8ca753a4de4d85697a8efb939a59471 GIT binary patch literal 2579 zcmai$X*d)L7st(*nP%+UEktA~Ll{fQolJxfGA8@3$%IIRvKvd;cY|!%m8|6=j4;U3 zh%8|Y5zSix8$k;3Al74a0tjF_ZcP6s0EENu0nCmtMJW6`vLPfuTshgwbBV&1 z`Te6>d_2pdoQ83&>b1d{Cq?>%;Kz&P3%mgTF zHPg_=rRwfHpUp$Je#M1Su~3Epp&BAGh5}z1%q)veanmnIX)OFOL#LLR7a6+E8R8lGmlm@~1y%k?0DQNWtu;m$r4X>L$Y_ zwo5+5#cP&dm zwHvJb$gI#nLoeB$$Jh;*0-D+7Kxm6^wWxblIVmz2MlaWJ_uCgO67Sm1e3r3MT9+#Q z+UXA3gDN64Qcuk`?6p{`XUFtF)2SVnwCTjg`f-DPUFW zr(FU0L6Z4mmdtkGb?&UuCBpcD9LmaeD0f8eo?SKMtz*&-?3Zj_nf=km^MX!@zsJEF z16ln)&-ZLDl!91fZlx8J>xG}0RpPKSHZ-?45+M5%8tKeg!Q+}orEB&|cMX5QTSZIo z8^d;w13IXG;It-`$=^`EatF<#gnA>Rh&qDLCSKwV&5IOAaS{i2LW=8hR0bb?$-Rz! zPkOL1e}@d1Qx|(ZHl5zLzuB?Tf`4wn6+P7 zvy><)7`I|fvv$n}evxVlztezzy2)CLo}I@mMD{f&Buw00uXMtyAy4+=?MLwW$;!3% z7mu_iEn~cWEQZyrwD(!Wg4$IkGtB~9jPosZM9a*haBZoVF)}p{`Z~#BMxvd2oHXAjD3&mK7{rE zPGMsK0FT2<$ME8Ri6Voz|E8IZc`u-;KFH);mivE-qGYuq%OpP!V&`P=hbJ`i76=a- zCIz$;(Z#WDorVim7(&SCx@$Q_VK0HB@fDwjzuDaNyTDWanj-+MC!>e^x+A#RTdjTM zqqPVXxJf9J_06%ABv7)b7!JRy8;q7q&|huO|7w`a;ht5e)<%c#H5^{t*v`!=S{dvCtf}>ZbF7J8(rdq0kp{72& zpbR|gy7Rfh+fZCzSd{>cSJKp(^fuQ$X*KtILR0g!fQ{ju^b8PFQN+Az_CV*R`Gni1 zTT09KOFw)ivdo!?xcRZqFCJpN?z^av*qw$ehs1IeuEEKALL#yoPhb@1No*(g*fcF9E*J5xL zW@F4aMuhI5+Q(DA93k0yIu&-Q!ZeP#sB;{3X-Y$4+Gok@98>I*WQ)-=mEMJV7AF^t z3VdCOlix}Pc9xjOWR<8pv5#I{symgvpuUh~M!5a6;!vkPs4(nptsl~4Sw-=Sf{fYX z2vn{w6PQO|DZr+Cv?LM?7Do}a;XBp`XiN=s=} zq%g6*>xq)ujus=~b2>isic#PbS3ADkcN0YkNCPE(Ucnz`jlSUCug;&vwH&^_L+@!W zQP$PA$G8<*ZLqD6;Is8&7}zyRI8>^7onu&CXwl&LpI^qyMmR5cx6)(qod_Qvb9aj=CVF- zzn13U%ca^BV#D|OE2zWOmg;^9mU@Qp#+4A|1#?;FNT!_d6CqR~oUuiuv*gL(hg)0S zaLJgf?oHJ<;SubwxhQt}Hg<~qDcrW8D7JNONiL2w^egRwgBv!)h>@{Vs417Hz1ha! zy+%Brj){#p{Y)fiJPY#{d%RUtX}9Ih($Tl>+r>IKBWJ&cd7V0zXH*QI$i5>UcXf(k zoxjpe35j)}n?S7InqxSrO`#YuOfK9nrD7l5*j^fR@$4>z_Z%Hl8Z`Rxs-_2TlxXQz zO37daf#2&Wtktr~r*uZcqYSe_ux$S3t-IK!QjV&vatYDsyd{T}Ga@GCcr=6pPUZ(r6U*);q<8vRADWom~W@puz+Y=x=+s;_X zDa8j;_5IA^X6a{Fyv>X{hwfr`f38edn@z2Pkng|61`|mdj2mmvIL|Oa8^Cpfu6Uw+Q4d+TGHog8h+JS~WItMNk WG^mZ(Ed@cPXH`#t)5~-JQSIMkamAqk literal 0 HcmV?d00001 From fbf2c7b570b2824e347bb5060942ee2b780b1d40 Mon Sep 17 00:00:00 2001 From: Dave Conway-Jones Date: Tue, 3 Dec 2024 14:35:56 +0000 Subject: [PATCH 5/8] Update 05-tls.js --- packages/node_modules/@node-red/nodes/core/network/05-tls.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/core/network/05-tls.js b/packages/node_modules/@node-red/nodes/core/network/05-tls.js index 5a3147af6..0c588fc66 100644 --- a/packages/node_modules/@node-red/nodes/core/network/05-tls.js +++ b/packages/node_modules/@node-red/nodes/core/network/05-tls.js @@ -32,8 +32,7 @@ module.exports = function(RED) { this.alpnprotocol = (n.alpnprotocol||"").trim(); if ((certPath && certPath.length > 0) || (keyPath && keyPath.length > 0) || (caPath && caPath.length > 0)) { - - if ( (certPath.length > 0) !== (keyPath.length > 0)) { + if ( (certPath && certPath.length > 0) !== (keyPath && keyPath.length > 0)) { this.valid = false; this.error(RED._("tls.error.missing-file")); return; From 936f024e33f08ddf58dae4291ad5a6b8f6d3cd65 Mon Sep 17 00:00:00 2001 From: Dave Conway-Jones Date: Wed, 4 Dec 2024 12:54:06 +0000 Subject: [PATCH 6/8] reverse test logic of existence of pfx --- .../@node-red/nodes/core/network/05-tls.js | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/core/network/05-tls.js b/packages/node_modules/@node-red/nodes/core/network/05-tls.js index 0c588fc66..3dd3ba8b5 100644 --- a/packages/node_modules/@node-red/nodes/core/network/05-tls.js +++ b/packages/node_modules/@node-red/nodes/core/network/05-tls.js @@ -31,7 +31,17 @@ module.exports = function(RED) { this.servername = (n.servername||"").trim(); this.alpnprotocol = (n.alpnprotocol||"").trim(); - if ((certPath && certPath.length > 0) || (keyPath && keyPath.length > 0) || (caPath && caPath.length > 0)) { + if (this.certType === "pfx" && p12Path && p12Path.length > 0) { + try { + this.pfx = fs.readFileSync(p12Path); + } + catch(err) { + this.valid = false; + this.error(err.toString()); + return; + } + } + else if ((certPath && certPath.length > 0) || (keyPath && keyPath.length > 0) || (caPath && caPath.length > 0)) { if ( (certPath && certPath.length > 0) !== (keyPath && keyPath.length > 0)) { this.valid = false; this.error(RED._("tls.error.missing-file")); @@ -55,16 +65,6 @@ module.exports = function(RED) { return; } } - else if (p12Path && p12Path.length > 0) { - try { - this.pfx = fs.readFileSync(p12Path); - } - catch(err) { - this.valid = false; - this.error(err.toString()); - return; - } - } else { if (this.credentials) { var certData = this.credentials.certdata || ""; From 6bac244c287a9f891c5b36f1cfc004bb29965eb1 Mon Sep 17 00:00:00 2001 From: Dave Conway-Jones Date: Wed, 4 Dec 2024 21:34:41 +0000 Subject: [PATCH 7/8] Delete 50-file-test-file.txt --- test/resources/50-file-test-file.txt | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 test/resources/50-file-test-file.txt diff --git a/test/resources/50-file-test-file.txt b/test/resources/50-file-test-file.txt deleted file mode 100644 index 0491f12fe..000000000 --- a/test/resources/50-file-test-file.txt +++ /dev/null @@ -1,2 +0,0 @@ -File message line 1 -File message line 2 From 8272d4e1e4150b71a7381eda6d868f1dceb03bdd Mon Sep 17 00:00:00 2001 From: Dave Conway-Jones Date: Wed, 4 Dec 2024 21:42:19 +0000 Subject: [PATCH 8/8] Delete .config.runtime.json --- .../runtime/lib/nodes/.testUserHome/.config.runtime.json | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 test/unit/@node-red/runtime/lib/nodes/.testUserHome/.config.runtime.json diff --git a/test/unit/@node-red/runtime/lib/nodes/.testUserHome/.config.runtime.json b/test/unit/@node-red/runtime/lib/nodes/.testUserHome/.config.runtime.json deleted file mode 100644 index 7bf5a81bd..000000000 --- a/test/unit/@node-red/runtime/lib/nodes/.testUserHome/.config.runtime.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "instanceId": "bff8dba3f474d406", - "_credentialSecret": "c9ca84d93a4f6236426cc740b147b50f32b3dd9aab9f4191390a604197722a4d" -} \ No newline at end of file