Merge pull request #1999 from s1341/fix_json_is_bad

strip off trailing commas
This commit is contained in:
John McLear 2013-11-26 05:16:42 -08:00
commit 1fa2b32854
3 changed files with 11 additions and 8 deletions

View file

@ -1,5 +1,5 @@
/** /**
* The Settings Modul reads the settings out of settings.json and provides * The Settings Modul reads the settings out of settings.json and provides
* this information to the other modules * this information to the other modules
*/ */
@ -24,7 +24,7 @@ var os = require("os");
var path = require('path'); var path = require('path');
var argv = require('./Cli').argv; var argv = require('./Cli').argv;
var npm = require("npm/lib/npm.js"); var npm = require("npm/lib/npm.js");
var vm = require('vm'); var jsonminify = require("jsonminify");
var log4js = require("log4js"); var log4js = require("log4js");
var randomString = require('ep_etherpad-lite/static/js/pad_utils').randomString; var randomString = require('ep_etherpad-lite/static/js/pad_utils').randomString;
@ -48,7 +48,7 @@ exports.faviconTimeslider = "../../" + exports.favicon;
* The IP ep-lite should listen to * The IP ep-lite should listen to
*/ */
exports.ip = "0.0.0.0"; exports.ip = "0.0.0.0";
/** /**
* The Port ep-lite should listen to * The Port ep-lite should listen to
*/ */
@ -166,8 +166,8 @@ exports.reloadSettings = function reloadSettings() {
var settings; var settings;
try { try {
if(settingsStr) { if(settingsStr) {
settings = vm.runInContext('exports = '+settingsStr, vm.createContext(), "settings.json"); settingsStr = jsonminify(settingsStr).replace(",]","]").replace(",}","}");
settings = JSON.parse(JSON.stringify(settings)); // fix objects having constructors of other vm.context settings = JSON.parse(settingsStr);
} }
}catch(e){ }catch(e){
console.error('There was an error processing your settings.json file: '+e.message); console.error('There was an error processing your settings.json file: '+e.message);
@ -195,7 +195,7 @@ exports.reloadSettings = function reloadSettings() {
console.warn("Unknown Setting: '" + i + "'. This setting doesn't exist or it was removed"); 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
log4js.replaceConsole(); log4js.replaceConsole();

View file

@ -5,7 +5,7 @@
"keywords" : ["etherpad", "realtime", "collaborative", "editor"], "keywords" : ["etherpad", "realtime", "collaborative", "editor"],
"author" : "Peter 'Pita' Martischka <petermartischka@googlemail.com> - Primary Technology Ltd", "author" : "Peter 'Pita' Martischka <petermartischka@googlemail.com> - Primary Technology Ltd",
"contributors" : [ "contributors" : [
{ "name": "John McLear" }, { "name": "John McLear" },
{ "name": "Hans Pinckaers" }, { "name": "Hans Pinckaers" },
{ "name": "Robin Buse" }, { "name": "Robin Buse" },
{ "name": "Marcel Klehr" } { "name": "Marcel Klehr" }
@ -39,6 +39,7 @@
"languages4translatewiki" : "0.1.3", "languages4translatewiki" : "0.1.3",
"swagger-node-express" : "1.2.3", "swagger-node-express" : "1.2.3",
"channels" : "0.0.x", "channels" : "0.0.x",
"jsonminify" : "0.2.2",
"measured" : "0.1.3" "measured" : "0.1.3"
}, },
"bin": { "etherpad-lite": "./node/server.js" }, "bin": { "etherpad-lite": "./node/server.js" },
@ -47,7 +48,7 @@
}, },
"engines" : { "node" : ">=0.6.3", "engines" : { "node" : ">=0.6.3",
"npm" : ">=1.0" "npm" : ">=1.0"
}, },
"repository" : { "type" : "git", "repository" : { "type" : "git",
"url" : "http://github.com/ether/etherpad-lite.git" "url" : "http://github.com/ether/etherpad-lite.git"
}, },

View file

@ -55,6 +55,8 @@ $(document).ready(function () {
function isJSONClean(data){ function isJSONClean(data){
var cleanSettings = JSON.minify(data); var cleanSettings = JSON.minify(data);
// this is a bit naive. In theory some key/value might contain the sequences ',]' or ',}'
cleanSettings = cleanSettings.replace(",]","]").replace(",}","}");
try{ try{
var response = jQuery.parseJSON(cleanSettings); var response = jQuery.parseJSON(cleanSettings);
} }