mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-27 17:16:14 +01:00
closes #2578
This commit is contained in:
@@ -34,8 +34,8 @@ var fs = require('fs'),
|
|||||||
|
|
||||||
Plugins.initialized = false;
|
Plugins.initialized = false;
|
||||||
|
|
||||||
Plugins.requireLibrary = function(pluginData, libraryPath) {
|
Plugins.requireLibrary = function(pluginID, libraryPath) {
|
||||||
Plugins.libraries[pluginData.id] = require(libraryPath);
|
Plugins.libraries[pluginID] = require(libraryPath);
|
||||||
Plugins.libraryPaths.push(libraryPath);
|
Plugins.libraryPaths.push(libraryPath);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -287,45 +287,32 @@ var fs = require('fs'),
|
|||||||
|
|
||||||
async.waterfall([
|
async.waterfall([
|
||||||
function(next) {
|
function(next) {
|
||||||
async.parallel({
|
Plugins.loadPluginInfo(file, next);
|
||||||
packageJSON: function(next) {
|
|
||||||
fs.readFile(path.join(file, 'package.json'), next);
|
|
||||||
},
|
|
||||||
pluginJSON: function(next) {
|
|
||||||
fs.readFile(path.join(file, 'plugin.json'), next);
|
|
||||||
}
|
|
||||||
}, next);
|
|
||||||
},
|
},
|
||||||
function(results, next) {
|
function(pluginData, next) {
|
||||||
var packageName = path.basename(file),
|
var packageName = path.basename(file);
|
||||||
packageInfo, pluginInfo;
|
|
||||||
|
|
||||||
try {
|
if (!pluginData) {
|
||||||
packageInfo = JSON.parse(results.packageJSON);
|
|
||||||
pluginInfo = JSON.parse(results.pluginJSON);
|
|
||||||
} catch (err) {
|
|
||||||
winston.warn("Plugin `" + packageName + "` is corrupted or invalid. Please check either package.json or plugin.json for errors.");
|
winston.warn("Plugin `" + packageName + "` is corrupted or invalid. Please check either package.json or plugin.json for errors.");
|
||||||
return next(null, {
|
return next(null, {
|
||||||
id: packageName,
|
id: packageName,
|
||||||
installed: true,
|
installed: true,
|
||||||
error: true,
|
error: true,
|
||||||
active: null
|
active: null
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Plugins.isActive(packageInfo.name, function(err, active) {
|
Plugins.isActive(pluginData.name, function(err, active) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next(new Error('no-active-state'));
|
return next(new Error('no-active-state'));
|
||||||
}
|
}
|
||||||
|
|
||||||
delete pluginInfo.hooks;
|
delete pluginData.hooks;
|
||||||
delete pluginInfo.library;
|
delete pluginData.library;
|
||||||
pluginInfo.active = active;
|
pluginData.active = active;
|
||||||
pluginInfo.installed = true;
|
pluginData.installed = true;
|
||||||
pluginInfo.error = false;
|
pluginData.error = false;
|
||||||
pluginInfo.version = packageInfo.version;
|
next(null, pluginData);
|
||||||
|
|
||||||
next(null, pluginInfo);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
], function(err, config) {
|
], function(err, config) {
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ module.exports = function(Plugins) {
|
|||||||
|
|
||||||
if (typeof data.method === 'string' && data.method.length > 0) {
|
if (typeof data.method === 'string' && data.method.length > 0) {
|
||||||
method = data.method.split('.').reduce(function(memo, prop) {
|
method = data.method.split('.').reduce(function(memo, prop) {
|
||||||
if (memo !== null && memo[prop]) {
|
if (memo && memo[prop]) {
|
||||||
return memo[prop];
|
return memo[prop];
|
||||||
} else {
|
} else {
|
||||||
// Couldn't find method by path, aborting
|
// Couldn't find method by path, aborting
|
||||||
|
|||||||
@@ -12,20 +12,13 @@ var fs = require('fs'),
|
|||||||
module.exports = function(Plugins) {
|
module.exports = function(Plugins) {
|
||||||
|
|
||||||
Plugins.loadPlugin = function(pluginPath, callback) {
|
Plugins.loadPlugin = function(pluginPath, callback) {
|
||||||
fs.readFile(path.join(pluginPath, 'plugin.json'), function(err, data) {
|
Plugins.loadPluginInfo(pluginPath, function(err, pluginData) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(pluginPath.match('nodebb-theme') ? null : err);
|
return callback(pluginPath.match('nodebb-theme') ? null : err);
|
||||||
}
|
}
|
||||||
|
|
||||||
var pluginData, staticDir;
|
var staticDir;
|
||||||
|
if (!pluginData) {
|
||||||
try {
|
|
||||||
pluginData = JSON.parse(data);
|
|
||||||
} catch (err) {
|
|
||||||
var pluginDir = pluginPath.split(path.sep);
|
|
||||||
pluginDir = pluginDir[pluginDir.length -1];
|
|
||||||
|
|
||||||
winston.error('[plugins/' + pluginDir + '] Plugin not loaded - please check its plugin.json for errors');
|
|
||||||
return callback();
|
return callback();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,7 +81,7 @@ module.exports = function(Plugins) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!Plugins.libraries[pluginData.id]) {
|
if (!Plugins.libraries[pluginData.id]) {
|
||||||
Plugins.requireLibrary(pluginData, libraryPath);
|
Plugins.requireLibrary(pluginData.id, libraryPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Array.isArray(pluginData.hooks) && pluginData.hooks.length > 0) {
|
if (Array.isArray(pluginData.hooks) && pluginData.hooks.length > 0) {
|
||||||
@@ -198,7 +191,35 @@ module.exports = function(Plugins) {
|
|||||||
callback();
|
callback();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Plugins.loadPluginInfo = function(pluginPath, callback) {
|
||||||
|
async.parallel({
|
||||||
|
package: function(next) {
|
||||||
|
fs.readFile(path.join(pluginPath, 'package.json'), next);
|
||||||
|
},
|
||||||
|
plugin: function(next) {
|
||||||
|
fs.readFile(path.join(pluginPath, 'plugin.json'), next);
|
||||||
|
}
|
||||||
|
}, function(err, results) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
var pluginData = JSON.parse(results.plugin);
|
||||||
|
var packageData = JSON.parse(results.package);
|
||||||
|
|
||||||
|
var obj = utils.merge(pluginData, packageData);
|
||||||
|
obj.id = packageData.name;
|
||||||
|
callback(null, obj);
|
||||||
|
} catch(err) {
|
||||||
|
var pluginDir = pluginPath.split(path.sep);
|
||||||
|
pluginDir = pluginDir[pluginDir.length -1];
|
||||||
|
|
||||||
|
winston.error('[plugins/' + pluginDir + '] Error in plugin.json/package.json! ' + err.message);
|
||||||
|
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
};
|
};
|
||||||
Reference in New Issue
Block a user