diff --git a/chrome/content/zotero/xpcom/schema.js b/chrome/content/zotero/xpcom/schema.js index 8649adec91..3978bae489 100644 --- a/chrome/content/zotero/xpcom/schema.js +++ b/chrome/content/zotero/xpcom/schema.js @@ -2337,6 +2337,7 @@ Zotero.Schema = new function(){ var styleUpdates = xmlhttp.responseXML.getElementsByTagName('style'); _showRepositoryMessage(xmlhttp.responseXML); + _checkRepositoryPrefs(xmlhttp.responseXML); if (!translatorUpdates.length && !styleUpdates.length){ await Zotero.DB.executeTransaction(async function (conn) { @@ -2491,6 +2492,59 @@ Zotero.Schema = new function(){ } + /** + * Check for remotely set preferences + * + * Format: + * + * + * + * + * + * + * + * Prefsets must be in increasing order + * + * @param {XMLDocument} responseXML - Response document from repository + */ + function _checkRepositoryPrefs(responseXML) { + const allowedPrefs = new Set([ + 'extensions.zotero.import.mendeleyUseOAuth' + ]); + try { + var prefsElem = responseXML.querySelector('prefs'); + if (!prefsElem) { + return; + } + var prefsets = prefsElem.querySelectorAll('prefset'); + for (let prefset of prefsets) { + let version = parseInt(prefset.getAttribute('version')); + let pref = prefset.querySelector('pref'); + if (!pref) { + Zotero.logError(' not found within '); + continue; + } + if (version <= Zotero.Prefs.get('prefVersion.remote')) { + break; + } + let name = pref.getAttribute('name'); + if (!allowedPrefs.has(name)) { + Zotero.logError(`${name} cannot be set remotely`); + continue; + } + let value = pref.getAttribute('value'); + if (value == "true") value = true; + if (value == "false") value = false; + Zotero.Prefs.set(name, value, true); + Zotero.Prefs.set('prefVersion.remote', version); + } + } + catch (e) { + Zotero.logError(e); + } + } + + /** * Set the interval between repository queries *