Skip to content

Commit

Permalink
Browser connection keys and rules are stored in custom data instead o…
Browse files Browse the repository at this point in the history
…f attributes
  • Loading branch information
varjolintu committed Sep 27, 2018
1 parent 61d7e6b commit c923453
Show file tree
Hide file tree
Showing 9 changed files with 357 additions and 73 deletions.
6 changes: 3 additions & 3 deletions src/browser/BrowserEntryConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
#include "core/EntryAttributes.h"
#include <QtCore>

static const char KEEPASSBROWSER_NAME[] = "KeePassXC-Browser Settings";
static const char KEEPASSXCBROWSER_NAME[] = "KeePassXC-Browser Settings";

BrowserEntryConfig::BrowserEntryConfig(QObject* parent)
: QObject(parent)
Expand Down Expand Up @@ -82,7 +82,7 @@ void BrowserEntryConfig::setRealm(const QString& realm)

bool BrowserEntryConfig::load(const Entry* entry)
{
QString s = entry->attributes()->value(KEEPASSBROWSER_NAME);
QString s = entry->customData()->value(KEEPASSXCBROWSER_NAME);
if (s.isEmpty()) {
return false;
}
Expand All @@ -104,5 +104,5 @@ void BrowserEntryConfig::save(Entry* entry)
QVariantMap v = qo2qv(this);
QJsonObject o = QJsonObject::fromVariantMap(v);
QByteArray json = QJsonDocument(o).toJson(QJsonDocument::Compact);
entry->attributes()->set(KEEPASSBROWSER_NAME, json);
entry->customData()->set(KEEPASSXCBROWSER_NAME, json);
}
73 changes: 71 additions & 2 deletions src/browser/BrowserOptionDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,24 @@
#include "ui_BrowserOptionDialog.h"

#include <QFileDialog>
#include <QMessageBox>
#include "gui/MessageBox.h"

BrowserOptionDialog::BrowserOptionDialog(QWidget* parent)
BrowserOptionDialog::BrowserOptionDialog(DatabaseTabWidget* parent)
: QWidget(parent)
, m_ui(new Ui::BrowserOptionDialog())
, m_customData(new CustomData(this))
, m_customDataModel(new QStandardItemModel(this))
, m_dbTabWidget(parent)
{
m_ui->setupUi(this);
m_ui->removeCustomDataButton->setEnabled(false);
m_ui->customDataTable->setModel(m_customDataModel);
connect(m_ui->customDataTable->selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)),
SLOT(toggleRemoveButton(QItemSelection)));
connect(m_ui->removeCustomDataButton, SIGNAL(clicked()), SLOT(removeSelectedKey()));
connect(m_ui->convertToCustomData, SIGNAL(clicked()), this, SIGNAL(convertAttributesToCustomData()));
connect(m_ui->removeSharedEncryptionKeys, SIGNAL(clicked()), this, SIGNAL(removeSharedEncryptionKeys()));
connect(m_ui->removeSharedEncryptionKeys, SIGNAL(clicked()), this, SLOT(updateSharedKeyList()));
connect(m_ui->removeStoredPermissions, SIGNAL(clicked()), this, SIGNAL(removeStoredPermissions()));

m_ui->extensionLabel->setOpenExternalLinks(true);
Expand Down Expand Up @@ -64,6 +74,17 @@ BrowserOptionDialog::~BrowserOptionDialog()
{
}

CustomData* BrowserOptionDialog::customData() const
{
// Returns the current database customData from metadata. Otherwise return an empty customData member.
if (DatabaseWidget* dbWidget = m_dbTabWidget->currentDatabaseWidget()) {
if (Database* db = dbWidget->database()) {
return db->metadata()->customData();
}
}
return m_customData;
}

void BrowserOptionDialog::loadSettings()
{
auto settings = browserSettings();
Expand Down Expand Up @@ -97,6 +118,9 @@ void BrowserOptionDialog::loadSettings()
m_ui->firefoxSupport->setChecked(settings->firefoxSupport());
m_ui->vivaldiSupport->setChecked(settings->vivaldiSupport());

// Update the stored key list every time settings are loaded
updateModel();

#if defined(KEEPASSXC_DIST_APPIMAGE)
m_ui->supportBrowserProxy->setChecked(true);
m_ui->supportBrowserProxy->setEnabled(false);
Expand Down Expand Up @@ -150,3 +174,48 @@ void BrowserOptionDialog::showProxyLocationFileDialog()
fileTypeFilter);
m_ui->customProxyLocation->setText(proxyLocation);
}

