1
0
Fork 0
mirror of https://github.com/Ylianst/MeshCentral.git synced 2025-03-09 15:40:18 +00:00

Fixed plugin version matching, 2-factor reuirement + skip, removed GreenLock completely.

This commit is contained in:
Ylian Saint-Hilaire 2020-03-11 16:53:09 -07:00
parent 5acfc5f0fc
commit d483872aa6
6 changed files with 40 additions and 374 deletions

View file

@ -274,6 +274,19 @@ module.exports.pluginHandler = function (parent) {
})
};
// MeshCentral doesn't adhere to semantic versioning (due to the -<alpha_char> at the end of the version)
// Convert 1.2.3-a to 1.2.3-3 where the letter is converted to a number.
function versionToNumber(ver) { var x = ver.split('-'); if (x.length != 2) return ver; x[1] = x[1].toLowerCase().charCodeAt(0) - 96; return x.join('.'); }
// Check if the current version of MeshCentral is at least the minimal required.
function checkMeshCentralVersion(current, minimal) {
if (minimal.startsWith('>=')) { minimal = minimal.substring(2); }
var c = versionToNumber(current).split('.'), m = versionToNumber(minimal).split('.');
if (c.length != m.length) return false;
for (var i = 0; i < c.length; i++) { var cx = parseInt(c[i]), cm = parseInt(m[i]); if (cx > cm) { return true; } if (cx < cm) { return false; } }
return true;
}
obj.getPluginLatest = function () {
return new Promise(function (resolve, reject) {
parent.db.getPlugins(function (err, plugins) {
@ -294,16 +307,12 @@ module.exports.pluginHandler = function (parent) {
});
if (curconf == null) reject("Some plugin configs could not be parsed");
var s = require('semver');
// MeshCentral doesn't adhere to semantic versioning (due to the -<alpha_char> at the end of the version)
// Convert the letter to ASCII for a "true" version number comparison
var mcCurVer = parent.currentVer.replace(/-(.)$/, (m, p1) => { return ("000" + p1.charCodeAt(0)).substr(-3,3); });
var piCompatVer = newconf.meshCentralCompat.replace(/-(.)\b/g, (m, p1) => { return ("000" + p1.charCodeAt(0)).substr(-3,3); });
latestRet.push({
'id': curconf._id,
'installedVersion': curconf.version,
'version': newconf.version,
'hasUpdate': s.gt(newconf.version, curconf.version),
'meshCentralCompat': s.satisfies(mcCurVer, piCompatVer),
'meshCentralCompat': checkMeshCentralVersion(parent.currentVer, newconf.meshCentralCompat),
'changelogUrl': curconf.changelogUrl,
'status': curconf.status
});
@ -377,7 +386,7 @@ module.exports.pluginHandler = function (parent) {
response.pipe(file);
file.on('finish', function () {
file.close(function () {
var yauzl = require("yauzl");
var yauzl = require('yauzl');
if (!obj.fs.existsSync(obj.pluginPath)) {
obj.fs.mkdirSync(obj.pluginPath);
}
@ -498,9 +507,10 @@ module.exports.pluginHandler = function (parent) {
obj.removePlugin = function (id, func) {
parent.db.getPlugin(id, function (err, docs) {
var plugin = docs[0];
var rimraf = require('rimraf');
var rimraf = null;
try { rimraf = require('rimraf'); } catch (ex) { }
let pluginPath = obj.parent.path.join(obj.pluginPath, plugin.shortName);
rimraf.sync(pluginPath);
if (rimraf) rimraf.sync(pluginPath);
parent.db.deletePlugin(id, func);
delete obj.plugins[plugin.shortName];
});