Merge pull request #2851 from ether/plugin-hook-for-settings-earlier

Plugin hook for settings earlier
pull/2860/head
John McLear 2015-12-02 11:55:09 +00:00
commit 01335bcf8d
4 changed files with 51 additions and 11 deletions

1
.gitignore vendored
View File

@ -17,3 +17,4 @@ npm-debug.log
*.crt *.crt
*.key *.key
bin/etherpad-1.deb bin/etherpad-1.deb
credentials.json

View File

@ -2,6 +2,9 @@
This file must be valid JSON. But comments are allowed This file must be valid JSON. But comments are allowed
Please edit settings.json, not settings.json.template Please edit settings.json, not settings.json.template
To still commit settings without credentials you can
store any credential settings in credentials.json
*/ */
{ {
// Name your instance! // Name your instance!

View File

@ -74,16 +74,6 @@ async.waterfall([
// Call loadSettings hook // Call loadSettings hook
hooks.aCallAll("loadSettings", { settings: settings }); hooks.aCallAll("loadSettings", { settings: settings });
// Call applySettings hook
hooks.aCallAll("applySettings", settings, function(err, newSettings){
if(!newSettings) return;
newSettings.forEach(function (settingsBlob){
for (var setting in settingsBlob){
settings[setting] = settingsBlob[setting];
};
});
});
callback();
}, },
//initalize the http server //initalize the http server

View File

@ -255,13 +255,20 @@ exports.reloadSettings = function reloadSettings() {
// Discover where the settings file lives // Discover where the settings file lives
var settingsFilename = argv.settings || "settings.json"; var settingsFilename = argv.settings || "settings.json";
// Discover if a credential file exists
var credentialsFilename = argv.credentials || "credentials.json";
if (path.resolve(settingsFilename)===settingsFilename) { if (path.resolve(settingsFilename)===settingsFilename) {
settingsFilename = path.resolve(settingsFilename); settingsFilename = path.resolve(settingsFilename);
} else { } else {
settingsFilename = path.resolve(path.join(exports.root, settingsFilename)); settingsFilename = path.resolve(path.join(exports.root, settingsFilename));
} }
var settingsStr; if (path.resolve(credentialsFilename)===credentialsFilename) {
credentialsFilename = path.resolve(credentialsFilename);
}
var settingsStr, credentialsStr;
try{ try{
//read the settings sync //read the settings sync
settingsStr = fs.readFileSync(settingsFilename).toString(); settingsStr = fs.readFileSync(settingsFilename).toString();
@ -269,8 +276,16 @@ exports.reloadSettings = function reloadSettings() {
console.warn('No settings file found. Continuing using defaults!'); console.warn('No settings file found. Continuing using defaults!');
} }
try{
//read the credentials sync
credentialsStr = fs.readFileSync(credentialsFilename).toString();
} catch(e){
// Doesn't matter if no credentials file found..
}
// try to parse the settings // try to parse the settings
var settings; var settings;
var credentials;
try { try {
if(settingsStr) { if(settingsStr) {
settingsStr = jsonminify(settingsStr).replace(",]","]").replace(",}","}"); settingsStr = jsonminify(settingsStr).replace(",]","]").replace(",}","}");
@ -281,6 +296,11 @@ exports.reloadSettings = function reloadSettings() {
process.exit(1); process.exit(1);
} }
if(credentialsStr) {
credentialsStr = jsonminify(credentialsStr).replace(",]","]").replace(",}","}");
credentials = JSON.parse(credentialsStr);
}
//loop trough the settings //loop trough the settings
for(var i in settings) for(var i in settings)
{ {
@ -307,6 +327,32 @@ exports.reloadSettings = function reloadSettings() {
} }
} }
//loop trough the settings
for(var i in credentials)
{
//test if the setting start with a low character
if(i.charAt(0).search("[a-z]") !== 0)
{
console.warn("Settings should start with a low character: '" + i + "'");
}
//we know this setting, so we overwrite it
//or it's a settings hash, specific to a plugin
if(exports[i] !== undefined || i.indexOf('ep_')==0)
{
if (_.isObject(credentials[i]) && !_.isArray(credentials[i])) {
exports[i] = _.defaults(credentials[i], exports[i]);
} else {
exports[i] = credentials[i];
}
}
//this setting is unkown, output a warning and throw it away
else
{
console.warn("Unknown Setting: '" + i + "'. This setting doesn't exist or it was removed");
}
}
log4js.configure(exports.logconfig);//Configure the logging appenders log4js.configure(exports.logconfig);//Configure the logging appenders
log4js.setGlobalLogLevel(exports.loglevel);//set loglevel log4js.setGlobalLogLevel(exports.loglevel);//set loglevel
process.env['DEBUG'] = 'socket.io:' + exports.loglevel; // Used by SocketIO for Debug process.env['DEBUG'] = 'socket.io:' + exports.loglevel; // Used by SocketIO for Debug