From e11c9a049f448024372d47b0bee40d75a08e2294 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 8 Nov 2019 13:21:37 +0100 Subject: [PATCH] [users] Sort the password checks before applying them --- src/modules/users/CheckPWQuality.h | 1 + src/modules/users/UsersPage.cpp | 8 ++++++++ src/modules/users/UsersPage.h | 1 + 3 files changed, 10 insertions(+) diff --git a/src/modules/users/CheckPWQuality.h b/src/modules/users/CheckPWQuality.h index 5d4b8108a..1aeb34ba8 100644 --- a/src/modules/users/CheckPWQuality.h +++ b/src/modules/users/CheckPWQuality.h @@ -60,6 +60,7 @@ public: QString filter( const QString& s ) const { return m_accept( s ) ? QString() : m_message(); } Weight weight() const { return m_weight; } + bool operator<( const PasswordCheck& other ) const { return weight() < other.weight(); } private: Weight m_weight; diff --git a/src/modules/users/UsersPage.cpp b/src/modules/users/UsersPage.cpp index 9a3043a34..74bf67655 100644 --- a/src/modules/users/UsersPage.cpp +++ b/src/modules/users/UsersPage.cpp @@ -424,6 +424,12 @@ UsersPage::checkPasswordAcceptance( const QString& pw1, const QString& pw2, QLab bool failureIsFatal = ui->checkBoxValidatePassword->isChecked(); bool failureFound = false; + if ( m_passwordChecksChanged ) + { + std::sort( m_passwordChecks.begin(), m_passwordChecks.end() ); + m_passwordChecksChanged = false; + } + for ( auto pc : m_passwordChecks ) { QString s = pc.filter( pw1 ); @@ -502,6 +508,8 @@ UsersPage::setReusePasswordDefault( bool checked ) void UsersPage::addPasswordCheck( const QString& key, const QVariant& value ) { + m_passwordChecksChanged = true; + if ( key == "minLength" ) { add_check_minLength( m_passwordChecks, value ); diff --git a/src/modules/users/UsersPage.h b/src/modules/users/UsersPage.h index a2befbd26..c6bf87ecf 100644 --- a/src/modules/users/UsersPage.h +++ b/src/modules/users/UsersPage.h @@ -90,6 +90,7 @@ private: Ui::Page_UserSetup* ui; PasswordCheckList m_passwordChecks; + bool m_passwordChecksChanged = false; bool m_readyFullName; bool m_readyUsername;