Liu Song’s Projects


~/Projects/flow

git clone https://code.lsong.org/flow

Commit

Commit
122b5ba468df473d4534f5539bf405fafc562646
Author
Nick O'Leary <[email protected]>
Date
2021-08-23 12:25:56 +0100 +0100
Diffstat
 packages/node_modules/node-red/red.js | 7 ++++++-

Merge pull request #3115 from bartbutenaers/https-settings-as-string

Key and certificate as string or buffer


diff --git a/packages/node_modules/node-red/red.js b/packages/node_modules/node-red/red.js
index 2b934fb56ee32e4dda8d208352caf8935988a009..5c40d7794ff93a965d86e620139781486ec4e497 100755
--- a/packages/node_modules/node-red/red.js
+++ b/packages/node_modules/node-red/red.js
@@ -234,8 +234,13 @@                         try {
                             // Get the result of the function, because createServer doesn't accept functions as input
                             Promise.resolve(settings.https()).then(function(refreshedHttps) {
                                 if (refreshedHttps) {
+                                    // The key/cert needs to be updated in the NodeJs http(s) server, when no key/cert is yet available or when the key/cert has changed. 
+                                    // Note that the refreshed key/cert can be supplied as a string or a buffer.
+                                    var updateKey = (server.key == undefined || (Buffer.isBuffer(server.key) && !server.key.equals(refreshedHttps.key)) || (typeof server.key == "string" && server.key != refreshedHttps.key));
+                                    var updateCert = (server.cert == undefined || (Buffer.isBuffer(server.cert) && !server.cert.equals(refreshedHttps.cert)) || (typeof server.cert == "string" && server.cert != refreshedHttps.cert));
+                                    
                                     // Only update the credentials in the server when key or cert has changed
-                                    if(!server.key || !server.cert || !server.key.equals(refreshedHttps.key) || !server.cert.equals(refreshedHttps.cert)) {
+                                    if(updateKey || updateCert) {
                                         server.setSecureContext(refreshedHttps);
                                         RED.log.info(RED.log._("server.https.settings-refreshed"));
                                     }