mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2024-10-01 01:26:01 -04:00
parent
6fc7be78ea
commit
4dee16c9fa
@ -17,9 +17,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "AgentSettingsWidget.h"
|
#include "AgentSettingsWidget.h"
|
||||||
|
#include "SSHAgent.h"
|
||||||
#include "ui_AgentSettingsWidget.h"
|
#include "ui_AgentSettingsWidget.h"
|
||||||
|
|
||||||
#include "core/Config.h"
|
#include "core/Config.h"
|
||||||
|
#include <QProcessEnvironment>
|
||||||
|
|
||||||
AgentSettingsWidget::AgentSettingsWidget(QWidget* parent)
|
AgentSettingsWidget::AgentSettingsWidget(QWidget* parent)
|
||||||
: QWidget(parent)
|
: QWidget(parent)
|
||||||
@ -28,7 +30,13 @@ AgentSettingsWidget::AgentSettingsWidget(QWidget* parent)
|
|||||||
m_ui->setupUi(this);
|
m_ui->setupUi(this);
|
||||||
#ifndef Q_OS_WIN
|
#ifndef Q_OS_WIN
|
||||||
m_ui->useOpenSSHCheckBox->setVisible(false);
|
m_ui->useOpenSSHCheckBox->setVisible(false);
|
||||||
|
#else
|
||||||
|
m_ui->sshAuthSockWidget->setVisible(false);
|
||||||
#endif
|
#endif
|
||||||
|
auto sshAgentEnabled = config()->get("SSHAgent", false).toBool();
|
||||||
|
m_ui->sshAuthSockMessageWidget->setVisible(sshAgentEnabled);
|
||||||
|
m_ui->sshAuthSockMessageWidget->setCloseButtonVisible(false);
|
||||||
|
m_ui->sshAuthSockMessageWidget->setAutoHideTimeout(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
AgentSettingsWidget::~AgentSettingsWidget()
|
AgentSettingsWidget::~AgentSettingsWidget()
|
||||||
@ -37,15 +45,42 @@ AgentSettingsWidget::~AgentSettingsWidget()
|
|||||||
|
|
||||||
void AgentSettingsWidget::loadSettings()
|
void AgentSettingsWidget::loadSettings()
|
||||||
{
|
{
|
||||||
m_ui->enableSSHAgentCheckBox->setChecked(config()->get("SSHAgent", false).toBool());
|
auto sshAgentEnabled = config()->get("SSHAgent", false).toBool();
|
||||||
|
m_ui->enableSSHAgentCheckBox->setChecked(sshAgentEnabled);
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
m_ui->useOpenSSHCheckBox->setChecked(config()->get("SSHAgentOpenSSH", false).toBool());
|
m_ui->useOpenSSHCheckBox->setChecked(config()->get("SSHAgentOpenSSH", false).toBool());
|
||||||
|
#else
|
||||||
|
auto sshAuthSock = QProcessEnvironment::systemEnvironment().value("SSH_AUTH_SOCK");
|
||||||
|
auto sshAuthSockOverride = config()->get("SSHAuthSockOverride", "").toString();
|
||||||
|
m_ui->sshAuthSockLabel->setText(sshAuthSock.isEmpty() ? tr("(empty)") : sshAuthSock);
|
||||||
|
m_ui->sshAuthSockOverrideEdit->setText(sshAuthSockOverride);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (sshAgentEnabled) {
|
||||||
|
m_ui->sshAuthSockMessageWidget->setVisible(true);
|
||||||
|
|
||||||
|
#ifndef Q_OS_WIN
|
||||||
|
if (sshAuthSock.isEmpty() && sshAuthSockOverride.isEmpty()) {
|
||||||
|
m_ui->sshAuthSockMessageWidget->showMessage(
|
||||||
|
tr("No SSH Agent socket available. Either make sure SSH_AUTH_SOCK environment variable exists or set "
|
||||||
|
"an override."),
|
||||||
|
MessageWidget::Warning);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (SSHAgent::instance()->testConnection()) {
|
||||||
|
m_ui->sshAuthSockMessageWidget->showMessage(tr("SSH Agent connection is working!"),
|
||||||
|
MessageWidget::Positive);
|
||||||
|
} else {
|
||||||
|
m_ui->sshAuthSockMessageWidget->showMessage(SSHAgent::instance()->errorString(), MessageWidget::Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AgentSettingsWidget::saveSettings()
|
void AgentSettingsWidget::saveSettings()
|
||||||
{
|
{
|
||||||
config()->set("SSHAgent", m_ui->enableSSHAgentCheckBox->isChecked());
|
config()->set("SSHAgent", m_ui->enableSSHAgentCheckBox->isChecked());
|
||||||
|
config()->set("SSHAuthSockOverride", m_ui->sshAuthSockOverrideEdit->text());
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
config()->set("SSHAgentOpenSSH", m_ui->useOpenSSHCheckBox->isChecked());
|
config()->set("SSHAgentOpenSSH", m_ui->useOpenSSHCheckBox->isChecked());
|
||||||
#endif
|
#endif
|
||||||
|
@ -37,6 +37,59 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QWidget" name="sshAuthSockWidget" native="true">
|
||||||
|
<layout class="QGridLayout" name="sshAuthSockOverrideLayout">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="sshAuthSockValueLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>SSH_AUTH_SOCK value</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QLabel" name="sshAuthSockLabel">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<family>Monospace</family>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>(empty)</string>
|
||||||
|
</property>
|
||||||
|
<property name="textInteractionFlags">
|
||||||
|
<set>Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="0">
|
||||||
|
<widget class="QLabel" name="sshAuthSockOverrideLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>SSH_AUTH_SOCK override</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="1">
|
||||||
|
<widget class="QLineEdit" name="sshAuthSockOverrideEdit"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="MessageWidget" name="sshAuthSockMessageWidget" native="true"/>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="verticalSpacer">
|
<spacer name="verticalSpacer">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
@ -52,6 +105,14 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>MessageWidget</class>
|
||||||
|
<extends>QWidget</extends>
|
||||||
|
<header>gui/MessageWidget.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections/>
|
<connections/>
|
||||||
</ui>
|
</ui>
|
||||||
|
@ -35,7 +35,10 @@ SSHAgent::SSHAgent(QObject* parent)
|
|||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
{
|
{
|
||||||
#ifndef Q_OS_WIN
|
#ifndef Q_OS_WIN
|
||||||
|
m_socketPath = config()->get("SSHAuthSockOverride", "").toString();
|
||||||
|
if (m_socketPath.isEmpty()) {
|
||||||
m_socketPath = QProcessEnvironment::systemEnvironment().value("SSH_AUTH_SOCK");
|
m_socketPath = QProcessEnvironment::systemEnvironment().value("SSH_AUTH_SOCK");
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
m_socketPath = "\\\\.\\pipe\\openssh-ssh-agent";
|
m_socketPath = "\\\\.\\pipe\\openssh-ssh-agent";
|
||||||
#endif
|
#endif
|
||||||
@ -181,6 +184,36 @@ bool SSHAgent::sendMessagePageant(const QByteArray& in, QByteArray& out)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test if connection to SSH agent is working.
|
||||||
|
*
|
||||||
|
* @return true on success
|
||||||
|
*/
|
||||||
|
bool SSHAgent::testConnection()
|
||||||
|
{
|
||||||
|
if (!isAgentRunning()) {
|
||||||
|
m_error = tr("No agent running, cannot test connection.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
QByteArray requestData;
|
||||||
|
BinaryStream request(&requestData);
|
||||||
|
|
||||||
|
request.write(SSH_AGENTC_REQUEST_IDENTITIES);
|
||||||
|
|
||||||
|
QByteArray responseData;
|
||||||
|
if (!sendMessage(requestData, responseData)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (responseData.length() < 1 || static_cast<quint8>(responseData[0]) != SSH_AGENT_IDENTITIES_ANSWER) {
|
||||||
|
m_error = tr("Agent protocol error.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add the identity to the SSH agent.
|
* Add the identity to the SSH agent.
|
||||||
*
|
*
|
||||||
|
@ -37,6 +37,7 @@ public:
|
|||||||
|
|
||||||
const QString errorString() const;
|
const QString errorString() const;
|
||||||
bool isAgentRunning() const;
|
bool isAgentRunning() const;
|
||||||
|
bool testConnection();
|
||||||
bool addIdentity(OpenSSHKey& key, KeeAgentSettings& settings);
|
bool addIdentity(OpenSSHKey& key, KeeAgentSettings& settings);
|
||||||
bool removeIdentity(OpenSSHKey& key);
|
bool removeIdentity(OpenSSHKey& key);
|
||||||
void setAutoRemoveOnLock(const OpenSSHKey& key, bool autoRemove);
|
void setAutoRemoveOnLock(const OpenSSHKey& key, bool autoRemove);
|
||||||
|
Loading…
Reference in New Issue
Block a user