diff --git a/app.js b/app.js index c6eba9ba56..f693ea1dea 100644 --- a/app.js +++ b/app.js @@ -57,6 +57,7 @@ if (!nconf.get('setup') && nconf.get('base_url')) { templates = require('./public/src/templates.js'), webserver = require('./src/webserver.js'), websockets = require('./src/websockets.js'), + plugins = require('./src/plugins'), admin = { 'categories': require('./src/admin/categories.js') }; diff --git a/src/plugins.js b/src/plugins.js new file mode 100644 index 0000000000..4b9d1aebff --- /dev/null +++ b/src/plugins.js @@ -0,0 +1,115 @@ +var fs = require('fs'), + path = require('path'), + RDB = require('./redis.js'), + plugins = { + libraries: [], + loaded_hooks: {}, + init: function() { + if (this.initialized) return; + if (global.env === 'development') console.log('Info: [plugins] Initializing plugins system'); + + var _self = this; + + // Read the list of activated plugins and require their libraries + async.waterfall([ + function(next) { + RDB.smembers('plugins:active', next); + }, + function(plugins, next) { + async.each(plugins, function(plugin) { + // TODO: Update this check to also check node_modules + var pluginPath = path.join(__dirname, '../plugins/', plugin); + fs.exists(pluginPath, function(exists) { + if (exists) { + fs.readFile(path.join(pluginPath, 'plugin.json'), function(err, data) { + if (err) return next(err); + + var pluginData = JSON.parse(data); + _self.libraries[pluginData.id] = require(path.join(pluginPath, pluginData.library)); + if (pluginData.hooks) { + for(var x=0,numHooks=pluginData.hooks.length;x