diff --git a/share/translations/keepassxc_en.ts b/share/translations/keepassxc_en.ts index 91467de50..c48214215 100644 --- a/share/translations/keepassxc_en.ts +++ b/share/translations/keepassxc_en.ts @@ -1186,18 +1186,6 @@ Do you want to overwrite the passkey in %1 - %2? Custom extension ID - - Due to Snap sandboxing, you must run a script to enable browser integration.<br />You can obtain this script from %1 - - - - KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. %4 - - - - Please see special instructions for browser extension use below - - Executable Files @@ -1246,6 +1234,10 @@ Do you want to overwrite the passkey in %1 - %2? Allow using localhost with passkeys + + KeePassXC-Browser is needed for the browser integration to work. <br />Download it for %1 and %2 and %3. + + CloneDialog diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 435bf725b..d03f0e1c1 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -10,7 +10,7 @@ apps: command: usr/bin/keepassxc common-id: org.keepassxc.KeePassXC.desktop extensions: [kde-neon] - plugs: [home, unity7, network, network-bind, removable-media, raw-usb, password-manager-service] + plugs: [home, unity7, network, network-bind, removable-media, raw-usb, password-manager-service, browser-native-messaging] autostart: org.keepassxc.KeePassXC.desktop cli: command: usr/bin/keepassxc-cli @@ -21,6 +21,18 @@ apps: extensions: [kde-neon] plugs: [home] +plugs: + browser-native-messaging: + interface: personal-files + write: + - $HOME/.mozilla/native-messaging-hosts/org.keepassxc.keepassxc_browser.json + - $HOME/.config/chromium/NativeMessagingHosts/org.keepassxc.keepassxc_browser.json + - $HOME/.config/google-chrome/NativeMessagingHosts/org.keepassxc.keepassxc_browser.json + - $HOME/.config/microsoft-edge/NativeMessagingHosts/org.keepassxc.keepassxc_browser.json + - $HOME/.config/vivaldi/NativeMessagingHosts/org.keepassxc.keepassxc_browser.json + - $HOME/.config/BraveSoftware/Brave-Browser/NativeMessagingHosts/org.keepassxc.keepassxc_browser.json + - $HOME/.local/share/torbrowser/tbb/x86_64/tor-browser_en-US/Browser/TorBrowser/Data/Browser/.mozilla/native-messaging-hosts/org.keepassxc.keepassxc_browser.json + slots: session-dbus-interface: interface: dbus diff --git a/src/browser/BrowserSettingsWidget.cpp b/src/browser/BrowserSettingsWidget.cpp index 3190fddbe..3e2679e79 100644 --- a/src/browser/BrowserSettingsWidget.cpp +++ b/src/browser/BrowserSettingsWidget.cpp @@ -31,23 +31,13 @@ BrowserSettingsWidget::BrowserSettingsWidget(QWidget* parent) m_ui->setupUi(this); // clang-format off - QString snapInstructions; -#if defined(KEEPASSXC_DIST_SNAP) - snapInstructions = "

" + - tr("Due to Snap sandboxing, you must run a script to enable browser integration." - "
" - "You can obtain this script from %1") - .arg("https://keepassxc.org"); -#endif - 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 and %3. %4") + tr("KeePassXC-Browser is needed for the browser integration to work.
Download it for %1 and %2 and %3.") .arg("Firefox", "" "Google Chrome / Chromium / Vivaldi / Brave", - "Microsoft Edge", - snapInstructions)); + "Microsoft Edge")); // clang-format on m_ui->tabWidget->setEnabled(m_ui->enableBrowserSupport->isChecked()); @@ -149,16 +139,11 @@ void BrowserSettingsWidget::loadSettings() m_ui->useCustomProxy->setVisible(false); m_ui->customProxyLocation->setVisible(false); m_ui->customProxyLocationBrowseButton->setVisible(false); - m_ui->browsersGroupBox->setVisible(false); - m_ui->browsersGroupBox->setEnabled(false); m_ui->updateBinaryPath->setChecked(false); m_ui->updateBinaryPath->setVisible(false); // No custom browser for snaps m_ui->customBrowserSupport->setVisible(false); m_ui->customBrowserGroupBox->setVisible(false); - // Show notice to user - m_ui->messageWidget->showMessage(tr("Please see special instructions for browser extension use below"), - MessageWidget::Warning); #endif #ifdef KEEPASSXC_DIST_FLATPAK // The sandbox makes custom proxy locations very unintuitive diff --git a/src/browser/NativeMessageInstaller.cpp b/src/browser/NativeMessageInstaller.cpp index 92b5db291..7e637a64c 100644 --- a/src/browser/NativeMessageInstaller.cpp +++ b/src/browser/NativeMessageInstaller.cpp @@ -226,6 +226,16 @@ QString NativeMessageInstaller::getNativeMessagePath(SupportedBrowsers browser) } else { basePath = QDir::homePath() + "/.config"; } +#elif defined(KEEPASSXC_DIST_SNAP) + // Same as Flatpak above, with the exception that Snap also redefines $HOME + // Therefore we must explicitly reference $SNAP_REAL_HOME + if (browser == SupportedBrowsers::TOR_BROWSER) { + basePath = qEnvironmentVariable("SNAP_REAL_HOME") + "/.local/share"; + } else if (browser == SupportedBrowsers::FIREFOX) { + basePath = qEnvironmentVariable("SNAP_REAL_HOME"); + } else { + basePath = qEnvironmentVariable("SNAP_REAL_HOME") + "/.config"; + } #elif defined(Q_OS_LINUX) || (defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)) if (browser == SupportedBrowsers::TOR_BROWSER) { basePath = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); @@ -296,6 +306,8 @@ QString NativeMessageInstaller::getInstalledProxyPath() const path = QProcessEnvironment::systemEnvironment().value("APPIMAGE"); #elif defined(KEEPASSXC_DIST_FLATPAK) path = constructFlatpakPath(); +#elif defined(KEEPASSXC_DIST_SNAP) + path = "/snap/bin/keepassxc.proxy"; #else path = QCoreApplication::applicationDirPath() + QStringLiteral("/keepassxc-proxy"); #ifdef Q_OS_WIN