diff --git a/app/scripts/comp/extension/browser-extension-connector.js b/app/scripts/comp/extension/browser-extension-connector.js index a1413e5b..66b49380 100644 --- a/app/scripts/comp/extension/browser-extension-connector.js +++ b/app/scripts/comp/extension/browser-extension-connector.js @@ -7,11 +7,8 @@ import { deleteProtocolImplConnection } from './protocol-impl'; import { RuntimeInfo } from 'const/runtime-info'; - -const logger = new Logger('browser-extension-connector'); -if (!localStorage.debugBrowserExtension) { - logger.level = Logger.Level.Info; -} +import { AppSettingsModel } from 'models/app-settings-model'; +import { Features } from 'util/features'; const WebConnectionInfo = { connectionId: 1, @@ -19,6 +16,20 @@ const WebConnectionInfo = { supportsNotifications: true }; +const SupportedExtensions = [ + { alias: 'KWC', name: 'KeeWeb Connect' }, + { alias: 'KPXC', name: 'KeePassXC-Browser' } +]; +const SupportedBrowsers = ['Chrome', 'Firefox', 'Edge', 'Other']; +if (Features.isMac) { + SupportedBrowsers.unshift('Safari'); +} + +const logger = new Logger('browser-extension-connector'); +if (!localStorage.debugBrowserExtension) { + logger.level = Logger.Level.Info; +} + const connections = new Map(); const pendingBrowserMessages = []; let processingBrowserMessage = false; @@ -79,6 +90,17 @@ const BrowserExtensionConnector = { window.removeEventListener('message', this.browserWindowMessage); }, + isEnabledOnDesktop() { + for (const browser of SupportedBrowsers) { + for (const ext of SupportedExtensions) { + if (AppSettingsModel[`extensionEnabled${ext.alias}${browser}`]) { + return true; + } + } + } + return false; + }, + async startDesktopAppListener() { const { ipcRenderer } = Launcher.electron(); ipcRenderer.invoke('browserExtensionConnectorStart', { @@ -198,4 +220,4 @@ const BrowserExtensionConnector = { } }; -export { BrowserExtensionConnector }; +export { BrowserExtensionConnector, SupportedExtensions, SupportedBrowsers }; diff --git a/app/scripts/const/links.js b/app/scripts/const/links.js index be45c5e4..f4d3efeb 100644 --- a/app/scripts/const/links.js +++ b/app/scripts/const/links.js @@ -23,14 +23,14 @@ const Links = { HaveIBeenPwnedPrivacy: 'https://haveibeenpwned.com/Passwords', ExtensionHelpForOtherBrowsers: 'https://github.com/keeweb/keeweb/wiki/Browser-AutoFill#other-browsers', - KeeWebConnectForChrome: 'https://TODO', - KeeWebConnectForFirefox: 'https://TODO', - KeeWebConnectForEdge: 'https://TODO', - KeeWebConnectForSafari: 'https://TODO', - KeePassXcBrowserForChrome: + KWCForChrome: 'https://TODO', + KWCForFirefox: 'https://TODO', + KWCForEdge: 'https://TODO', + KWCForSafari: 'https://TODO', + KPXCForChrome: 'https://chrome.google.com/webstore/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk', - KeePassXcBrowserForFirefox: 'https://addons.mozilla.org/firefox/addon/keepassxc-browser/', - KeePassXcBrowserForEdge: + KPXCForFirefox: 'https://addons.mozilla.org/firefox/addon/keepassxc-browser/', + KPXCForEdge: 'https://microsoftedge.microsoft.com/addons/detail/keepassxcbrowser/pdffhmdngciaglkoonimfcmckehcpafo' }; diff --git a/app/scripts/views/settings/settings-browser-view.js b/app/scripts/views/settings/settings-browser-view.js index b23b2bb5..f1ccfead 100644 --- a/app/scripts/views/settings/settings-browser-view.js +++ b/app/scripts/views/settings/settings-browser-view.js @@ -4,6 +4,7 @@ import { Features } from 'util/features'; import { Links } from 'const/links'; import { AppSettingsModel } from 'models/app-settings-model'; import { Locale } from 'util/locale'; +import { SupportedBrowsers, SupportedExtensions } from 'comp/extension/browser-extension-connector'; class SettingsBrowserView extends View { template = template; @@ -34,28 +35,25 @@ class SettingsBrowserView extends View { } getSettingsPerBrowser() { - const browsers = ['Chrome', 'Firefox', 'Edge', Locale.setBrowserOtherBrowsers]; - if (Features.isMac) { - browsers.unshift('Safari'); - } - return browsers.map((browser) => { - const extensions = [ - { alias: 'kwc', loc: 'KeeWebConnect' }, - { alias: 'kpxc', loc: 'KeePassXcBrowser' } - ]; - for (const ext of extensions) { - ext.supported = true; - ext.enabled = !!AppSettingsModel[`${ext.alias}EnabledFor${browser}`]; - ext.installUrl = Links[`${ext.loc}For${browser}`]; + return SupportedBrowsers.map((browser) => { + const browserName = browser === 'Other' ? Locale.setBrowserOtherBrowsers : browser; + const extensions = SupportedExtensions.map((ext) => { + ext = { + ...ext, + supported: true, + enabled: !!AppSettingsModel[`extensionEnabled${ext.alias}${browser}`], + installUrl: Links[`${ext.alias}For${browser}`] + }; if (!ext.installUrl) { - if (browser === Locale.setBrowserOtherBrowsers) { + if (browser === 'Other') { ext.helpUrl = Links.ExtensionHelpForOtherBrowsers; } else { ext.supported = false; } } - } - return { browser, extensions }; + return ext; + }); + return { browser, browserName, extensions }; }); } @@ -64,7 +62,7 @@ class SettingsBrowserView extends View { const browser = e.target.dataset.browser; const extension = e.target.dataset.extension; - const setting = `${extension}EnabledFor${browser}`; + const setting = `extensionEnabled${extension}${browser}`; if (setting) { AppSettingsModel[setting] = enabled; } else { diff --git a/app/templates/settings/settings-browser.hbs b/app/templates/settings/settings-browser.hbs index 00009b93..9a2ffbb1 100644 --- a/app/templates/settings/settings-browser.hbs +++ b/app/templates/settings/settings-browser.hbs @@ -21,7 +21,7 @@ {{#each settingsPerBrowser as |perBrowser|}} - {{perBrowser.browser}} + {{perBrowser.browserName}} {{#each perBrowser.extensions as |setting|}} {{#if setting.supported}}