From d6d2077126686918a5198b55fa5deee72b4217ea Mon Sep 17 00:00:00 2001 From: TotallyNotElite <1yourexperiment@protonmail.com> Date: Wed, 6 Nov 2019 19:13:33 +0100 Subject: [PATCH 1/2] Revert "Fixed GreenLock install." This reverts commit 013fb09d6c923b04d110e49be209489bd08a8082. --- meshcentral.js | 5 +---- package.json | 4 +--- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/meshcentral.js b/meshcentral.js index 077c21fc..4195b8fc 100644 --- a/meshcentral.js +++ b/meshcentral.js @@ -1949,9 +1949,6 @@ function InstallModule(modulename, func, tag1, tag2) { var child_process = require('child_process'); var parentpath = __dirname; - // Add module exact version number if needed - if (modulename == 'greenlock') { modulename = 'greenlock@2.8.8'; } - // Get the working directory if ((__dirname.endsWith('/node_modules/meshcentral')) || (__dirname.endsWith('\\node_modules\\meshcentral')) || (__dirname.endsWith('/node_modules/meshcentral/')) || (__dirname.endsWith('\\node_modules\\meshcentral\\'))) { parentpath = require('path').join(__dirname, '../..'); } @@ -2009,7 +2006,7 @@ function mainStart() { var modules = ['ws', 'cbor', 'nedb', 'https', 'yauzl', 'xmldom', 'ipcheck', 'express', 'archiver', 'multiparty', 'node-forge', 'express-ws', 'compression', 'body-parser', 'connect-redis', 'cookie-session', 'express-handlebars']; if (require('os').platform() == 'win32') { modules.push('node-windows'); if (sspi == true) { modules.push('node-sspi'); } } // Add Windows modules if (ldap == true) { modules.push('ldapauth-fork'); } - if (config.letsencrypt != null) { modules.push('greenlock'); modules.push('le-store-certbot'); modules.push('le-challenge-fs'); modules.push('le-acme-core'); } // Add Greenlock Modules + if (config.letsencrypt != null) { modules.push('greenlock@2.8.8'); modules.push('le-store-certbot'); modules.push('le-challenge-fs'); modules.push('le-acme-core'); } // Add Greenlock Modules if (config.settings.mqtt != null) { modules.push('aedes'); } // Add MQTT Modules if (config.settings.mongodb != null) { modules.push('mongodb'); } // Add MongoDB, official driver. if (config.settings.vault != null) { modules.push('node-vault'); } // Add official HashiCorp's Vault module. diff --git a/package.json b/package.json index 3a27c6dc..0ca3d379 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "meshcentral", - "version": "0.4.3-w", + "version": "0.4.3-v", "keywords": [ "Remote Management", "Intel AMT", @@ -37,10 +37,8 @@ "express": "^4.17.0", "express-handlebars": "^3.1.0", "express-ws": "^4.0.0", - "greenlock": "^2.8.8", "html-minifier": "^4.0.0", "ipcheck": "^0.1.0", - "le-acme-core": "^2.1.4", "meshcentral": "*", "minify-js": "0.0.4", "minimist": "^1.2.0", From 25fbc29cd0c79e27d319c47b80d71fd9a574c253 Mon Sep 17 00:00:00 2001 From: TotallyNotElite <1yourexperiment@protonmail.com> Date: Wed, 6 Nov 2019 19:41:11 +0100 Subject: [PATCH 2/2] Clean up module install code Having a global reference for InstallModuleChildProcess isn't actually required since this is javascript. Take the substring that doesn't include the version tag, so "require" can find the module Fixes #631 --- meshcentral.js | 9 ++++----- package.json | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/meshcentral.js b/meshcentral.js index 4195b8fc..bc2b363b 100644 --- a/meshcentral.js +++ b/meshcentral.js @@ -1932,8 +1932,10 @@ function InstallModules(modules, func) { var missingModules = []; if (modules.length > 0) { for (var i in modules) { + // Modules may contain a version tag (foobar@1.0.0), remove it so the module can be found using require + var moduleName = modules[i].split("@", 1)[0]; try { - var xxmodule = require(modules[i]); + require(moduleName); } catch (e) { if (previouslyInstalledModules[modules[i]] !== true) { missingModules.push(modules[i]); } } @@ -1943,7 +1945,6 @@ function InstallModules(modules, func) { } // Check if a module is present and install it if missing -var InstallModuleChildProcess = null; function InstallModule(modulename, func, tag1, tag2) { console.log('Installing ' + modulename + '...'); var child_process = require('child_process'); @@ -1952,9 +1953,7 @@ function InstallModule(modulename, func, tag1, tag2) { // Get the working directory if ((__dirname.endsWith('/node_modules/meshcentral')) || (__dirname.endsWith('\\node_modules\\meshcentral')) || (__dirname.endsWith('/node_modules/meshcentral/')) || (__dirname.endsWith('\\node_modules\\meshcentral\\'))) { parentpath = require('path').join(__dirname, '../..'); } - // Looks like we need to keep a global reference to the child process object for this to work correctly. - InstallModuleChildProcess = child_process.exec('npm install --no-optional --save ' + modulename, { maxBuffer: 512000, timeout: 120000, cwd: parentpath }, function (error, stdout, stderr) { - InstallModuleChildProcess = null; + child_process.exec(`npm install --no-optional ${modulename}`, { maxBuffer: 512000, timeout: 120000, cwd: parentpath }, function (error, stdout, stderr) { if ((error != null) && (error != '')) { console.log('ERROR: Unable to install required module "' + modulename + '". MeshCentral may not have access to npm, or npm may not have suffisent rights to load the new module. Try "npm install ' + modulename + '" to manualy install this module.\r\n'); process.exit(); diff --git a/package.json b/package.json index 0ca3d379..ff874d87 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "meshcentral", - "version": "0.4.3-v", + "version": "0.4.3-w", "keywords": [ "Remote Management", "Intel AMT",