Add mechanism for setting preferences remotely

Limited to a hard-coded list

Initially limited to `extensions.zotero.import.mendeleyUseOAuth`,
to switch the Mendeley importer from direct login to OAuth
This commit is contained in:
Dan Stillman 2022-12-23 00:14:42 -05:00
parent da392518ed
commit 4184dc18d2

View file

@ -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:
*
* <prefs>
* <prefset version="1">
* <pref name="extensions.zotero.import.mendeleyUseOAuth" value="true" />
* </prefset>
* </prefs>
*
* 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('<pref> not found within <prefset>');
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
*