void BrowserOptionDialog::removeSelectedKey()
{
if (QMessageBox::Yes != MessageBox::question(this,
tr("Delete the selected key?"),
tr("Do you really want to delete the selected key?\n"
"This may cause the affected plugins to malfunction."),
QMessageBox::Yes | QMessageBox::Cancel, QMessageBox::Cancel)) {
return;
}

const QItemSelectionModel* itemSelectionModel = m_ui->customDataTable->selectionModel();
if (itemSelectionModel) {
for (const QModelIndex& index : itemSelectionModel->selectedRows(0)) {
const QString key = index.data().toString();
customData()->remove(key);
}
updateModel();
}
}

void BrowserOptionDialog::toggleRemoveButton(const QItemSelection& selected)
{
m_ui->removeCustomDataButton->setEnabled(!selected.isEmpty());
}

void BrowserOptionDialog::updateModel()
{
m_customDataModel->clear();
m_customDataModel->setHorizontalHeaderLabels({tr("Key"), tr("Value")});

for (const QString& key : customData()->keys()) {
m_customDataModel->appendRow(QList<QStandardItem*>()
<< new QStandardItem(key)
<< new QStandardItem(customData()->value(key)));
}

m_ui->removeCustomDataButton->setEnabled(false);
}

// Updates the shared key list after the list is cleared
void BrowserOptionDialog::updateSharedKeyList()
{
updateModel();
}
19 changes: 17 additions & 2 deletions src/browser/BrowserOptionDialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,11 @@
#define BROWSEROPTIONDIALOG_H

#include <QScopedPointer>
#include <QWidget>
#include <QStandardItemModel>
#include <QItemSelection>
#include <QPointer>
#include "core/CustomData.h"
#include "gui/DatabaseTabWidget.h"

namespace Ui
{
Expand All @@ -33,22 +37,33 @@ class BrowserOptionDialog : public QWidget
Q_OBJECT

public:
explicit BrowserOptionDialog(QWidget* parent = nullptr);
explicit BrowserOptionDialog(DatabaseTabWidget* parent = nullptr);
~BrowserOptionDialog();

CustomData* customData() const;

public slots:
void loadSettings();
void saveSettings();

signals:
void removeSharedEncryptionKeys();
void removeStoredPermissions();
void convertAttributesToCustomData();

private slots:
void showProxyLocationFileDialog();
void removeSelectedKey();
void toggleRemoveButton(const QItemSelection& selected);
void updateSharedKeyList();

private:
void updateModel();
QScopedPointer<Ui::BrowserOptionDialog> m_ui;

QPointer<CustomData> m_customData;
QPointer<QStandardItemModel> m_customDataModel;
DatabaseTabWidget* const m_dbTabWidget;
};

#endif // BROWSEROPTIONDIALOG_H
77 changes: 73 additions & 4 deletions src/browser/BrowserOptionDialog.ui
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@
</widget>
</item>
<item>
<spacer name="verticalSpacer_3">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
Expand Down Expand Up @@ -205,7 +205,7 @@
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
Expand Down Expand Up @@ -251,7 +251,76 @@
</layout>
</item>
<item>
<spacer name="verticalSpacer_2">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QPushButton" name="convertToCustomData">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Move KeePassHTTP attributes to KeePassXC-Browser &amp;custom data</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Stored Keys</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QTableView" name="customDataTable">
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
<attribute name="horizontalHeaderDefaultSectionSize">
<number>200</number>
</attribute>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QPushButton" name="removeCustomDataButton">
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
Expand Down Expand Up @@ -366,7 +435,7 @@
</layout>
</item>
<item>
<spacer name="verticalSpacer_4">
<spacer name="verticalSpacer_5">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
Expand Down
Loading

0 comments on commit c923453

Please sign in to comment.