From f6a54610a60abcb1d1be0469e307123105147eee Mon Sep 17 00:00:00 2001 From: Abe Jellinek <1770299+AbeJellinek@users.noreply.github.com> Date: Tue, 12 May 2026 13:48:04 -0400 Subject: [PATCH] Local API: Support write requests --- .../preferences/preferences_advanced.js | 18 + .../preferences/preferences_advanced.xhtml | 7 + chrome/content/zotero/xpcom/server/server.js | 20 +- .../zotero/xpcom/server/server_localAPI.js | 1561 ++++++++++++++++- chrome/locale/en-US/zotero/preferences.ftl | 2 + chrome/locale/en-US/zotero/zotero.ftl | 6 + test/tests/server_localAPITest.js | 1524 ++++++++++++++++ 7 files changed, 3082 insertions(+), 56 deletions(-) diff --git a/chrome/content/zotero/preferences/preferences_advanced.js b/chrome/content/zotero/preferences/preferences_advanced.js index 7c831f471c..c6ad5e008e 100644 --- a/chrome/content/zotero/preferences/preferences_advanced.js +++ b/chrome/content/zotero/preferences/preferences_advanced.js @@ -485,24 +485,42 @@ Zotero_Preferences.Advanced = { let checkbox = document.getElementById('zotero-prefpane-advanced-enable-local-api'); let availableMessage = document.getElementById('zotero-prefpane-advanced-local-api-available'); + let authorizationsSection = document.getElementById('zotero-prefpane-advanced-local-api-write-authorizations'); let serverDisabledSection = document.getElementById('zotero-prefpane-advanced-server-disabled'); if (!serverEnabled) { checkbox.disabled = true; availableMessage.hidden = true; + authorizationsSection.hidden = true; serverDisabledSection.hidden = false; return; } checkbox.disabled = false; availableMessage.hidden = !localAPIEnabled; + authorizationsSection.hidden = !localAPIEnabled; serverDisabledSection.hidden = true; document.l10n.setArgs(availableMessage, { url: `http://localhost:${Zotero.Server.port}/api/` }); + + if (localAPIEnabled) { + this.updateLocalAPIClearAuthorizationsButton(); + } }, + async updateLocalAPIClearAuthorizationsButton() { + let clearButton = document.getElementById('zotero-prefpane-advanced-local-api-clear'); + let count = await Zotero.Server.LocalAPI.getAuthorizationCount(); + clearButton.disabled = count === 0; + }, + + async clearLocalAPIAuthorizations() { + await Zotero.Server.LocalAPI.clearAuthorizations(); + await this.updateLocalAPIClearAuthorizationsButton(); + }, + enableServerForLocalAPI() { Zotero.Prefs.set('httpServer.enabled', true); Zotero.Utilities.Internal.quit(true); diff --git a/chrome/content/zotero/preferences/preferences_advanced.xhtml b/chrome/content/zotero/preferences/preferences_advanced.xhtml index cc0901cfcc..a701330838 100644 --- a/chrome/content/zotero/preferences/preferences_advanced.xhtml +++ b/chrome/content/zotero/preferences/preferences_advanced.xhtml @@ -49,6 +49,13 @@ > +