From 6cde2b83e8f35d4c402783c4727672176dad414a Mon Sep 17 00:00:00 2001 From: varjolintu Date: Wed, 15 Jan 2020 22:36:22 +0200 Subject: [PATCH] Add support for Microsoft Edge browser --- README.md | 2 +- src/browser/BrowserOptionDialog.cpp | 11 ++++++++++- src/browser/BrowserOptionDialog.ui | 10 ++++++++++ src/browser/BrowserSettings.cpp | 11 +++++++++++ src/browser/BrowserSettings.h | 2 ++ src/browser/HostInstaller.cpp | 13 ++++++++++--- src/browser/HostInstaller.h | 4 +++- 7 files changed, 47 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index a8ca4c4d4..5fad0cc83 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ so please check out your distribution's package list to see if KeePassXC is avai - Using website favicons as entry icons - Merging of databases - Automatic reload when the database changed on disk -- Browser integration with KeePassXC-Browser using [native messaging](https://developer.chrome.com/extensions/nativeMessaging) for [Mozilla Firefox](https://addons.mozilla.org/en-US/firefox/addon/keepassxc-browser/) and [Google Chrome, Chromium, Vivaldi, or Brave](https://chrome.google.com/webstore/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk) +- Browser integration with KeePassXC-Browser using [native messaging](https://developer.chrome.com/extensions/nativeMessaging) for [Mozilla Firefox](https://addons.mozilla.org/en-US/firefox/addon/keepassxc-browser/) and [Google Chrome, Chromium, Vivaldi, or Brave](https://chrome.google.com/webstore/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk) and [Microsoft Edge](https://microsoftedge.microsoft.com/addons/detail/pdffhmdngciaglkoonimfcmckehcpafo) - Synchronize passwords using KeeShare. See [Using Sharing](./docs/QUICKSTART.md#using-sharing) for more details. - Many bug fixes diff --git a/src/browser/BrowserOptionDialog.cpp b/src/browser/BrowserOptionDialog.cpp index 1af989e00..f12c42bb7 100644 --- a/src/browser/BrowserOptionDialog.cpp +++ b/src/browser/BrowserOptionDialog.cpp @@ -44,10 +44,11 @@ BrowserOptionDialog::BrowserOptionDialog(QWidget* parent) m_ui->extensionLabel->setOpenExternalLinks(true); m_ui->extensionLabel->setText( - tr("KeePassXC-Browser is needed for the browser integration to work.
Download it for %1 and %2. %3") + tr("KeePassXC-Browser is needed for the browser integration to work.
Download it for %1 and %2 and %3. %4") .arg("Firefox", "" "Google Chrome / Chromium / Vivaldi / Brave", + "Microsoft Edge", snapInstructions)); // clang-format on @@ -123,6 +124,7 @@ void BrowserOptionDialog::loadSettings() m_ui->chromeSupport->setChecked(settings->chromeSupport()); m_ui->chromiumSupport->setChecked(settings->chromiumSupport()); m_ui->firefoxSupport->setChecked(settings->firefoxSupport()); + m_ui->edgeSupport->setChecked(settings->edgeSupport()); #ifndef Q_OS_WIN m_ui->braveSupport->setChecked(settings->braveSupport()); m_ui->vivaldiSupport->setChecked(settings->vivaldiSupport()); @@ -132,6 +134,12 @@ void BrowserOptionDialog::loadSettings() m_ui->snapWarningLabel->setVisible(false); #endif +// TODO: Enable when Linux version is released +#ifdef Q_OS_LINUX + m_ui->edgeSupport->setChecked(false); + m_ui->edgeSupport->setEnabled(false); +#endif + #if defined(KEEPASSXC_DIST_APPIMAGE) m_ui->supportBrowserProxy->setChecked(true); m_ui->supportBrowserProxy->setEnabled(false); @@ -194,6 +202,7 @@ void BrowserOptionDialog::saveSettings() settings->setChromeSupport(m_ui->chromeSupport->isChecked()); settings->setChromiumSupport(m_ui->chromiumSupport->isChecked()); settings->setFirefoxSupport(m_ui->firefoxSupport->isChecked()); + settings->setEdgeSupport(m_ui->edgeSupport->isChecked()); #ifndef Q_OS_WIN settings->setBraveSupport(m_ui->braveSupport->isChecked()); settings->setVivaldiSupport(m_ui->vivaldiSupport->isChecked()); diff --git a/src/browser/BrowserOptionDialog.ui b/src/browser/BrowserOptionDialog.ui index 84fc5bdbf..1c00da148 100755 --- a/src/browser/BrowserOptionDialog.ui +++ b/src/browser/BrowserOptionDialog.ui @@ -167,6 +167,16 @@ + + + + &Edge + + + false + + + diff --git a/src/browser/BrowserSettings.cpp b/src/browser/BrowserSettings.cpp index 046734268..9cb4e0735 100644 --- a/src/browser/BrowserSettings.cpp +++ b/src/browser/BrowserSettings.cpp @@ -280,6 +280,17 @@ void BrowserSettings::setTorBrowserSupport(bool enabled) HostInstaller::SupportedBrowsers::TOR_BROWSER, enabled, supportBrowserProxy(), customProxyLocation()); } +bool BrowserSettings::edgeSupport() +{ + return m_hostInstaller.checkIfInstalled(HostInstaller::SupportedBrowsers::EDGE); +} + +void BrowserSettings::setEdgeSupport(bool enabled) +{ + m_hostInstaller.installBrowser( + HostInstaller::SupportedBrowsers::EDGE, enabled, supportBrowserProxy(), customProxyLocation()); +} + bool BrowserSettings::passwordUseNumbers() { return config()->get("generator/Numbers", PasswordGenerator::DefaultNumbers).toBool(); diff --git a/src/browser/BrowserSettings.h b/src/browser/BrowserSettings.h index 0fa2359ee..395455cbc 100644 --- a/src/browser/BrowserSettings.h +++ b/src/browser/BrowserSettings.h @@ -80,6 +80,8 @@ public: void setBraveSupport(bool enabled); bool torBrowserSupport(); void setTorBrowserSupport(bool enabled); + bool edgeSupport(); + void setEdgeSupport(bool enabled); bool passwordUseNumbers(); void setPasswordUseNumbers(bool useNumbers); diff --git a/src/browser/HostInstaller.cpp b/src/browser/HostInstaller.cpp index 4928ba64e..f4ffae3b7 100644 --- a/src/browser/HostInstaller.cpp +++ b/src/browser/HostInstaller.cpp @@ -31,7 +31,7 @@ HostInstaller::HostInstaller() : HOST_NAME("org.keepassxc.keepassxc_browser") , ALLOWED_EXTENSIONS(QStringList() << "keepassxc-browser@keepassxc.org") - , ALLOWED_ORIGINS(QStringList() << "chrome-extension://iopaggbpplllidnfmcghoonnokmjoicf/" + , ALLOWED_ORIGINS(QStringList() << "chrome-extension://pdffhmdngciaglkoonimfcmckehcpafo/" << "chrome-extension://oboonakemofpalcgghocfoadofidjkkk/") #if defined(Q_OS_MACOS) , TARGET_DIR_CHROME("/Library/Application Support/Google/Chrome/NativeMessagingHosts") @@ -40,6 +40,7 @@ HostInstaller::HostInstaller() , TARGET_DIR_VIVALDI("/Library/Application Support/Vivaldi/NativeMessagingHosts") , TARGET_DIR_TOR_BROWSER("/Library/Application Support/TorBrowser-Data/Browser/Mozilla/NativeMessagingHosts") , TARGET_DIR_BRAVE("/Library/Application Support/BraveSoftware/Brave-Browser/NativeMessagingHosts") + , TARGET_DIR_EDGE("/Library/Application Support/Microsoft Edge/NativeMessagingHosts") #elif defined(Q_OS_WIN) // clang-format off , TARGET_DIR_CHROME("HKEY_CURRENT_USER\\Software\\Google\\Chrome\\NativeMessagingHosts\\org.keepassxc.keepassxc_browser") @@ -49,6 +50,8 @@ HostInstaller::HostInstaller() , TARGET_DIR_VIVALDI(TARGET_DIR_CHROME) , TARGET_DIR_TOR_BROWSER(TARGET_DIR_FIREFOX) , TARGET_DIR_BRAVE(TARGET_DIR_CHROME) + , TARGET_DIR_EDGE( + "HKEY_CURRENT_USER\\Software\\Microsoft\\Edge\\NativeMessagingHosts\\org.keepassxc.keepassxc_browser") #else , TARGET_DIR_CHROME("/.config/google-chrome/NativeMessagingHosts") , TARGET_DIR_CHROMIUM("/.config/chromium/NativeMessagingHosts") @@ -56,6 +59,7 @@ HostInstaller::HostInstaller() , TARGET_DIR_VIVALDI("/.config/vivaldi/NativeMessagingHosts") , TARGET_DIR_TOR_BROWSER("/.tor-browser/app/Browser/TorBrowser/Data/Browser/.mozilla/native-messaging-hosts") , TARGET_DIR_BRAVE("/.config/BraveSoftware/Brave-Browser/NativeMessagingHosts") + , TARGET_DIR_EDGE("/.config/microsoftedge/NativeMessagingHosts") #endif { } @@ -139,8 +143,7 @@ void HostInstaller::installBrowser(SupportedBrowsers browser, */ void HostInstaller::updateBinaryPaths(const bool& proxy, const QString& location) { - // Where 6 is the number of entries in the SupportedBrowsers enum declared in HostInstaller.h - for (int i = 0; i < 6; ++i) { + for (int i = 0; i <= SupportedBrowsers::EDGE; ++i) { if (checkIfInstalled(static_cast(i))) { installBrowser(static_cast(i), true, proxy, location); } @@ -168,6 +171,8 @@ QString HostInstaller::getTargetPath(SupportedBrowsers browser) const return TARGET_DIR_TOR_BROWSER; case SupportedBrowsers::BRAVE: return TARGET_DIR_BRAVE; + case SupportedBrowsers::EDGE: + return TARGET_DIR_EDGE; default: return QString(); } @@ -195,6 +200,8 @@ QString HostInstaller::getBrowserName(SupportedBrowsers browser) const return "tor-browser"; case SupportedBrowsers::BRAVE: return "brave"; + case SupportedBrowsers::EDGE: + return "edge"; default: return QString(); } diff --git a/src/browser/HostInstaller.h b/src/browser/HostInstaller.h index 154fe21a9..2136d1c34 100644 --- a/src/browser/HostInstaller.h +++ b/src/browser/HostInstaller.h @@ -35,7 +35,8 @@ public: FIREFOX = 2, VIVALDI = 3, TOR_BROWSER = 4, - BRAVE = 5 + BRAVE = 5, + EDGE = 6 }; public: @@ -68,6 +69,7 @@ private: const QString TARGET_DIR_VIVALDI; const QString TARGET_DIR_TOR_BROWSER; const QString TARGET_DIR_BRAVE; + const QString TARGET_DIR_EDGE; }; #endif // HOSTINSTALLER_H