diff --git a/chrome_addon/background.js b/chrome_addon/background.js index ce4b1fc..d55be2d 100644 --- a/chrome_addon/background.js +++ b/chrome_addon/background.js @@ -162,7 +162,7 @@ async function ask_server(logins, domain, wdomain, mkey, sendResponse, options) { debug("New pbkdf2 level " + server_pbkdf2_level); pbkdf2_level = server_pbkdf2_level; - set_preference("pbkdf2_level", pbkdf2_level); + set_preference("pbkdf2_level", pbkdf2_level, null); ret = SERVER.RESTART_REQUEST; } break; @@ -247,12 +247,29 @@ function update_gpass_icon(iconId, tabId) browser.browserAction.setIcon(icon_infos); } -function is_gpass_enabled(uri) +async function is_gpass_enabled(uri) { - var domain = parseURI.parseUri(uri); - domain = domain["host"]; - debug("Is gpass enabled for " + domain + " ?"); - return get_preference("disable-" + domain); + return await get_preference("always_disabled").then( + function(always_disabled) { + if (always_disabled) + { + debug("Always disabled"); + return new Promise(function(resolve, reject) { + resolve(1); // null -> enabled, 1 -> disabled + }); + + } + else + { + debug("Check for enable"); + var domain = parseURI.parseUri(uri); + domain = domain["host"]; + debug("Is gpass enabled for " + domain + " ?"); + + return get_preference("disable-" + domain); + } + } + ); } function save_gpass_enable_config(uri, enable) @@ -269,7 +286,7 @@ function save_gpass_enable_config(uri, enable) else { debug("Disable gpass for " + domain); - set_preference(key, true); + set_preference(key, true, null); } } @@ -302,6 +319,26 @@ function _query_tabs_update_icon(tabs, iconId) } } +function update_enable(enabled, tab, saveConfig) +{ + if (enabled) + { + parameters = {type:"blockForms"}; + saveConfig = true;// Force save when enable website + debug("Now enabled"); + } + else + { + parameters = {type:"unblockForms"}; + debug("Now disabled"); + } + + if (saveConfig) + save_gpass_enable_config(tab.url, enabled); + update_gpass_icon((enabled)?GPASS_ICON.NORMAL:GPASS_ICON.DISABLED, tab.id); + browser.tabs.sendMessage(tab.id, parameters); +} + function gpass_switch_enable(tab) { debug("Switch enable"); @@ -311,20 +348,7 @@ function gpass_switch_enable(tab) enabled = (key_present == null); // Do switch enabled = !enabled; - if (enabled) - { - parameters = {type:"blockForms"}; - debug("Now enabled"); - } - else - { - parameters = {type:"unblockForms"}; - debug("Now disabled"); - } - - save_gpass_enable_config(tab.url, enabled); - update_gpass_icon((enabled)?GPASS_ICON.ENABLED:GPASS_ICON.DISABLED, tab.id); - browser.tabs.sendMessage(tab.id, parameters); + update_enable(enabled, tab, true); }); } @@ -381,7 +405,8 @@ function extension_load() if (!browser.menus && browser.contextMenus) browser.menus = browser.contextMenus; - + + /* Settings */ browser.menus.create({ id: 'settings', title: 'gPass Settings', @@ -394,12 +419,26 @@ function extension_load() else title = 'Disable or enable gPass for this website'; + /* Enable/disable */ browser.menus.create({ id: 'switch_enable', title: title, contexts: ['browser_action'] }); + /* Not supported by Chrome */ + if (browser.menus.onShown) + title = 'Disable gPass for ALL websites'; + else + title = 'Disable or enable gPass for ALL websites'; + + /* Always enable/disable */ + browser.menus.create({ + id: 'always_disable', + title: title, + contexts: ['browser_action'] + }); + browser.menus.onClicked.addListener( function(info, tab) { switch (info.menuItemId) { @@ -407,6 +446,26 @@ function extension_load() browser.runtime.openOptionsPage(); break; + case 'always_disable': + get_preference('always_disabled').then( + function (always_disabled) { + debug('Change always disable'); + debug(always_disabled); + always_disabled = !always_disabled; + + set_preference('always_disabled', always_disabled, + function(error) + { + browser.tabs.query({}, + function cb(tabs) { + for (i=0; iAccount URL URL of your gPass account
WARNING It should be a valid HTTPS URL because navigator doesn't like mixed content (HTTPS/HTTP). If not, requests will silentely failed. If you have an auto-signed certificate, add it to trusted ones.

- PBKDF2 level Number of iterations used to derivate master key
+ PBKDF2 level Number of iterations used to derivate master key
+
+
+ Always disabled Disable gPass for all websites. You can still use popup, but no hook is attached to login forms


diff --git a/chrome_addon/options.js b/chrome_addon/options.js index 1c7122a..b1317f6 100644 --- a/chrome_addon/options.js +++ b/chrome_addon/options.js @@ -1,32 +1,42 @@ var default_preferences = {"pbkdf2_level": 1000, - "account_url": "https://gpass-demo.soutade.fr/demo" + "account_url": "https://gpass-demo.soutade.fr/demo", + "always_disabled":false }; function save() { var account_url = document.getElementById('account_url').value; - var pbkdf2 = document.getElementById('pbkdf2').value; + var pbkdf2_level = document.getElementById('pbkdf2_level').value; + var always_disabled = document.getElementById('always_disabled').checked; chrome.storage.local.set({ 'account_url': account_url, - 'pbkdf2': pbkdf2, + 'pbkdf2_level': pbkdf2_level, + 'always_disabled': always_disabled, }, function() { alert('Saved'); }); } +function restoreOption(preferences, pref) +{ + var res; + + if (!preferences.hasOwnProperty(pref)) + res = default_preferences[pref]; + else + res = preferences[pref]; + + var element = document.getElementById(pref); + if (element.type == 'checkbox') + element.checked = res; + else + element.value = res; +} + chrome.storage.local.get(null, function(prefs) { - if (!prefs.hasOwnProperty("account_url")) - account_url = default_preferences['account_url']; - else - account_url = prefs['account_url']; - - if (!prefs.hasOwnProperty("pbkdf2_level")) - pbkdf2 = default_preferences['pbkdf2_level']; - else - pbkdf2 = prefs['pbkdf2_level']; - - document.getElementById('account_url').value = account_url; - document.getElementById('pbkdf2').value = pbkdf2; + restoreOption(prefs, 'account_url'); + restoreOption(prefs, 'pbkdf2_level'); + restoreOption(prefs, 'always_disabled'); }); document.getElementById('save').addEventListener("click", save);