From 5e6079b347aeae68d6a83ee0f93e2746766d72c4 Mon Sep 17 00:00:00 2001 From: colin Date: Sat, 5 Nov 2022 23:32:26 -0700 Subject: [PATCH] fix `enableOTP` handling to match docs: prioritize store, then extension config --- src/background.js | 9 ++++++--- src/helpers.js | 13 +++++++++++-- src/popup/detailsInterface.js | 2 +- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/background.js b/src/background.js index fda8712..99bbfa5 100644 --- a/src/background.js +++ b/src/background.js @@ -724,7 +724,7 @@ async function handleMessage(settings, message, sendResponse) { } break; case "copyOTP": - if (settings.enableOTP) { + if (helpers.getSetting("enableOTP", message.login, settings, helpers.SettingScope.Store)) { try { if (!message.login.fields.otp) { throw new Exception("No OTP seed available"); @@ -796,8 +796,8 @@ async function handleMessage(settings, message, sendResponse) { // copy OTP token after fill if ( - settings.enableOTP && typeof message.login !== "undefined" && + helpers.getSetting("enableOTP", message.login, settings, helpers.SettingScope.Store) && message.login.fields.hasOwnProperty("otp") ) { copyToClipboard(helpers.makeTOTP(message.login.fields.otp.params)); @@ -963,7 +963,10 @@ async function parseFields(settings, login) { } // preprocess otp - if (settings.enableOTP && login.fields.hasOwnProperty("otp")) { + if ( + helpers.getSetting("enableOTP", login, settings, helpers.SettingScope.Store) && + login.fields.hasOwnProperty("otp") + ) { if (login.fields.otp.match(/^otpauth:\/\/.+/i)) { // attempt to parse otp data as URI try { diff --git a/src/helpers.js b/src/helpers.js index 9e92dd3..fb287f4 100644 --- a/src/helpers.js +++ b/src/helpers.js @@ -8,12 +8,20 @@ const hash = require("hash.js"); const Authenticator = require("otplib").authenticator.Authenticator; const BrowserpassURL = require("@browserpass/url"); +const SettingScope = { + // query a setting first from the login, then the store, then globally + Login: "login", + // query a setting first from the store, then globally + Store: "store", +}; + module.exports = { prepareLogins, filterSortLogins, getSetting, ignoreFiles, makeTOTP, + SettingScope, }; //----------------------------------- Function definitions ----------------------------------// @@ -24,10 +32,11 @@ module.exports = { * @param string key Setting key * @param object login Login object * @param object settings Settings object + * @param string scope SettingScope value to specify where to search for the setting (optional) * @return object Setting value */ -function getSetting(key, login, settings) { - if (typeof login.settings[key] !== "undefined") { +function getSetting(key, login, settings, scope = SettingScope.Login) { + if (scope === SettingScope.Login && typeof login.settings[key] !== "undefined") { return login.settings[key]; } if (typeof settings.stores[login.store.id].settings[key] !== "undefined") { diff --git a/src/popup/detailsInterface.js b/src/popup/detailsInterface.js index 7c0a450..c27b1bd 100644 --- a/src/popup/detailsInterface.js +++ b/src/popup/detailsInterface.js @@ -103,7 +103,7 @@ function view(ctl, params) { ]), (() => { if ( - this.settings.enableOTP && + helpers.getSetting("enableOTP", login, this.settings, helpers.SettingScope.Store) && login.fields.otp && login.fields.otp.params.type === "totp" ) {