mirror of
				https://github.com/node-red/node-red.git
				synced 2025-03-01 10:36:34 +00:00 
			
		
		
		
	Generate instanceId and include in hash for cache busting
This commit is contained in:
		| @@ -51,7 +51,7 @@ module.exports = { | ||||
|  | ||||
|             var ui = require("./ui"); | ||||
|  | ||||
|             ui.init(runtimeAPI); | ||||
|             ui.init(settings, runtimeAPI); | ||||
|  | ||||
|             const editorApp = apiUtil.createExpressApp(settings) | ||||
|  | ||||
|   | ||||
| @@ -25,15 +25,16 @@ var apiUtils = require("../util"); | ||||
| var theme = require("./theme"); | ||||
|  | ||||
| var runtimeAPI; | ||||
| let settings; | ||||
| var editorClientDir = path.dirname(require.resolve("@node-red/editor-client")); | ||||
| var defaultNodeIcon = path.join(editorClientDir,"public","red","images","icons","arrow-in.svg"); | ||||
| var editorTemplatePath = path.join(editorClientDir,"templates","index.mst"); | ||||
| var editorTemplate; | ||||
| const version = require(path.join(editorClientDir,"package.json")).version | ||||
| const cacheBuster = crypto.createHash('md5').update(version).digest("hex").substring(0,12) | ||||
| let cacheBuster | ||||
|  | ||||
| module.exports = { | ||||
|     init: function(_runtimeAPI) { | ||||
|     init: function(_settings, _runtimeAPI) { | ||||
|         settings = _settings; | ||||
|         runtimeAPI = _runtimeAPI; | ||||
|         editorTemplate = fs.readFileSync(editorTemplatePath,"utf8"); | ||||
|         Mustache.parse(editorTemplate); | ||||
| @@ -94,6 +95,12 @@ module.exports = { | ||||
|     }, | ||||
|  | ||||
|     editor: async function(req,res) { | ||||
|         if (!cacheBuster) { | ||||
|             // settings.instanceId is set asynchronously to the editor-api | ||||
|             // being initiaised. So we defer calculating the cacheBuster hash | ||||
|             // until the first load of the editor | ||||
|             cacheBuster = crypto.createHash('md5').update(`${settings.version || 'version'}-${settings.instanceId || 'instanceId'}`).digest("hex").substring(0,12)     | ||||
|         } | ||||
|  | ||||
|         let sessionMessages; | ||||
|         if (req.session && req.session.messages) { | ||||
|   | ||||
| @@ -27,6 +27,7 @@ var express = require("express"); | ||||
| var path = require('path'); | ||||
| var fs = require("fs"); | ||||
| var os = require("os"); | ||||
| const crypto = require("crypto") | ||||
|  | ||||
| const {log,i18n,events,exec,util,hooks} = require("@node-red/util"); | ||||
|  | ||||
| @@ -51,7 +52,7 @@ var adminApi = { | ||||
| var nodeApp; | ||||
| var adminApp; | ||||
| var server; | ||||
|  | ||||
| let userSettings; | ||||
|  | ||||
| /** | ||||
|  * Initialise the runtime module. | ||||
| @@ -61,8 +62,9 @@ var server; | ||||
|  *                              better abstracted. | ||||
|  * @memberof @node-red/runtime | ||||
|  */ | ||||
| function init(userSettings,httpServer,_adminApi) { | ||||
| function init(_userSettings,httpServer,_adminApi) { | ||||
|     server = httpServer; | ||||
|     userSettings = _userSettings | ||||
|  | ||||
|     if (server && server.on) { | ||||
|         // Add a listener to the upgrade event so that we can properly timeout connection | ||||
| @@ -134,7 +136,10 @@ function start() { | ||||
|         .then(function() { return settings.load(storage)}) | ||||
|         .then(function() { return library.init(runtime)}) | ||||
|         .then(function() { | ||||
|  | ||||
|             if (settings.get('instanceId') === undefined) { | ||||
|                 settings.set('instanceId', crypto.randomBytes(8).toString('hex')) | ||||
|             } | ||||
|             userSettings.instanceId = settings.get('instanceId') || '' | ||||
|             if (log.metric()) { | ||||
|                 runtimeMetricInterval = setInterval(function() { | ||||
|                     reportMetrics(); | ||||
|   | ||||
| @@ -29,7 +29,7 @@ describe("api/editor/ui", function() { | ||||
|     var app; | ||||
|  | ||||
|     before(function() { | ||||
|         ui.init({ | ||||
|         ui.init({}, { | ||||
|             nodes: { | ||||
|                 getIcon: function(opts) { | ||||
|                     return new Promise(function(resolve,reject) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user