mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2025-12-18 09:52:46 -05:00
Complete refactor of Browser Integration classes
* Removed option to attach KeePassXC to the browser extension. Users must use the proxy application to communicate with KeePassXC. * Significantly streamlined proxy code. Used same implementation of stdin/stdout interface across all platforms. * Moved browser service entry point to BrowserService class instead of NativeMessagingHost. BrowserService now coordinates the communication to/from clients. * Moved settings page definition out of MainWindow * Decoupled BrowserService from DatabaseTabWidget * Reduced complexity of various functions and cleaned the ABI (public vs private). * Eliminated BrowserClients class, moved functionality into the BrowserService * Renamed HostInstaller to NativeMessageInstaller and renamed NativeMessageHost to BrowserHost. * Recognize XDG_CONFIG_HOME when installing native message file on Linux. Fix #4121 and fix #4123.
This commit is contained in:
parent
3b4057a78c
commit
a145bf9119
43 changed files with 1221 additions and 1919 deletions
|
|
@ -44,6 +44,9 @@
|
|||
|
||||
#ifdef Q_OS_MACOS
|
||||
#include "gui/osutils/macutils/MacUtils.h"
|
||||
#ifdef WITH_XC_TOUCHID
|
||||
#include "touchid/TouchID.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef WITH_XC_UPDATECHECK
|
||||
|
|
@ -56,7 +59,7 @@
|
|||
#include "sshagent/AgentSettingsPage.h"
|
||||
#include "sshagent/SSHAgent.h"
|
||||
#endif
|
||||
#if defined(WITH_XC_KEESHARE)
|
||||
#ifdef WITH_XC_KEESHARE
|
||||
#include "keeshare/KeeShare.h"
|
||||
#include "keeshare/SettingsPageKeeShare.h"
|
||||
#endif
|
||||
|
|
@ -66,9 +69,8 @@
|
|||
#endif
|
||||
|
||||
#ifdef WITH_XC_BROWSER
|
||||
#include "browser/BrowserOptionDialog.h"
|
||||
#include "browser/BrowserSettings.h"
|
||||
#include "browser/NativeMessagingHost.h"
|
||||
#include "browser/BrowserService.h"
|
||||
#include "browser/BrowserSettingsPage.h"
|
||||
#endif
|
||||
|
||||
#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) && !defined(QT_NO_DBUS)
|
||||
|
|
@ -77,61 +79,6 @@
|
|||
#include <QtDBus/QtDBus>
|
||||
#endif
|
||||
|
||||
#include "gui/ApplicationSettingsWidget.h"
|
||||
#include "gui/PasswordGeneratorWidget.h"
|
||||
|
||||
#include "touchid/TouchID.h"
|
||||
|
||||
#ifdef WITH_XC_BROWSER
|
||||
class BrowserPlugin : public ISettingsPage
|
||||
{
|
||||
public:
|
||||
explicit BrowserPlugin(DatabaseTabWidget* tabWidget)
|
||||
{
|
||||
m_nativeMessagingHost =
|
||||
QSharedPointer<NativeMessagingHost>(new NativeMessagingHost(tabWidget, browserSettings()->isEnabled()));
|
||||
}
|
||||
|
||||
~BrowserPlugin()
|
||||
{
|
||||
}
|
||||
|
||||
QString name() override
|
||||
{
|
||||
return QObject::tr("Browser Integration");
|
||||
}
|
||||
|
||||
QIcon icon() override
|
||||
{
|
||||
return Resources::instance()->icon("internet-web-browser");
|
||||
}
|
||||
|
||||
QWidget* createWidget() override
|
||||
{
|
||||
BrowserOptionDialog* dlg = new BrowserOptionDialog();
|
||||
return dlg;
|
||||
}
|
||||
|
||||
void loadSettings(QWidget* widget) override
|
||||
{
|
||||
qobject_cast<BrowserOptionDialog*>(widget)->loadSettings();
|
||||
}
|
||||
|
||||
void saveSettings(QWidget* widget) override
|
||||
{
|
||||
qobject_cast<BrowserOptionDialog*>(widget)->saveSettings();
|
||||
if (browserSettings()->isEnabled()) {
|
||||
m_nativeMessagingHost->run();
|
||||
} else {
|
||||
m_nativeMessagingHost->stop();
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
QSharedPointer<NativeMessagingHost> m_nativeMessagingHost;
|
||||
};
|
||||
#endif
|
||||
|
||||
const QString MainWindow::BaseWindowTitle = "KeePassXC";
|
||||
|
||||
MainWindow* g_MainWindow = nullptr;
|
||||
|
|
@ -186,13 +133,19 @@ MainWindow::MainWindow()
|
|||
restoreGeometry(config()->get(Config::GUI_MainWindowGeometry).toByteArray());
|
||||
restoreState(config()->get(Config::GUI_MainWindowState).toByteArray());
|
||||
#ifdef WITH_XC_BROWSER
|
||||
m_ui->settingsWidget->addSettingsPage(new BrowserPlugin(m_ui->tabWidget));
|
||||
m_ui->settingsWidget->addSettingsPage(new BrowserSettingsPage());
|
||||
connect(m_ui->tabWidget, &DatabaseTabWidget::databaseLocked, browserService(), &BrowserService::databaseLocked);
|
||||
connect(m_ui->tabWidget, &DatabaseTabWidget::databaseUnlocked, browserService(), &BrowserService::databaseUnlocked);
|
||||
connect(m_ui->tabWidget,
|
||||
&DatabaseTabWidget::activateDatabaseChanged,
|
||||
browserService(),
|
||||
&BrowserService::activeDatabaseChanged);
|
||||
#endif
|
||||
|
||||
#ifdef WITH_XC_SSHAGENT
|
||||
connect(sshAgent(), SIGNAL(error(QString)), this, SLOT(showErrorMessage(QString)));
|
||||
connect(sshAgent(), SIGNAL(enabledChanged(bool)), this, SLOT(agentEnabled(bool)));
|
||||
m_ui->settingsWidget->addSettingsPage(new AgentSettingsPage(m_ui->tabWidget));
|
||||
m_ui->settingsWidget->addSettingsPage(new AgentSettingsPage());
|
||||
|
||||
m_entryContextMenu->addSeparator();
|
||||
m_entryContextMenu->addAction(m_ui->actionEntryAddToAgent);
|
||||
|
|
@ -565,6 +518,15 @@ MainWindow::~MainWindow()
|
|||
{
|
||||
}
|
||||
|
||||
QList<DatabaseWidget*> MainWindow::getOpenDatabases()
|
||||
{
|
||||
QList<DatabaseWidget*> dbWidgets;
|
||||
for (int i = 0; i < m_ui->tabWidget->count(); ++i) {
|
||||
dbWidgets << m_ui->tabWidget->databaseWidgetFromIndex(i);
|
||||
}
|
||||
return dbWidgets;
|
||||
}
|
||||
|
||||
void MainWindow::showErrorMessage(const QString& message)
|
||||
{
|
||||
m_ui->globalMessageWidget->showMessage(message, MessageWidget::Error);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue