From 3c19fdd193336c9830fa112a720b42292c37e28b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfram=20R=C3=B6sler?= Date: Fri, 3 Apr 2020 22:01:00 +0200 Subject: [PATCH] Reports: Add "Known Bad" flag for entries * Fixes #4168 * Introduce a custom data element stored with an entry to indicate that it is a "Known Bad" entry. This flag causes database reports to skip these entries. * The current number of known bad entries is displayed in the statistics report. * Add context menu to reports to easily exclude entries. --- COPYING | 2 + share/demo.kdbx | Bin 65285 -> 65637 bytes .../scalable/actions/reports-exclude.svg | 1 + .../application/scalable/actions/reports.svg | 1 + share/icons/icons.qrc | 4 +- src/core/PasswordHealth.cpp | 3 + src/core/PasswordHealth.h | 8 + src/gui/MainWindow.cpp | 2 +- src/gui/entry/EditEntryWidget.cpp | 12 + src/gui/entry/EditEntryWidgetAdvanced.ui | 25 +- src/gui/reports/ReportsWidgetHealthcheck.cpp | 118 +++++- src/gui/reports/ReportsWidgetHealthcheck.h | 6 +- src/gui/reports/ReportsWidgetHealthcheck.ui | 95 ++--- src/gui/reports/ReportsWidgetHibp.cpp | 132 ++++++- src/gui/reports/ReportsWidgetHibp.h | 7 +- src/gui/reports/ReportsWidgetHibp.ui | 372 ++++++++++-------- src/gui/reports/ReportsWidgetStatistics.cpp | 12 + src/gui/reports/ReportsWidgetStatistics.ui | 85 ++-- tests/gui/TestGui.cpp | 12 + utils/makeicons.sh | 2 + 20 files changed, 620 insertions(+), 279 deletions(-) create mode 100644 share/icons/application/scalable/actions/reports-exclude.svg create mode 100644 share/icons/application/scalable/actions/reports.svg diff --git a/COPYING b/COPYING index 9d430b7e9..453b8ab60 100644 --- a/COPYING +++ b/COPYING @@ -182,6 +182,8 @@ Files: share/icons/application/scalable/categories/preferences-other.svg share/icons/application/scalable/actions/document-save-as.svg share/icons/application/scalable/actions/refresh.svg share/icons/application/scalable/actions/clipboard-text.svg + share/icons/application/scalable/actions/reports.svg + share/icons/application/scalable/actions/reports-exclude.svg Copyright: 2019 Austin Andrews License: SIL OPEN FONT LICENSE Version 1.1 Comment: Taken from Material Design icon set (https://github.com/templarian/MaterialDesign/) diff --git a/share/demo.kdbx b/share/demo.kdbx index 1f2cb14727d90118ade3638829058f6abbf09acb..736fe7544ad1684e5d8e2ad709e37dcb40b7682f 100644 GIT binary patch literal 65637 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 \ No newline at end of file diff --git a/share/icons/application/scalable/actions/reports.svg b/share/icons/application/scalable/actions/reports.svg new file mode 100644 index 000000000..3d62971d2 --- /dev/null +++ b/share/icons/application/scalable/actions/reports.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/share/icons/icons.qrc b/share/icons/icons.qrc index 0e1150b6c..0f3ff6aff 100644 --- a/share/icons/icons.qrc +++ b/share/icons/icons.qrc @@ -50,7 +50,9 @@ application/scalable/actions/password-generator.svg application/scalable/actions/password-show-off.svg application/scalable/actions/password-show-on.svg - application/scalable/actions/refresh.svg + application/scalable/actions/refresh.svg + application/scalable/actions/reports.svg + application/scalable/actions/reports-exclude.svg application/scalable/actions/sort-alphabetical-ascending.svg application/scalable/actions/sort-alphabetical-descending.svg application/scalable/actions/statistics.svg diff --git a/src/core/PasswordHealth.cpp b/src/core/PasswordHealth.cpp index c179db77c..bb313170a 100644 --- a/src/core/PasswordHealth.cpp +++ b/src/core/PasswordHealth.cpp @@ -24,6 +24,9 @@ #include "PasswordHealth.h" #include "zxcvbn.h" +// Define the static member variable with the custom field name +const QString PasswordHealth::OPTION_KNOWN_BAD = QStringLiteral("KnownBad"); + PasswordHealth::PasswordHealth(double entropy) : m_score(entropy) , m_entropy(entropy) diff --git a/src/core/PasswordHealth.h b/src/core/PasswordHealth.h index 70f83eee7..ef3249380 100644 --- a/src/core/PasswordHealth.h +++ b/src/core/PasswordHealth.h @@ -83,6 +83,14 @@ public: return m_entropy; } + /** + * Name of custom data field that holds the "this is a known + * bad password" flag. Legal values of the field are TRUE_STR + * and FALSE_STR, the default (used if the field doesn't exist) + * is false. + */ + static const QString OPTION_KNOWN_BAD; + private: int m_score = 0; double m_entropy = 0.0; diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 0b3bb04aa..f20f3b9d1 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -355,7 +355,7 @@ MainWindow::MainWindow() m_ui->actionDatabaseSave->setIcon(resources()->icon("document-save")); m_ui->actionDatabaseSaveAs->setIcon(resources()->icon("document-save-as")); m_ui->actionDatabaseClose->setIcon(resources()->icon("document-close")); - m_ui->actionReports->setIcon(resources()->icon("help-about")); + m_ui->actionReports->setIcon(resources()->icon("reports")); m_ui->actionChangeDatabaseSettings->setIcon(resources()->icon("document-edit")); m_ui->actionChangeMasterKey->setIcon(resources()->icon("database-change-key")); m_ui->actionLockDatabases->setIcon(resources()->icon("database-lock")); diff --git a/src/gui/entry/EditEntryWidget.cpp b/src/gui/entry/EditEntryWidget.cpp index 90b49b3da..8f81d42cc 100644 --- a/src/gui/entry/EditEntryWidget.cpp +++ b/src/gui/entry/EditEntryWidget.cpp @@ -42,6 +42,7 @@ #include "core/Database.h" #include "core/Entry.h" #include "core/Metadata.h" +#include "core/PasswordHealth.h" #include "core/Resources.h" #include "core/TimeDelta.h" #include "core/Tools.h" @@ -423,6 +424,7 @@ void EditEntryWidget::setupEntryUpdate() // Advanced tab connect(m_advancedUi->attributesEdit, SIGNAL(textChanged()), this, SLOT(setModified())); connect(m_advancedUi->protectAttributeButton, SIGNAL(stateChanged(int)), this, SLOT(setModified())); + connect(m_advancedUi->knownBadCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified())); connect(m_advancedUi->fgColorCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified())); connect(m_advancedUi->bgColorCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setModified())); connect(m_advancedUi->attachmentsWidget, SIGNAL(widgetUpdated()), this, SLOT(setModified())); @@ -827,6 +829,9 @@ void EditEntryWidget::setForms(Entry* entry, bool restore) editTriggers = QAbstractItemView::DoubleClicked; } m_advancedUi->attributesView->setEditTriggers(editTriggers); + m_advancedUi->knownBadCheckBox->setChecked(entry->customData()->contains(PasswordHealth::OPTION_KNOWN_BAD) + && entry->customData()->value(PasswordHealth::OPTION_KNOWN_BAD) + == TRUE_STR); setupColorButton(true, entry->foregroundColor()); setupColorButton(false, entry->backgroundColor()); m_iconsWidget->setEnabled(!m_history); @@ -1031,6 +1036,13 @@ void EditEntryWidget::updateEntryData(Entry* entry) const entry->setNotes(m_mainUi->notesEdit->toPlainText()); + const auto wasKnownBad = entry->customData()->contains(PasswordHealth::OPTION_KNOWN_BAD) + && entry->customData()->value(PasswordHealth::OPTION_KNOWN_BAD) == TRUE_STR; + const auto isKnownBad = m_advancedUi->knownBadCheckBox->isChecked(); + if (isKnownBad != wasKnownBad) { + entry->customData()->set(PasswordHealth::OPTION_KNOWN_BAD, isKnownBad ? TRUE_STR : FALSE_STR); + } + if (m_advancedUi->fgColorCheckBox->isChecked() && m_advancedUi->fgColorButton->property("color").isValid()) { entry->setForegroundColor(m_advancedUi->fgColorButton->property("color").toString()); } else { diff --git a/src/gui/entry/EditEntryWidgetAdvanced.ui b/src/gui/entry/EditEntryWidgetAdvanced.ui index 7b079b676..8faa7a4f3 100644 --- a/src/gui/entry/EditEntryWidgetAdvanced.ui +++ b/src/gui/entry/EditEntryWidgetAdvanced.ui @@ -7,7 +7,7 @@ 0 0 532 - 374 + 469 @@ -174,9 +174,31 @@ + + + + <html><head/><body><p>If checked, the entry will not appear in reports like Health Check and HIBP even if it doesn't match the quality requirements (e. g. password entropy or re-use). You can set the check mark if the password is beyond your control (e. g. if it needs to be a four-digit PIN) to prevent it from cluttering the reports.</p></body></html> + + + Exclude from database reports + + + + + 0 + + + 0 + + + 0 + + + 0 + @@ -293,6 +315,7 @@ editAttributeButton protectAttributeButton revealAttributeButton + knownBadCheckBox fgColorCheckBox fgColorButton bgColorCheckBox diff --git a/src/gui/reports/ReportsWidgetHealthcheck.cpp b/src/gui/reports/ReportsWidgetHealthcheck.cpp index 6fa8e78a6..00194e182 100644 --- a/src/gui/reports/ReportsWidgetHealthcheck.cpp +++ b/src/gui/reports/ReportsWidgetHealthcheck.cpp @@ -20,11 +20,13 @@ #include "core/AsyncTask.h" #include "core/Database.h" +#include "core/Global.h" #include "core/Group.h" #include "core/PasswordHealth.h" #include "core/Resources.h" #include "gui/styles/StateColorPalette.h" +#include #include #include @@ -38,11 +40,14 @@ namespace QPointer group; QPointer entry; QSharedPointer health; + bool knownBad = false; Item(const Group* g, const Entry* e, QSharedPointer h) : group(g) , entry(e) , health(h) + , knownBad(e->customData()->contains(PasswordHealth::OPTION_KNOWN_BAD) + && e->customData()->value(PasswordHealth::OPTION_KNOWN_BAD) == TRUE_STR) { } @@ -59,10 +64,16 @@ namespace return m_items; } + bool anyKnownBad() const + { + return m_anyKnownBad; + } + private: QSharedPointer m_db; HealthChecker m_checker; QList> m_items; + bool m_anyKnownBad = false; }; } // namespace @@ -86,8 +97,13 @@ Health::Health(QSharedPointer db) continue; } - // Add entry if its password isn't at least "good" + // Evaluate this entry const auto item = QSharedPointer(new Item(group, entry, m_checker.evaluate(entry))); + if (item->knownBad) { + m_anyKnownBad = true; + } + + // Add entry if its password isn't at least "good" if (item->health->quality() < PasswordHealth::Quality::Good) { m_items.append(item); } @@ -110,8 +126,10 @@ ReportsWidgetHealthcheck::ReportsWidgetHealthcheck(QWidget* parent) m_ui->healthcheckTableView->setModel(m_referencesModel.data()); m_ui->healthcheckTableView->setSelectionMode(QAbstractItemView::NoSelection); m_ui->healthcheckTableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); + connect(m_ui->healthcheckTableView, SIGNAL(customContextMenuRequested(QPoint)), SLOT(customMenuRequested(QPoint))); connect(m_ui->healthcheckTableView, SIGNAL(doubleClicked(QModelIndex)), SLOT(emitEntryActivated(QModelIndex))); + connect(m_ui->showKnownBadCheckBox, SIGNAL(stateChanged(int)), this, SLOT(calculateHealth())); } ReportsWidgetHealthcheck::~ReportsWidgetHealthcheck() @@ -120,7 +138,8 @@ ReportsWidgetHealthcheck::~ReportsWidgetHealthcheck() void ReportsWidgetHealthcheck::addHealthRow(QSharedPointer health, const Group* group, - const Entry* entry) + const Entry* entry, + bool knownBad) { QString descr, tip; QColor qualityColor; @@ -151,9 +170,14 @@ void ReportsWidgetHealthcheck::addHealthRow(QSharedPointer healt break; } + auto title = entry->title(); + if (knownBad) { + title.append(tr(" (Excluded)")); + } + auto row = QList(); row << new QStandardItem(descr); - row << new QStandardItem(entry->iconPixmap(), entry->title()); + row << new QStandardItem(entry->iconPixmap(), title); row << new QStandardItem(group->iconPixmap(), group->hierarchy().join("/")); row << new QStandardItem(QString::number(health->score())); row << new QStandardItem(health->scoreReason()); @@ -167,6 +191,9 @@ void ReportsWidgetHealthcheck::addHealthRow(QSharedPointer healt // Set tooltips row[0]->setToolTip(tip); + if (knownBad) { + row[1]->setToolTip(tr("This entry is being excluded from reports")); + } row[4]->setToolTip(health->scoreDetails()); // Store entry pointer per table row (used in double click handler) @@ -201,21 +228,41 @@ void ReportsWidgetHealthcheck::calculateHealth() { m_referencesModel->clear(); + // Perform the health check const QScopedPointer health(AsyncTask::runAndWaitForFuture([this] { return new Health(m_db); })); - if (health->items().empty()) { - // No findings - m_referencesModel->clear(); + + // Display entries that are marked as "known bad"? + const auto showKnownBad = m_ui->showKnownBadCheckBox->isChecked(); + + // Display the entries + m_rowToEntry.clear(); + for (const auto& item : health->items()) { + if (item->knownBad && !showKnownBad) { + // Exclude this entry from the report + continue; + } + + // Show the entry in the report + addHealthRow(item->health, item->group, item->entry, item->knownBad); + } + + // Set the table header + if (m_referencesModel->rowCount() == 0) { m_referencesModel->setHorizontalHeaderLabels(QStringList() << tr("Congratulations, everything is healthy!")); } else { - // Show our findings m_referencesModel->setHorizontalHeaderLabels(QStringList() << tr("") << tr("Title") << tr("Path") << tr("Score") << tr("Reason")); - for (const auto& item : health->items()) { - addHealthRow(item->health, item->group, item->entry); - } } m_ui->healthcheckTableView->resizeRowsToContents(); + + // Show the "show known bad entries" checkbox if there's any known + // bad entry in the database. + if (health->anyKnownBad()) { + m_ui->showKnownBadCheckBox->show(); + } else { + m_ui->showKnownBadCheckBox->hide(); + } } void ReportsWidgetHealthcheck::emitEntryActivated(const QModelIndex& index) @@ -232,6 +279,57 @@ void ReportsWidgetHealthcheck::emitEntryActivated(const QModelIndex& index) } } +void ReportsWidgetHealthcheck::customMenuRequested(QPoint pos) +{ + + // Find which entry has been clicked + const auto index = m_ui->healthcheckTableView->indexAt(pos); + if (!index.isValid()) { + return; + } + m_contextmenuEntry = const_cast(m_rowToEntry[index.row()].second); + if (!m_contextmenuEntry) { + return; + } + + // Create the context menu + const auto menu = new QMenu(this); + + // Create the "edit entry" menu item + const auto edit = new QAction(Resources::instance()->icon("entry-edit"), tr("Edit Entry..."), this); + menu->addAction(edit); + connect(edit, SIGNAL(triggered()), SLOT(editFromContextmenu())); + + // Create the "exclude from reports" menu item + const auto knownbad = new QAction(Resources::instance()->icon("reports-exclude"), tr("Exclude from reports"), this); + knownbad->setCheckable(true); + knownbad->setChecked(m_contextmenuEntry->customData()->contains(PasswordHealth::OPTION_KNOWN_BAD) + && m_contextmenuEntry->customData()->value(PasswordHealth::OPTION_KNOWN_BAD) == TRUE_STR); + menu->addAction(knownbad); + connect(knownbad, SIGNAL(toggled(bool)), SLOT(toggleKnownBad(bool))); + + // Show the context menu + menu->popup(m_ui->healthcheckTableView->viewport()->mapToGlobal(pos)); +} + +void ReportsWidgetHealthcheck::editFromContextmenu() +{ + if (m_contextmenuEntry) { + emit entryActivated(m_contextmenuEntry); + } +} + +void ReportsWidgetHealthcheck::toggleKnownBad(bool isKnownBad) +{ + if (!m_contextmenuEntry) { + return; + } + + m_contextmenuEntry->customData()->set(PasswordHealth::OPTION_KNOWN_BAD, isKnownBad ? TRUE_STR : FALSE_STR); + + calculateHealth(); +} + void ReportsWidgetHealthcheck::saveSettings() { // nothing to do - the tab is passive diff --git a/src/gui/reports/ReportsWidgetHealthcheck.h b/src/gui/reports/ReportsWidgetHealthcheck.h index 86931c9db..ca848e686 100644 --- a/src/gui/reports/ReportsWidgetHealthcheck.h +++ b/src/gui/reports/ReportsWidgetHealthcheck.h @@ -54,9 +54,12 @@ signals: public slots: void calculateHealth(); void emitEntryActivated(const QModelIndex& index); + void customMenuRequested(QPoint); + void editFromContextmenu(); + void toggleKnownBad(bool); private: - void addHealthRow(QSharedPointer, const Group*, const Entry*); + void addHealthRow(QSharedPointer, const Group*, const Entry*, bool knownBad); QScopedPointer m_ui; @@ -65,6 +68,7 @@ private: QScopedPointer m_referencesModel; QSharedPointer m_db; QList> m_rowToEntry; + Entry* m_contextmenuEntry = nullptr; }; #endif // KEEPASSXC_REPORTSWIDGETHEALTHCHECK_H diff --git a/src/gui/reports/ReportsWidgetHealthcheck.ui b/src/gui/reports/ReportsWidgetHealthcheck.ui index 48d8df07f..202ca6b19 100644 --- a/src/gui/reports/ReportsWidgetHealthcheck.ui +++ b/src/gui/reports/ReportsWidgetHealthcheck.ui @@ -6,11 +6,11 @@ 0 0 - 327 + 505 379 - + 0 @@ -24,52 +24,53 @@ 0 - - - Health Check + + + Qt::CustomContextMenu + + + QAbstractItemView::NoEditTriggers + + + false + + + true + + + Qt::ElideMiddle + + + false + + + false + + + true + + + false + + + + + + + Also show entries that have been excluded from reports + + + + + + + + true + + + + Hover over reason to show additional details. Double-click entries to edit. - - - - - QAbstractItemView::NoEditTriggers - - - false - - - true - - - Qt::ElideMiddle - - - false - - - true - - - true - - - false - - - - - - - - true - - - - Hover over reason to show additional details. Double-click entries to edit. - - - - diff --git a/src/gui/reports/ReportsWidgetHibp.cpp b/src/gui/reports/ReportsWidgetHibp.cpp index d4c3e447b..3678c2932 100644 --- a/src/gui/reports/ReportsWidgetHibp.cpp +++ b/src/gui/reports/ReportsWidgetHibp.cpp @@ -20,11 +20,32 @@ #include "config-keepassx.h" #include "core/Database.h" +#include "core/Global.h" #include "core/Group.h" +#include "core/PasswordHealth.h" +#include "core/Resources.h" #include "gui/MessageBox.h" +#include #include +namespace +{ + /* + * Check if an entry has been marked as "known bad password". + * These entries are to be excluded from the HIBP report. + * + * Question to reviewer: Should this be a member function of Entry? + * It's duplicated in EditEntryWidget::setForms, EditEntryWidget::updateEntryData, + * ReportsWidgetHealthcheck::customMenuRequested, and Health::Item::Item. + */ + bool isKnownBad(const Entry* entry) + { + return entry->customData()->contains(PasswordHealth::OPTION_KNOWN_BAD) + && entry->customData()->value(PasswordHealth::OPTION_KNOWN_BAD) == TRUE_STR; + } +} // namespace + ReportsWidgetHibp::ReportsWidgetHibp(QWidget* parent) : QWidget(parent) , m_ui(new Ui::ReportsWidgetHibp()) @@ -37,6 +58,8 @@ ReportsWidgetHibp::ReportsWidgetHibp(QWidget* parent) m_ui->hibpTableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); connect(m_ui->hibpTableView, SIGNAL(doubleClicked(QModelIndex)), SLOT(emitEntryActivated(QModelIndex))); + connect(m_ui->hibpTableView, SIGNAL(customContextMenuRequested(QPoint)), SLOT(customMenuRequested(QPoint))); + connect(m_ui->showKnownBadCheckBox, SIGNAL(stateChanged(int)), this, SLOT(makeHibpTable())); #ifdef WITH_XC_NETWORKING connect(&m_downloader, SIGNAL(hibpResult(QString, int)), SLOT(addHibpResult(QString, int))); connect(&m_downloader, SIGNAL(fetchFailed(QString)), SLOT(fetchFailed(QString))); @@ -104,18 +127,43 @@ void ReportsWidgetHibp::makeHibpTable() return lhs.second > rhs.second; }); + // Display entries that are marked as "known bad"? + const auto showKnownBad = m_ui->showKnownBadCheckBox->isChecked(); + + // The colors for table cells + const auto red = QBrush("red"); + // Build the table + bool anyKnownBad = false; for (const auto& item : items) { const auto entry = item.first; const auto group = entry->group(); const auto count = item.second; + auto title = entry->title(); + + // If the entry is marked as known bad, hide it unless the + // checkbox is set. + bool knownBad = isKnownBad(entry); + if (knownBad) { + anyKnownBad = true; + if (!showKnownBad) { + continue; + } + + title.append(tr(" (Excluded)")); + } auto row = QList(); - row << new QStandardItem(entry->iconPixmap(), entry->title()) + row << new QStandardItem(entry->iconPixmap(), title) << new QStandardItem(group->iconPixmap(), group->hierarchy().join("/")) << new QStandardItem(countToText(count)); + + if (knownBad) { + row[1]->setToolTip(tr("This entry is being excluded from reports")); + } + + row[2]->setForeground(red); m_referencesModel->appendRow(row); - row[2]->setForeground(QBrush(QColor("red"))); // Store entry pointer per table row (used in double click handler) m_rowToEntry.append(entry); @@ -129,6 +177,22 @@ void ReportsWidgetHibp::makeHibpTable() row[0]->setForeground(QBrush(QColor("red"))); } + // If we're done and everything is good, display a motivational message +#ifdef WITH_XC_NETWORKING + if (m_downloader.passwordsRemaining() == 0 && m_pwndPasswords.isEmpty() && m_error.isEmpty()) { + m_referencesModel->clear(); + m_referencesModel->setHorizontalHeaderLabels(QStringList() << tr("Congratulations, no exposed passwords!")); + } +#endif + + // Show the "show known bad entries" checkbox if there's any known + // bad entry in the database. + if (anyKnownBad) { + m_ui->showKnownBadCheckBox->show(); + } else { + m_ui->showKnownBadCheckBox->hide(); + } + m_ui->hibpTableView->resizeRowsToContents(); m_ui->stackedWidget->setCurrentIndex(1); @@ -176,7 +240,8 @@ void ReportsWidgetHibp::startValidation() { #ifdef WITH_XC_NETWORKING // Collect all passwords in the database (unless recycled, and - // unless empty) and submit them to the downloader. + // unless empty, and unless marked as "known bad") and submit them + // to the downloader. for (const auto* entry : m_db->rootGroup()->entriesRecursive()) { if (!entry->isRecycled() && !entry->password().isEmpty()) { m_downloader.add(entry->password()); @@ -238,6 +303,7 @@ void ReportsWidgetHibp::emitEntryActivated(const QModelIndex& index) // Found it, invoke entry editor m_editedEntry = entry; m_editedPassword = entry->password(); + m_editedKnownBad = isKnownBad(entry); emit entryActivated(const_cast(entry)); } } @@ -253,8 +319,13 @@ void ReportsWidgetHibp::refreshAfterEdit() return; } - // No need to re-validate if there was no change - if (m_editedEntry->password() == m_editedPassword) { + // No need to re-validate if there was no change that affects + // the HIBP result (i. e., change to the password or to the + // "known bad" flag) + if (m_editedEntry->password() == m_editedPassword && isKnownBad(m_editedEntry) == m_editedKnownBad) { + // Don't go through HIBP but still rebuild the table, the user might + // have edited the entry title. + makeHibpTable(); return; } @@ -270,6 +341,57 @@ void ReportsWidgetHibp::refreshAfterEdit() m_editedEntry = nullptr; } +void ReportsWidgetHibp::customMenuRequested(QPoint pos) +{ + + // Find which entry has been clicked + const auto index = m_ui->hibpTableView->indexAt(pos); + if (!index.isValid()) { + return; + } + m_contextmenuEntry = const_cast(m_rowToEntry[index.row()]); + if (!m_contextmenuEntry) { + return; + } + + // Create the context menu + const auto menu = new QMenu(this); + + // Create the "edit entry" menu item + const auto edit = new QAction(Resources::instance()->icon("entry-edit"), tr("Edit Entry..."), this); + menu->addAction(edit); + connect(edit, SIGNAL(triggered()), SLOT(editFromContextmenu())); + + // Create the "exclude from reports" menu item + const auto knownbad = new QAction(Resources::instance()->icon("reports-exclude"), tr("Exclude from reports"), this); + knownbad->setCheckable(true); + knownbad->setChecked(m_contextmenuEntry->customData()->contains(PasswordHealth::OPTION_KNOWN_BAD) + && m_contextmenuEntry->customData()->value(PasswordHealth::OPTION_KNOWN_BAD) == TRUE_STR); + menu->addAction(knownbad); + connect(knownbad, SIGNAL(toggled(bool)), SLOT(toggleKnownBad(bool))); + + // Show the context menu + menu->popup(m_ui->hibpTableView->viewport()->mapToGlobal(pos)); +} + +void ReportsWidgetHibp::editFromContextmenu() +{ + if (m_contextmenuEntry) { + emit entryActivated(m_contextmenuEntry); + } +} + +void ReportsWidgetHibp::toggleKnownBad(bool isKnownBad) +{ + if (!m_contextmenuEntry) { + return; + } + + m_contextmenuEntry->customData()->set(PasswordHealth::OPTION_KNOWN_BAD, isKnownBad ? TRUE_STR : FALSE_STR); + + makeHibpTable(); +} + void ReportsWidgetHibp::saveSettings() { // nothing to do - the tab is passive diff --git a/src/gui/reports/ReportsWidgetHibp.h b/src/gui/reports/ReportsWidgetHibp.h index cd8456121..f7d1a754b 100644 --- a/src/gui/reports/ReportsWidgetHibp.h +++ b/src/gui/reports/ReportsWidgetHibp.h @@ -58,9 +58,12 @@ public slots: void emitEntryActivated(const QModelIndex&); void addHibpResult(const QString&, int); void fetchFailed(const QString& error); + void makeHibpTable(); + void customMenuRequested(QPoint); + void editFromContextmenu(); + void toggleKnownBad(bool); private: - void makeHibpTable(); void startValidation(); static QString countToText(int count); @@ -73,6 +76,8 @@ private: QList m_rowToEntry; // List index is table row QPointer m_editedEntry; // The entry we're currently editing QString m_editedPassword; // The old password of the entry we're editing + bool m_editedKnownBad; // The old "known bad" flag of the entry we're editing + Entry* m_contextmenuEntry = nullptr; // The entry that was right-clicked #ifdef WITH_XC_NETWORKING HibpDownloader m_downloader; // This performs the actual HIBP online query diff --git a/src/gui/reports/ReportsWidgetHibp.ui b/src/gui/reports/ReportsWidgetHibp.ui index bda5da6fd..af5931193 100644 --- a/src/gui/reports/ReportsWidgetHibp.ui +++ b/src/gui/reports/ReportsWidgetHibp.ui @@ -11,176 +11,218 @@ + + 0 + + + 0 + + + 0 + + + 0 + - - - Have I Been Pwned? + + + 1 - - - - - 0 - - - - - 15 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - - 450 - 16777215 - - - - CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. - - - true - - - - - - - - - 0 - - - - - - 275 - 16777215 - - - - Perform Online Analysis - - - true - - - - - - - - - 0 - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - + + + + 15 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + 450 + 16777215 + + + + CAUTION: This report requires sending information to the Have I Been Pwned online service (https://haveibeenpwned.com). If you proceed, your database passwords will be cryptographically hashed and the first five characters of those hashes will be sent securely to this service. Your database remains secure and cannot be reconstituted from this information. However, the number of passwords you send and your IP address will be exposed to this service. + + + true + + + + + + + + + 0 + + + + + + 275 + 16777215 + + + + Perform Online Analysis + + + true + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + 0 + - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - QAbstractItemView::NoEditTriggers - - - false - - - true - - - Qt::ElideMiddle - - - false - - - true - - - false - - - - + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::CustomContextMenu + + + QAbstractItemView::NoEditTriggers + + + false + + + true + + + Qt::ElideMiddle + + + false + + + false + + + true + + + false + - - - - - - - 450 - 16777215 - - - - This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. - - - true - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - + + + + + Also show entries that have been excluded from reports + - - - + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + 450 + 16777215 + + + + This build of KeePassXC does not have network functions. Networking is required to check your passwords against Have I Been Pwned databases. + + + true + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + diff --git a/src/gui/reports/ReportsWidgetStatistics.cpp b/src/gui/reports/ReportsWidgetStatistics.cpp index f5a99b363..400d82f29 100644 --- a/src/gui/reports/ReportsWidgetStatistics.cpp +++ b/src/gui/reports/ReportsWidgetStatistics.cpp @@ -20,6 +20,7 @@ #include "core/AsyncTask.h" #include "core/Database.h" +#include "core/Global.h" #include "core/Group.h" #include "core/Metadata.h" #include "core/PasswordHealth.h" @@ -43,6 +44,7 @@ namespace int nPwdsShort = 0; // Number of passwords 8 characters or less in size int nPwdsUnique = 0; // Number of unique passwords int nPwdsReused = 0; // Number of non-unique passwords + int nKnownBad = 0; // Number of known bad entries int pwdTotalLen = 0; // Total length of all passwords // Ctor does all the work @@ -138,6 +140,11 @@ namespace ++nPwdsWeak; } + if (entry->customData()->contains(PasswordHealth::OPTION_KNOWN_BAD) + && entry->customData()->value(PasswordHealth::OPTION_KNOWN_BAD) == TRUE_STR) { + ++nKnownBad; + } + pwdTotalLen += pwd.size(); m_passwords[pwd]++; } @@ -235,6 +242,11 @@ void ReportsWidgetStatistics::calculateStats() QString::number(stats->nPwdsWeak), stats->nPwdsWeak > 0, tr("Recommend using long, randomized passwords with a rating of 'good' or 'excellent'.")); + addStatsRow(tr("Entries excluded from reports"), + QString::number(stats->nKnownBad), + stats->nKnownBad > 0, + tr("Excluding entries from reports, e. g. because they are known to have a poor password, isn't " + "necessarily a problem but you should keep an eye on them.")); addStatsRow(tr("Average password length"), tr("%1 characters").arg(stats->averagePwdLength()), stats->isAvgPwdTooShort(), diff --git a/src/gui/reports/ReportsWidgetStatistics.ui b/src/gui/reports/ReportsWidgetStatistics.ui index 1f3bf5fea..4b96dc51a 100644 --- a/src/gui/reports/ReportsWidgetStatistics.ui +++ b/src/gui/reports/ReportsWidgetStatistics.ui @@ -6,11 +6,11 @@ 0 0 - 327 + 397 379 - + 0 @@ -24,52 +24,43 @@ 0 - - - Statistics + + + QAbstractItemView::NoEditTriggers + + + false + + + true + + + Qt::ElideMiddle + + + false + + + false + + + true + + + false + + + + + + + + true + + + + Hover over lines with error icons for further information. - - - - - QAbstractItemView::NoEditTriggers - - - false - - - true - - - Qt::ElideMiddle - - - false - - - false - - - true - - - false - - - - - - - - true - - - - Hover over lines with error icons for further information. - - - - diff --git a/tests/gui/TestGui.cpp b/tests/gui/TestGui.cpp index 3b97ffde8..7ce8a0f4a 100644 --- a/tests/gui/TestGui.cpp +++ b/tests/gui/TestGui.cpp @@ -45,6 +45,7 @@ #include "core/Entry.h" #include "core/Group.h" #include "core/Metadata.h" +#include "core/PasswordHealth.h" #include "core/Tools.h" #include "crypto/Crypto.h" #include "crypto/kdf/AesKdf.h" @@ -442,6 +443,17 @@ void TestGui::testEditEntry() QCOMPARE(entry->historyItems().size(), ++editCount); QVERIFY(!applyButton->isEnabled()); + // Test the "known bad" checkbox + editEntryWidget->setCurrentPage(1); + auto knownBadCheckBox = editEntryWidget->findChild("knownBadCheckBox"); + QVERIFY(knownBadCheckBox); + QCOMPARE(knownBadCheckBox->isChecked(), false); + knownBadCheckBox->setChecked(true); + QTest::mouseClick(applyButton, Qt::LeftButton); + QCOMPARE(entry->historyItems().size(), ++editCount); + QCOMPARE(entry->customData()->contains(PasswordHealth::OPTION_KNOWN_BAD), true); + QCOMPARE(entry->customData()->value(PasswordHealth::OPTION_KNOWN_BAD), TRUE_STR); + // Test entry colors (simulate choosing a color) editEntryWidget->setCurrentPage(1); auto fgColor = QString("#FF0000"); diff --git a/utils/makeicons.sh b/utils/makeicons.sh index d4a8848e1..61ee74e4d 100644 --- a/utils/makeicons.sh +++ b/utils/makeicons.sh @@ -117,6 +117,8 @@ map() { preferences-other) echo file-document-edit-outline ;; preferences-desktop-icons) echo emoticon-happy-outline ;; preferences-system-network-sharing) echo lan ;; + reports) echo lightbulb-on-outline ;; + reports-exclude) echo lightbulb-off-outline ;; security-high) echo shield-outline ;; sort-alphabetical-ascending) echo sort-alphabetical-ascending ;; sort-alphabetical-descending) echo sort-alphabetical-descending ;;