diff --git a/red/api/editor/settings.js b/red/api/editor/settings.js index f76d4b659..8b45d7271 100644 --- a/red/api/editor/settings.js +++ b/red/api/editor/settings.js @@ -88,13 +88,19 @@ module.exports = { } var currentSettings = settings.getUserSettings(username)||{}; currentSettings = extend(currentSettings, req.body); - settings.setUserSettings(username, currentSettings).then(function() { - log.audit({event: "settings.update",username:username},req); - res.status(204).end(); - }).catch(function(err) { + try { + settings.setUserSettings(username, currentSettings).then(function() { + log.audit({event: "settings.update",username:username},req); + res.status(204).end(); + }).catch(function(err) { + log.audit({event: "settings.update",username:username,error:err.code||"unexpected_error",message:err.toString()},req); + res.status(400).json({error:err.code||"unexpected_error", message:err.toString()}); + }); + } catch(err) { + log.warn(log._("settings.user-not-available",{message:log._("settings.not-available")})); log.audit({event: "settings.update",username:username,error:err.code||"unexpected_error",message:err.toString()},req); res.status(400).json({error:err.code||"unexpected_error", message:err.toString()}); - }); + } } } diff --git a/red/runtime/locales/en-US/runtime.json b/red/runtime/locales/en-US/runtime.json index eefc913b9..2b04a26b7 100644 --- a/red/runtime/locales/en-US/runtime.json +++ b/red/runtime/locales/en-US/runtime.json @@ -75,6 +75,7 @@ }, "settings": { + "user-not-available": "Cannot save user settings: __message__", "not-available": "Settings not available", "property-read-only": "Property '__prop__' is read-only" }, diff --git a/red/runtime/settings.js b/red/runtime/settings.js index bc51f98b8..1addf7c47 100644 --- a/red/runtime/settings.js +++ b/red/runtime/settings.js @@ -173,6 +173,9 @@ var persistentSettings = { return clone(userSettings[username]); }, setUserSettings: function(username,settings) { + if (globalSettings === null) { + throw new Error(log._("settings.not-available")); + } var current = userSettings[username]; userSettings[username] = settings; try {