allow automatic expiration date extension on pwd modification

Addressed issue #2010

Creates a new Expiration Settings area in the Edit Entry widget, composed
of the expiration date settings and a new optional feature that allows for
automatic extension of the expiration date on password modification.
This commit is contained in:
Xavier Valls 2021-04-27 17:56:39 +02:00
parent fd0bdaae80
commit fa785e1745
3 changed files with 124 additions and 59 deletions

View File

@ -168,7 +168,7 @@ void EditEntryWidget::setupMain()
m_mainUi->urlEdit->enableVerifyMode(); m_mainUi->urlEdit->enableVerifyMode();
#endif #endif
connect(m_mainUi->expireCheck, &QCheckBox::toggled, [&](bool enabled) { connect(m_mainUi->expireCheck, &QCheckBox::toggled, [&](bool enabled) {
m_mainUi->expireDatePicker->setEnabled(enabled); m_mainUi->expirationBox->setEnabled(enabled);
if (enabled) { if (enabled) {
m_mainUi->expireDatePicker->setDateTime(Clock::currentDateTime()); m_mainUi->expireDatePicker->setDateTime(Clock::currentDateTime());
} }
@ -178,6 +178,21 @@ void EditEntryWidget::setupMain()
m_mainUi->expirePresets->setMenu(createPresetsMenu()); m_mainUi->expirePresets->setMenu(createPresetsMenu());
connect(m_mainUi->expirePresets->menu(), SIGNAL(triggered(QAction*)), this, SLOT(useExpiryPreset(QAction*))); connect(m_mainUi->expirePresets->menu(), SIGNAL(triggered(QAction*)), this, SLOT(useExpiryPreset(QAction*)));
m_mainUi->extendPresets->setMenu(createPresetsMenu());
connect(m_mainUi->extendPresets->menu(), &QMenu::triggered, this, [&](QAction* action) {
m_extensionOnPwUpdate = action->data().value<TimeDelta>();
});
connect(m_mainUi->autoExtendExpire, &QCheckBox::toggled, [&](bool enabled) {
m_mainUi->extendPresets->setEnabled(enabled);
});
connect(m_mainUi->passwordEdit, &QLineEdit::textChanged, this, [&]() {
if (m_mainUi->extendPresets->isEnabled()) {
TimeDelta delta = m_extensionOnPwUpdate;
QDateTime now = Clock::currentDateTime();
QDateTime expiryDateTime = now + delta;
m_mainUi->expireDatePicker->setDateTime(expiryDateTime);
}
});
} }
void EditEntryWidget::setupAdvanced() void EditEntryWidget::setupAdvanced()

View File

@ -28,6 +28,7 @@
#include <QTimer> #include <QTimer>
#include "config-keepassx.h" #include "config-keepassx.h"
#include "core/TimeDelta.h"
#include "gui/EditWidget.h" #include "gui/EditWidget.h"
class AutoTypeAssociations; class AutoTypeAssociations;
@ -162,6 +163,7 @@ private:
QPointer<Entry> m_entry; QPointer<Entry> m_entry;
QSharedPointer<Database> m_db; QSharedPointer<Database> m_db;
TimeDelta m_extensionOnPwUpdate;
bool m_create; bool m_create;
bool m_history; bool m_history;
#ifdef WITH_XC_SSHAGENT #ifdef WITH_XC_SSHAGENT

View File

@ -56,7 +56,7 @@
<property name="verticalSpacing"> <property name="verticalSpacing">
<number>8</number> <number>8</number>
</property> </property>
<item row="6" column="1"> <item row="7" column="1">
<layout class="QVBoxLayout" name="verticalLayout_2"> <layout class="QVBoxLayout" name="verticalLayout_2">
<item> <item>
<widget class="QPlainTextEdit" name="notesEdit"> <widget class="QPlainTextEdit" name="notesEdit">
@ -99,7 +99,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="0"> <item row="7" column="0">
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<item> <item>
<widget class="QCheckBox" name="notesEnabled"> <widget class="QCheckBox" name="notesEnabled">
@ -129,45 +129,6 @@
</item> </item>
</layout> </layout>
</item> </item>
<item row="5" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>8</number>
</property>
<item>
<widget class="QDateTimeEdit" name="expireDatePicker">
<property name="enabled">
<bool>false</bool>
</property>
<property name="accessibleName">
<string>Expiration field</string>
</property>
<property name="calendarPopup">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="expirePresets">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Expiration Presets</string>
</property>
<property name="accessibleName">
<string>Expiration presets</string>
</property>
<property name="text">
<string>Presets</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0"> <item row="2" column="0">
<widget class="QLabel" name="passwordLabel"> <widget class="QLabel" name="passwordLabel">
<property name="text"> <property name="text">
@ -252,25 +213,112 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="0"> <item row="5" column="1">
<layout class="QHBoxLayout" name="horizontalLayout"> <widget class="QCheckBox" name="expireCheck">
<property name="spacing"> <property name="toolTip">
<number>0</number> <string>Toggle expiration</string>
</property> </property>
<item> <property name="accessibleName">
<widget class="QCheckBox" name="expireCheck"> <string>Toggle expiration</string>
<property name="toolTip"> </property>
<string>Toggle expiration</string> <property name="text">
</property> <string>Configure an expiration date</string>
<property name="accessibleName"> </property>
<string>Toggle expiration</string> </widget>
</property> </item>
<property name="text"> <item row="6" column="1">
<string>Expires:</string> <widget class="QGroupBox" name="expirationBox">
</property> <property name="enabled">
</widget> <bool>false</bool>
</property>
<property name="title">
<string>Expiration settings</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_expiration">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_expiration">
<property name="spacing">
<number>0</number>
</property>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>8</number>
</property>
<item>
<widget class="QDateTimeEdit" name="expireDatePicker">
<property name="accessibleName">
<string>Expiration field</string>
</property>
<property name="calendarPopup">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="expirePresets">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Expiration Presets</string>
</property>
<property name="accessibleName">
<string>Expiration presets</string>
</property>
<property name="text">
<string>Presets</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalautoUpdate">
<item>
<widget class="QCheckBox" name="autoExtendExpire">
<property name="toolTip">
<string>Toggle auto updating expiration</string>
</property>
<property name="accessibleName">
<string>Toggle auto updating expiration date</string>
</property>
<property name="text">
<string>Automatically extend expiration date on password modification by</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="extendPresets">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Expiration extension Presets</string>
</property>
<property name="accessibleName">
<string>Expiration extension presets</string>
</property>
<property name="text">
<string>Time</string>
</property>
</widget>
</item>
</layout>
</item> </item>
</layout> </layout>
</widget>
</item> </item>
</layout> </layout>
</widget> </widget>