v1.18.x
barisusakli 10 years ago
parent f5b758245f
commit b51127bd9c

@ -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,23 +287,12 @@ 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) { function(pluginData, next) {
fs.readFile(path.join(file, 'plugin.json'), next); var packageName = path.basename(file);
}
}, next);
},
function(results, next) {
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,
@ -313,19 +302,17 @@ var fs = require('fs'),
}); });
} }
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();
}
});
};
}; };
Loading…
Cancel
Save