SSH Agent: Reset settings when KeeAgent.settings is removed

Fixes #4594
This commit is contained in:
Toni Spets 2020-04-13 08:30:02 +03:00 committed by Jonathan White
parent 98566fec83
commit a83345d136
5 changed files with 60 additions and 24 deletions

View File

@ -1758,7 +1758,7 @@ bool DatabaseWidget::currentEntryHasSshKey()
return false; return false;
} }
return KeeAgentSettings::inEntry(currentEntry); return KeeAgentSettings::inEntryAttachments(currentEntry->attachments());
} }
#endif #endif

View File

@ -532,22 +532,24 @@ void EditEntryWidget::setupSSHAgent()
addPage(tr("SSH Agent"), Resources::instance()->icon("utilities-terminal"), m_sshAgentWidget); addPage(tr("SSH Agent"), Resources::instance()->icon("utilities-terminal"), m_sshAgentWidget);
} }
void EditEntryWidget::updateSSHAgent() void EditEntryWidget::setSSHAgentSettings()
{ {
KeeAgentSettings settings; m_sshAgentUi->addKeyToAgentCheckBox->setChecked(m_sshAgentSettings.addAtDatabaseOpen());
settings.fromEntry(m_entry); m_sshAgentUi->removeKeyFromAgentCheckBox->setChecked(m_sshAgentSettings.removeAtDatabaseClose());
m_sshAgentUi->requireUserConfirmationCheckBox->setChecked(m_sshAgentSettings.useConfirmConstraintWhenAdding());
m_sshAgentUi->addKeyToAgentCheckBox->setChecked(settings.addAtDatabaseOpen()); m_sshAgentUi->lifetimeCheckBox->setChecked(m_sshAgentSettings.useLifetimeConstraintWhenAdding());
m_sshAgentUi->removeKeyFromAgentCheckBox->setChecked(settings.removeAtDatabaseClose()); m_sshAgentUi->lifetimeSpinBox->setValue(m_sshAgentSettings.lifetimeConstraintDuration());
m_sshAgentUi->requireUserConfirmationCheckBox->setChecked(settings.useConfirmConstraintWhenAdding());
m_sshAgentUi->lifetimeCheckBox->setChecked(settings.useLifetimeConstraintWhenAdding());
m_sshAgentUi->lifetimeSpinBox->setValue(settings.lifetimeConstraintDuration());
m_sshAgentUi->attachmentComboBox->clear(); m_sshAgentUi->attachmentComboBox->clear();
m_sshAgentUi->addToAgentButton->setEnabled(false); m_sshAgentUi->addToAgentButton->setEnabled(false);
m_sshAgentUi->removeFromAgentButton->setEnabled(false); m_sshAgentUi->removeFromAgentButton->setEnabled(false);
m_sshAgentUi->copyToClipboardButton->setEnabled(false); m_sshAgentUi->copyToClipboardButton->setEnabled(false);
}
m_sshAgentSettings = settings; void EditEntryWidget::updateSSHAgent()
{
m_sshAgentSettings.reset();
m_sshAgentSettings.fromEntry(m_entry);
setSSHAgentSettings();
updateSSHAgentAttachments(); updateSSHAgentAttachments();
} }
@ -560,6 +562,13 @@ void EditEntryWidget::updateSSHAgentAttachment()
void EditEntryWidget::updateSSHAgentAttachments() void EditEntryWidget::updateSSHAgentAttachments()
{ {
// detect if KeeAgent.settings was removed by hand and reset settings
if (m_entry && KeeAgentSettings::inEntryAttachments(m_entry->attachments())
&& !KeeAgentSettings::inEntryAttachments(m_advancedUi->attachmentsWidget->entryAttachments())) {
m_sshAgentSettings.reset();
setSSHAgentSettings();
}
m_sshAgentUi->attachmentComboBox->clear(); m_sshAgentUi->attachmentComboBox->clear();
m_sshAgentUi->attachmentComboBox->addItem(""); m_sshAgentUi->attachmentComboBox->addItem("");

View File

@ -111,6 +111,7 @@ private slots:
void pickColor(); void pickColor();
#ifdef WITH_XC_SSHAGENT #ifdef WITH_XC_SSHAGENT
void toKeeAgentSettings(KeeAgentSettings& settings) const; void toKeeAgentSettings(KeeAgentSettings& settings) const;
void setSSHAgentSettings();
void updateSSHAgent(); void updateSSHAgent();
void updateSSHAgentAttachment(); void updateSSHAgentAttachment();
void updateSSHAgentAttachments(); void updateSSHAgentAttachments();

View File

@ -19,6 +19,11 @@
#include "KeeAgentSettings.h" #include "KeeAgentSettings.h"
#include "core/Tools.h" #include "core/Tools.h"
KeeAgentSettings::KeeAgentSettings()
{
reset();
}
bool KeeAgentSettings::operator==(const KeeAgentSettings& other) const bool KeeAgentSettings::operator==(const KeeAgentSettings& other) const
{ {
// clang-format off // clang-format off
@ -50,6 +55,25 @@ bool KeeAgentSettings::isDefault() const
return (*this == defaultSettings); return (*this == defaultSettings);
} }
/**
* Reset this instance to default settings
*/
void KeeAgentSettings::reset()
{
m_allowUseOfSshKey = false;
m_addAtDatabaseOpen = false;
m_removeAtDatabaseClose = false;
m_useConfirmConstraintWhenAdding = false;
m_useLifetimeConstraintWhenAdding = false;
m_lifetimeConstraintDuration = 600;
m_selectedType = QStringLiteral("file");
m_attachmentName.clear();
m_saveAttachmentToTempFile = false;
m_fileName.clear();
m_error.clear();
}
/** /**
* Get last error as a QString. * Get last error as a QString.
* *
@ -300,14 +324,14 @@ QByteArray KeeAgentSettings::toXml() const
} }
/** /**
* Check if an entry has KeeAgent settings configured * Check if entry attachments have KeeAgent settings configured
* *
* @param entry Entry to check the attachment * @param attachments EntryAttachments to check the key
* @return true if XML document exists * @return true if XML document exists
*/ */
bool KeeAgentSettings::inEntry(const Entry* entry) bool KeeAgentSettings::inEntryAttachments(const EntryAttachments* attachments)
{ {
return entry->attachments()->hasKey("KeeAgent.settings"); return attachments->hasKey("KeeAgent.settings");
} }
/** /**

View File

@ -28,14 +28,16 @@
class KeeAgentSettings class KeeAgentSettings
{ {
public: public:
KeeAgentSettings();
bool operator==(const KeeAgentSettings& other) const; bool operator==(const KeeAgentSettings& other) const;
bool operator!=(const KeeAgentSettings& other) const; bool operator!=(const KeeAgentSettings& other) const;
bool isDefault() const; bool isDefault() const;
void reset();
bool fromXml(const QByteArray& ba); bool fromXml(const QByteArray& ba);
QByteArray toXml() const; QByteArray toXml() const;
static bool inEntry(const Entry* entry); static bool inEntryAttachments(const EntryAttachments* attachments);
bool fromEntry(const Entry* entry); bool fromEntry(const Entry* entry);
void toEntry(Entry* entry) const; void toEntry(Entry* entry) const;
bool keyConfigured() const; bool keyConfigured() const;
@ -77,17 +79,17 @@ private:
bool readBool(QXmlStreamReader& reader); bool readBool(QXmlStreamReader& reader);
int readInt(QXmlStreamReader& reader); int readInt(QXmlStreamReader& reader);
bool m_allowUseOfSshKey = false; bool m_allowUseOfSshKey;
bool m_addAtDatabaseOpen = false; bool m_addAtDatabaseOpen;
bool m_removeAtDatabaseClose = false; bool m_removeAtDatabaseClose;
bool m_useConfirmConstraintWhenAdding = false; bool m_useConfirmConstraintWhenAdding;
bool m_useLifetimeConstraintWhenAdding = false; bool m_useLifetimeConstraintWhenAdding;
int m_lifetimeConstraintDuration = 600; int m_lifetimeConstraintDuration;
// location // location
QString m_selectedType = QString("file"); QString m_selectedType;
QString m_attachmentName; QString m_attachmentName;
bool m_saveAttachmentToTempFile = false; bool m_saveAttachmentToTempFile;
QString m_fileName; QString m_fileName;
QString m_error; QString m_error;
}; };