diff --git a/src/gui/entry/EditEntryWidget.cpp b/src/gui/entry/EditEntryWidget.cpp
index dda0ab1d0..db35b2f8f 100644
--- a/src/gui/entry/EditEntryWidget.cpp
+++ b/src/gui/entry/EditEntryWidget.cpp
@@ -47,6 +47,7 @@
#include "gui/FileDialog.h"
#include "gui/MessageBox.h"
#include "gui/Clipboard.h"
+#include "gui/Font.h"
#include "gui/entry/AutoTypeAssociationsModel.h"
#include "gui/entry/EntryAttachmentsModel.h"
#include "gui/entry/EntryAttributesModel.h"
@@ -267,7 +268,15 @@ void EditEntryWidget::setupSSHAgent()
{
m_sshAgentUi->setupUi(m_sshAgentWidget);
- connect(m_sshAgentUi->privateKeyComboBox, SIGNAL(currentTextChanged(QString)), SLOT(updateSSHAgentKeyInfo()));
+ QFont fixedFont = Font::fixedFont();
+ m_sshAgentUi->fingerprintTextLabel->setFont(fixedFont);
+ m_sshAgentUi->commentTextLabel->setFont(fixedFont);
+ m_sshAgentUi->publicKeyEdit->setFont(fixedFont);
+
+ connect(m_sshAgentUi->attachmentRadioButton, SIGNAL(clicked(bool)), SLOT(updateSSHAgentKeyInfo()));
+ connect(m_sshAgentUi->attachmentComboBox, SIGNAL(currentIndexChanged(int)), SLOT(updateSSHAgentKeyInfo()));
+ connect(m_sshAgentUi->externalFileRadioButton, SIGNAL(clicked(bool)), SLOT(updateSSHAgentKeyInfo()));
+ connect(m_sshAgentUi->externalFileEdit, SIGNAL(textChanged(QString)), SLOT(updateSSHAgentKeyInfo()));
connect(m_sshAgentUi->browseButton, SIGNAL(clicked()), SLOT(browsePrivateKey()));
connect(m_sshAgentUi->addToAgentButton, SIGNAL(clicked()), SLOT(addKeyToAgent()));
connect(m_sshAgentUi->removeFromAgentButton, SIGNAL(clicked()), SLOT(removeKeyFromAgent()));
@@ -279,8 +288,6 @@ void EditEntryWidget::setupSSHAgent()
void EditEntryWidget::updateSSHAgent()
{
- // TODO: unsafe use of translations
- QString prefix = tr("Attachment") + ": ";
KeeAgentSettings settings;
settings.fromXml(m_entryAttachments->value("KeeAgent.settings"));
@@ -289,29 +296,33 @@ void EditEntryWidget::updateSSHAgent()
m_sshAgentUi->requireUserConfirmationCheckBox->setChecked(settings.useConfirmConstraintWhenAdding());
m_sshAgentUi->lifetimeCheckBox->setChecked(settings.useLifetimeConstraintWhenAdding());
m_sshAgentUi->lifetimeSpinBox->setValue(settings.lifetimeConstraintDuration());
- m_sshAgentUi->privateKeyComboBox->clear();
+ m_sshAgentUi->attachmentComboBox->clear();
m_sshAgentUi->addToAgentButton->setEnabled(false);
m_sshAgentUi->removeFromAgentButton->setEnabled(false);
m_sshAgentUi->copyToClipboardButton->setEnabled(false);
+ m_sshAgentUi->attachmentComboBox->addItem("");
+
for (QString fileName : m_entryAttachments->keys()) {
if (fileName == "KeeAgent.settings") {
continue;
}
- m_sshAgentUi->privateKeyComboBox->addItem(prefix + fileName);
+ m_sshAgentUi->attachmentComboBox->addItem(fileName);
}
+ m_sshAgentUi->attachmentComboBox->setCurrentText(settings.attachmentName());
+ m_sshAgentUi->externalFileEdit->setText(settings.fileName());
+
if (settings.selectedType() == "attachment") {
- m_sshAgentUi->privateKeyComboBox->setCurrentText(prefix + settings.attachmentName());
- } else if (!settings.fileName().isEmpty()) {
- m_sshAgentUi->privateKeyComboBox->addItem(settings.fileName());
- m_sshAgentUi->privateKeyComboBox->setCurrentText(settings.fileName());
+ m_sshAgentUi->attachmentRadioButton->setChecked(true);
} else {
- m_sshAgentUi->privateKeyComboBox->setCurrentText("");
+ m_sshAgentUi->externalFileRadioButton->setChecked(true);
}
m_sshAgentSettings = settings;
+
+ updateSSHAgentKeyInfo();
}
void EditEntryWidget::updateSSHAgentKeyInfo()
@@ -319,28 +330,24 @@ void EditEntryWidget::updateSSHAgentKeyInfo()
m_sshAgentUi->addToAgentButton->setEnabled(false);
m_sshAgentUi->removeFromAgentButton->setEnabled(false);
m_sshAgentUi->copyToClipboardButton->setEnabled(false);
- m_sshAgentUi->fingerprintEdit->setText("");
- m_sshAgentUi->commentEdit->setText("");
+ m_sshAgentUi->fingerprintTextLabel->setText(tr("n/a"));
+ m_sshAgentUi->commentTextLabel->setText(tr("n/a"));
m_sshAgentUi->decryptButton->setEnabled(false);
m_sshAgentUi->publicKeyEdit->document()->setPlainText("");
- if (m_sshAgentUi->privateKeyComboBox->currentText().isEmpty()) {
- return;
- }
-
OpenSSHKey key;
if (!getOpenSSHKey(key)) {
return;
}
- m_sshAgentUi->fingerprintEdit->setText(key.fingerprint());
+ m_sshAgentUi->fingerprintTextLabel->setText(key.fingerprint());
if (key.encrypted()) {
- m_sshAgentUi->commentEdit->setText(tr("(encrypted)"));
+ m_sshAgentUi->commentTextLabel->setText(tr("(encrypted)"));
m_sshAgentUi->decryptButton->setEnabled(true);
} else {
- m_sshAgentUi->commentEdit->setText(key.comment());
+ m_sshAgentUi->commentTextLabel->setText(key.comment());
}
m_sshAgentUi->publicKeyEdit->document()->setPlainText(key.publicKey());
@@ -357,7 +364,7 @@ void EditEntryWidget::updateSSHAgentKeyInfo()
void EditEntryWidget::saveSSHAgentConfig()
{
KeeAgentSettings settings;
- QString privateKeyPath = m_sshAgentUi->privateKeyComboBox->currentText();
+ QString privateKeyPath = m_sshAgentUi->attachmentComboBox->currentText();
settings.setAddAtDatabaseOpen(m_sshAgentUi->addKeyToAgentCheckBox->isChecked());
settings.setRemoveAtDatabaseClose(m_sshAgentUi->removeKeyFromAgentCheckBox->isChecked());
@@ -365,17 +372,13 @@ void EditEntryWidget::saveSSHAgentConfig()
settings.setUseLifetimeConstraintWhenAdding(m_sshAgentUi->lifetimeCheckBox->isChecked());
settings.setLifetimeConstraintDuration(m_sshAgentUi->lifetimeSpinBox->value());
- // TODO: unsafe use of translations
- QString prefix = tr("Attachment") + ": ";
- if (privateKeyPath.startsWith(prefix)) {
+ if (m_sshAgentUi->attachmentRadioButton->isChecked()) {
settings.setSelectedType("attachment");
- settings.setAttachmentName(privateKeyPath.remove(0, prefix.length()));
- settings.setFileName("");
} else {
settings.setSelectedType("file");
- settings.setFileName(privateKeyPath);
- settings.setAttachmentName("");
}
+ settings.setAttachmentName(m_sshAgentUi->attachmentComboBox->currentText());
+ settings.setFileName(m_sshAgentUi->externalFileEdit->text());
// we don't use this as we don't run an agent but for compatibility we set it if necessary
settings.setAllowUseOfSshKey(settings.addAtDatabaseOpen() || settings.removeAtDatabaseClose());
@@ -396,23 +399,22 @@ void EditEntryWidget::browsePrivateKey()
{
QString fileName = QFileDialog::getOpenFileName(this, tr("Select private key"), "");
if (!fileName.isEmpty()) {
- m_sshAgentUi->privateKeyComboBox->addItem(fileName);
- m_sshAgentUi->privateKeyComboBox->setCurrentText(fileName);
+ m_sshAgentUi->externalFileEdit->setText(fileName);
}
}
bool EditEntryWidget::getOpenSSHKey(OpenSSHKey& key)
{
- QString privateKeyPath = m_sshAgentUi->privateKeyComboBox->currentText();
QByteArray privateKeyData;
- // TODO: unsafe use of translations
- QString prefix = tr("Attachment") + ": ";
- if (privateKeyPath.startsWith(prefix)) {
- QString attachmentName = privateKeyPath.remove(0, prefix.length());
- privateKeyData = m_entryAttachments->value(attachmentName);
+ if (m_sshAgentUi->attachmentRadioButton->isChecked()) {
+ privateKeyData = m_entryAttachments->value(m_sshAgentUi->attachmentComboBox->currentText());
} else {
- QFile localFile(privateKeyPath);
+ QFile localFile(m_sshAgentUi->externalFileEdit->text());
+
+ if (localFile.fileName().isEmpty()) {
+ return false;
+ }
if (localFile.size() > 1024 * 1024) {
showMessage(tr("File too large to be a private key"), MessageWidget::Error);
@@ -427,6 +429,10 @@ bool EditEntryWidget::getOpenSSHKey(OpenSSHKey& key)
privateKeyData = localFile.readAll();
}
+ if (privateKeyData.length() == 0) {
+ return false;
+ }
+
if (!key.parse(privateKeyData)) {
showMessage(key.errorString(), MessageWidget::Error);
return false;
@@ -446,7 +452,7 @@ void EditEntryWidget::addKeyToAgent()
if (!key.openPrivateKey(m_entry->password())) {
showMessage(key.errorString(), MessageWidget::Error);
} else {
- m_sshAgentUi->commentEdit->setText(key.comment());
+ m_sshAgentUi->commentTextLabel->setText(key.comment());
m_sshAgentUi->publicKeyEdit->document()->setPlainText(key.publicKey());
}
@@ -484,7 +490,7 @@ void EditEntryWidget::decryptPrivateKey()
if (!key.openPrivateKey(m_entry->password())) {
showMessage(key.errorString(), MessageWidget::Error);
} else {
- m_sshAgentUi->commentEdit->setText(key.comment());
+ m_sshAgentUi->commentTextLabel->setText(key.comment());
m_sshAgentUi->publicKeyEdit->document()->setPlainText(key.publicKey());
}
}
diff --git a/src/gui/entry/EditEntryWidgetSSHAgent.ui b/src/gui/entry/EditEntryWidgetSSHAgent.ui
index 2d88327cc..34c8fae82 100644
--- a/src/gui/entry/EditEntryWidgetSSHAgent.ui
+++ b/src/gui/entry/EditEntryWidgetSSHAgent.ui
@@ -26,63 +26,6 @@
0
- -
-
-
- Remove key from agent when database is closed/locked
-
-
-
- -
-
-
- Fingerprint
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
-
- -
-
-
- true
-
-
-
- -
-
-
- false
-
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
-
-
- true
-
-
-
- -
-
-
- Private key
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
-
- -
-
-
- Public key
-
-
- Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing
-
-
-
-
-
@@ -118,15 +61,32 @@
-
-
+
- Comment
+ Fingerprint
Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+ -
+
+
+ Remove key from agent when database is closed/locked
+
+
+
+ -
+
+
+ Public key
+
+
+ Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing
+
+
+
-
@@ -134,26 +94,129 @@
- -
-
-
-
- 0
- 0
-
+
-
+
+
+ Comment
-
- true
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- -
-
+
-
+
- Browse...
+ Decrypt
+ -
+
+
-
+
+
+
+ Monospace
+
+
+
+ n/a
+
+
+ Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+ -
+
+
+ Copy to clipboard
+
+
+
+ -
+
+
+ Private key
+
+
+
-
+
+
+ External file
+
+
+
+ -
+
+
+ Browse...
+
+
+
+ -
+
+
+ Attachment
+
+
+ true
+
+
+
+ -
+
+
+ -
+
+
-
+
+
+ Add to agent
+
+
+
+ -
+
+
+ Remove from agent
+
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ false
+
+
+
+
+
+
-
@@ -162,43 +225,48 @@
-
-
-
- Copy to clipboard
+
+
+
+ Monospace
+
-
-
- -
-
-
-
-
-
- Add to agent
-
-
-
- -
-
-
- Remove from agent
-
-
-
-
-
- -
-
true
- -
-
-
- Decrypt
-
-
+
-
+
+
-
+
+
+
+ Monospace
+
+
+
+ n/a
+
+
+ Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+