Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/keepassxreboot/keepassxc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorBalazs Gyurak <ba32107@gmail.com>2022-01-22 21:20:41 +0300
committerJonathan White <support@dmapps.us>2022-01-31 15:19:45 +0300
commit6897787d8f923991b8f4bbd0a006744f5c2221c3 (patch)
tree1ff7d5b3a2bccca43478b1445e0689e19c8f70ec /src/gui
parent3c824cb500f5403fe925f591ee45f1e6abf20ae7 (diff)
Show expired entries on DB unlock
* Show banner message about expired entries * Add config option and expiration offset * Only show expiry warning on first DB unlock * Default to on with 3-day offset from expiration
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/ApplicationSettingsWidget.cpp18
-rw-r--r--src/gui/ApplicationSettingsWidget.h1
-rw-r--r--src/gui/ApplicationSettingsWidgetGeneral.ui69
-rw-r--r--src/gui/DatabaseWidget.cpp22
4 files changed, 110 insertions, 0 deletions
diff --git a/src/gui/ApplicationSettingsWidget.cpp b/src/gui/ApplicationSettingsWidget.cpp
index ac96d23b4..61a3cc0f5 100644
--- a/src/gui/ApplicationSettingsWidget.cpp
+++ b/src/gui/ApplicationSettingsWidget.cpp
@@ -120,6 +120,8 @@ ApplicationSettingsWidget::ApplicationSettingsWidget(QWidget* parent)
connect(m_generalUi->backupBeforeSaveCheckBox, SIGNAL(toggled(bool)),
m_generalUi->backupFilePathPicker, SLOT(setEnabled(bool)));
connect(m_generalUi->backupFilePathPicker, SIGNAL(pressed()), SLOT(selectBackupDirectory()));
+ connect(m_generalUi->showExpiredEntriesOnDatabaseUnlockCheckBox, SIGNAL(toggled(bool)),
+ SLOT(showExpiredEntriesOnDatabaseUnlockToggled(bool)));
connect(m_secUi->clearClipboardCheckBox, SIGNAL(toggled(bool)),
m_secUi->clearClipboardSpinBox, SLOT(setEnabled(bool)));
@@ -251,6 +253,12 @@ void ApplicationSettingsWidget::loadSettings()
m_generalUi->checkForUpdatesIncludeBetasCheckBox->setChecked(
config()->get(Config::GUI_CheckForUpdatesIncludeBetas).toBool());
+ m_generalUi->showExpiredEntriesOnDatabaseUnlockCheckBox->setChecked(
+ config()->get(Config::GUI_ShowExpiredEntriesOnDatabaseUnlock).toBool());
+ m_generalUi->showExpiredEntriesOnDatabaseUnlockOffsetSpinBox->setValue(
+ config()->get(Config::GUI_ShowExpiredEntriesOnDatabaseUnlockOffsetDays).toInt());
+ showExpiredEntriesOnDatabaseUnlockToggled(m_generalUi->showExpiredEntriesOnDatabaseUnlockCheckBox->isChecked());
+
m_generalUi->autoTypeAskCheckBox->setChecked(config()->get(Config::Security_AutoTypeAsk).toBool());
if (autoType()->isAvailable()) {
@@ -378,6 +386,11 @@ void ApplicationSettingsWidget::saveSettings()
config()->set(Config::GUI_CheckForUpdatesIncludeBetas,
m_generalUi->checkForUpdatesIncludeBetasCheckBox->isChecked());
+ config()->set(Config::GUI_ShowExpiredEntriesOnDatabaseUnlock,
+ m_generalUi->showExpiredEntriesOnDatabaseUnlockCheckBox->isChecked());
+ config()->set(Config::GUI_ShowExpiredEntriesOnDatabaseUnlockOffsetDays,
+ m_generalUi->showExpiredEntriesOnDatabaseUnlockOffsetSpinBox->value());
+
config()->set(Config::Security_AutoTypeAsk, m_generalUi->autoTypeAskCheckBox->isChecked());
if (autoType()->isAvailable()) {
@@ -520,6 +533,11 @@ void ApplicationSettingsWidget::checkUpdatesToggled(bool checked)
m_generalUi->checkForUpdatesIncludeBetasCheckBox->setEnabled(checked);
}
+void ApplicationSettingsWidget::showExpiredEntriesOnDatabaseUnlockToggled(bool checked)
+{
+ m_generalUi->showExpiredEntriesOnDatabaseUnlockOffsetSpinBox->setEnabled(checked);
+}
+
void ApplicationSettingsWidget::selectBackupDirectory()
{
auto backupDirectory =
diff --git a/src/gui/ApplicationSettingsWidget.h b/src/gui/ApplicationSettingsWidget.h
index c5f2ed7e3..15fc5a344 100644
--- a/src/gui/ApplicationSettingsWidget.h
+++ b/src/gui/ApplicationSettingsWidget.h
@@ -62,6 +62,7 @@ private slots:
void systrayToggled(bool checked);
void rememberDatabasesToggled(bool checked);
void checkUpdatesToggled(bool checked);
+ void showExpiredEntriesOnDatabaseUnlockToggled(bool checked);
void selectBackupDirectory();
private:
diff --git a/src/gui/ApplicationSettingsWidgetGeneral.ui b/src/gui/ApplicationSettingsWidgetGeneral.ui
index e4abc647b..f0404b215 100644
--- a/src/gui/ApplicationSettingsWidgetGeneral.ui
+++ b/src/gui/ApplicationSettingsWidgetGeneral.ui
@@ -234,6 +234,73 @@
</item>
</layout>
</item>
+ <item>
+ <layout class="QGridLayout" name="showExpiredEntriesSubLayout">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetMaximumSize</enum>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <item row="0" column="0">
+ <widget class="QCheckBox" name="showExpiredEntriesOnDatabaseUnlockCheckBox">
+ <property name="text">
+ <string>On database unlock, show entries that </string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QSpinBox" name="showExpiredEntriesOnDatabaseUnlockOffsetSpinBox">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
+ <property name="accessibleName">
+ <string>On database unlock, show entries that </string>
+ </property>
+ <property name="prefix">
+ <string>will expire within </string>
+ </property>
+ <property name="suffix">
+ <string> days</string>
+ </property>
+ <property name="minimum">
+ <number>0</number>
+ </property>
+ <property name="maximum">
+ <number>30</number>
+ </property>
+ <property name="value">
+ <number>0</number>
+ </property>
+ <property name="specialValueText">
+ <string>are expired</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <spacer name="showExpiredEntriesSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
</layout>
</widget>
</item>
@@ -1138,6 +1205,8 @@
<tabstop>rememberLastKeyFilesCheckBox</tabstop>
<tabstop>checkForUpdatesOnStartupCheckBox</tabstop>
<tabstop>checkForUpdatesIncludeBetasCheckBox</tabstop>
+ <tabstop>showExpiredEntriesOnDatabaseUnlockCheckBox</tabstop>
+ <tabstop>showExpiredEntriesOnDatabaseUnlockOffsetSpinBox</tabstop>
<tabstop>autoSaveAfterEveryChangeCheckBox</tabstop>
<tabstop>autoSaveOnExitCheckBox</tabstop>
<tabstop>autoSaveNonDataChangesCheckBox</tabstop>
diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp
index b97aaf973..c974c1c9b 100644
--- a/src/gui/DatabaseWidget.cpp
+++ b/src/gui/DatabaseWidget.cpp
@@ -1119,7 +1119,29 @@ void DatabaseWidget::loadDatabase(bool accepted)
replaceDatabase(openWidget->database());
switchToMainView();
processAutoOpen();
+
restoreGroupEntryFocus(m_groupBeforeLock, m_entryBeforeLock);
+
+ // Only show expired entries if first unlock and option is enabled
+ if (m_groupBeforeLock.isNull() && config()->get(Config::GUI_ShowExpiredEntriesOnDatabaseUnlock).toBool()) {
+ int expirationOffset = config()->get(Config::GUI_ShowExpiredEntriesOnDatabaseUnlockOffsetDays).toInt();
+ QList<Entry*> expiredEntries;
+ for (auto entry : m_db->rootGroup()->entriesRecursive()) {
+ if (entry->willExpireInDays(expirationOffset) && !entry->excludeFromReports() && !entry->isRecycled()) {
+ expiredEntries << entry;
+ }
+ }
+
+ if (!expiredEntries.isEmpty()) {
+ m_entryView->displaySearch(expiredEntries);
+ m_entryView->setFirstEntryActive();
+ m_searchingLabel->setText(expirationOffset == 0
+ ? tr("Expired entries")
+ : tr("Entries expiring within %1 days").arg(expirationOffset));
+ m_searchingLabel->setVisible(true);
+ }
+ }
+
m_groupBeforeLock = QUuid();
m_entryBeforeLock = QUuid();
m_saveAttempts = 0;