File indexing completed on 2024-06-09 04:58:56
0001 /* 0002 SPDX-FileCopyrightText: 2022-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "passwordsettingswidget.h" 0008 #include <KLocalizedString> 0009 #include <QCheckBox> 0010 #include <QFont> 0011 #include <QFormLayout> 0012 #include <QLabel> 0013 #include <QSpinBox> 0014 0015 PasswordSettingsWidget::PasswordSettingsWidget(RocketChatAccount *account, QWidget *parent) 0016 : SettingsWidgetBase(account, parent) 0017 , mEnablePasswordHistory(new QCheckBox(i18n("Enable Password History"), this)) 0018 , mPasswordHistoryLength(new QSpinBox(this)) 0019 , mEnablePasswordPolicy(new QCheckBox(i18n("Enable Password Policy"), this)) 0020 , mMinimumLength(new QSpinBox(this)) 0021 , mMaximumLength(new QSpinBox(this)) 0022 , mForbidRepeatingCharacters(new QCheckBox(i18n("Forbid Repeating Characters"), this)) 0023 , mMaxRepeatingCharacters(new QSpinBox(this)) 0024 , mAtLeastOneLowercase(new QCheckBox(i18n("At Least One Lowercase"), this)) 0025 , mAtLeastOneUppercase(new QCheckBox(i18n("At Least One Uppercase"), this)) 0026 , mAtLeastOneNumber(new QCheckBox(i18n("At Least One Number"), this)) 0027 , mAtLeastOneSymbol(new QCheckBox(i18n("At Least One Symbol"), this)) 0028 { 0029 auto historyLabel = createBoldLabel(i18n("Password History")); 0030 historyLabel->setObjectName(QStringLiteral("historyLabel")); 0031 mMainLayout->addWidget(historyLabel); 0032 0033 mEnablePasswordHistory->setObjectName(QStringLiteral("mEnablePasswordHistory")); 0034 mEnablePasswordHistory->setToolTip(i18n("When enabled, users won't be able to update their passwords to some of their most recently used passwords.")); 0035 mMainLayout->addWidget(mEnablePasswordHistory); 0036 connectCheckBox(mEnablePasswordHistory, QStringLiteral("Accounts_Password_History_Enabled")); 0037 0038 mPasswordHistoryLength->setObjectName(QStringLiteral("mPasswordHistoryLength")); 0039 mPasswordHistoryLength->setToolTip(i18n("Amount of most recently used passwords to prevent users from reusing.")); 0040 addSpinbox(i18n("Password History Length"), mPasswordHistoryLength, QStringLiteral("Accounts_Password_History_Amount")); 0041 0042 auto passwordPolicyLabel = createBoldLabel(i18n("Password Policy")); 0043 passwordPolicyLabel->setObjectName(QStringLiteral("passwordPolicyLabel")); 0044 mMainLayout->addWidget(passwordPolicyLabel); 0045 0046 mEnablePasswordPolicy->setObjectName(QStringLiteral("mEnablePasswordPolicy")); 0047 mEnablePasswordPolicy->setToolTip(i18n("When enabled, users won't be able to update their passwords to some of their most recently used passwords.")); 0048 mMainLayout->addWidget(mEnablePasswordPolicy); 0049 connectCheckBox(mEnablePasswordPolicy, QStringLiteral("Accounts_Password_Policy_Enabled")); 0050 0051 mMinimumLength->setObjectName(QStringLiteral("mMinimumLength")); 0052 mMinimumLength->setToolTip(i18n("Ensures that passwords must have at least this amount of characters. Use -1 to disable.")); 0053 mMinimumLength->setMinimum(-1); 0054 addSpinbox(i18n("Minimum Length"), mMinimumLength, QStringLiteral("Accounts_Password_Policy_MinLength")); 0055 0056 mMaximumLength->setObjectName(QStringLiteral("mMaximumLength")); 0057 mMaximumLength->setToolTip(i18n("Ensures that passwords do not have more than this amount of characters. Use -1 to disable.")); 0058 mMaximumLength->setMinimum(-1); 0059 addSpinbox(i18n("Maximum Length"), mMaximumLength, QStringLiteral("Accounts_Password_Policy_MaxLength")); 0060 0061 mForbidRepeatingCharacters->setObjectName(QStringLiteral("mForbidRepeatingCharacters")); 0062 mForbidRepeatingCharacters->setToolTip(i18n("Ensures passwords do not contain the same character repeating next to each other.")); 0063 mMainLayout->addWidget(mForbidRepeatingCharacters); 0064 connectCheckBox(mForbidRepeatingCharacters, QStringLiteral("Accounts_Password_Policy_ForbidRepeatingCharacters")); 0065 0066 mMaxRepeatingCharacters->setObjectName(QStringLiteral("mMaxRepeatingCharacters")); 0067 mMaxRepeatingCharacters->setToolTip(i18n("The amount of times a character can be repeating before it is not allowed.")); 0068 addSpinbox(i18n("Max Repeating Characters"), mMaxRepeatingCharacters, QStringLiteral("Accounts_Password_Policy_ForbidRepeatingCharactersCount")); 0069 0070 mAtLeastOneLowercase->setObjectName(QStringLiteral("mAtLeastOneLowercase")); 0071 mAtLeastOneLowercase->setToolTip(i18n("Enforce that a password contain at least one lowercase character.")); 0072 mMainLayout->addWidget(mAtLeastOneLowercase); 0073 connectCheckBox(mAtLeastOneLowercase, QStringLiteral("Accounts_Password_Policy_AtLeastOneLowercase")); 0074 0075 mAtLeastOneUppercase->setObjectName(QStringLiteral("mAtLeastOneUppercase")); 0076 mAtLeastOneUppercase->setToolTip(i18n("Enforce that a password contain at least one uppercase character.")); 0077 mMainLayout->addWidget(mAtLeastOneUppercase); 0078 connectCheckBox(mAtLeastOneUppercase, QStringLiteral("Accounts_Password_Policy_AtLeastOneUppercase")); 0079 0080 mAtLeastOneNumber->setObjectName(QStringLiteral("mAtLeastOneNumber")); 0081 mAtLeastOneNumber->setToolTip(i18n("Enforce that a password contain at least one numerical character.")); 0082 mMainLayout->addWidget(mAtLeastOneNumber); 0083 connectCheckBox(mAtLeastOneNumber, QStringLiteral("Accounts_Password_Policy_AtLeastOneNumber")); 0084 0085 mAtLeastOneSymbol->setObjectName(QStringLiteral("mAtLeastOneSymbol")); 0086 mAtLeastOneSymbol->setToolTip(i18n("Enforce that a password contain at least one special character.")); 0087 mMainLayout->addWidget(mAtLeastOneSymbol); 0088 connectCheckBox(mAtLeastOneSymbol, QStringLiteral("Accounts_Password_Policy_AtLeastOneSpecialCharacter")); 0089 0090 connect(mEnablePasswordHistory, &QCheckBox::clicked, this, &PasswordSettingsWidget::updateSettingsStatus); 0091 } 0092 0093 PasswordSettingsWidget::~PasswordSettingsWidget() = default; 0094 0095 void PasswordSettingsWidget::updateSettingsStatus(bool enabled) 0096 { 0097 mPasswordHistoryLength->setEnabled(enabled); 0098 mEnablePasswordPolicy->setEnabled(enabled); 0099 mMinimumLength->setEnabled(enabled); 0100 mMaximumLength->setEnabled(enabled); 0101 mForbidRepeatingCharacters->setEnabled(enabled); 0102 mMaxRepeatingCharacters->setEnabled(enabled); 0103 mAtLeastOneLowercase->setEnabled(enabled); 0104 mAtLeastOneUppercase->setEnabled(enabled); 0105 mAtLeastOneNumber->setEnabled(enabled); 0106 mAtLeastOneSymbol->setEnabled(enabled); 0107 } 0108 0109 void PasswordSettingsWidget::initialize(const QMap<QString, QVariant> &mapSettings) 0110 { 0111 initializeWidget(mEnablePasswordHistory, mapSettings, false); 0112 initializeWidget(mPasswordHistoryLength, mapSettings, 7); 0113 initializeWidget(mEnablePasswordPolicy, mapSettings, true); 0114 initializeWidget(mMinimumLength, mapSettings, 7); 0115 initializeWidget(mMaximumLength, mapSettings, -1); 0116 initializeWidget(mForbidRepeatingCharacters, mapSettings, true); 0117 initializeWidget(mMaxRepeatingCharacters, mapSettings, 3); 0118 initializeWidget(mAtLeastOneLowercase, mapSettings, true); 0119 initializeWidget(mAtLeastOneUppercase, mapSettings, true); 0120 initializeWidget(mAtLeastOneNumber, mapSettings, true); 0121 initializeWidget(mAtLeastOneSymbol, mapSettings, true); 0122 updateSettingsStatus(false); 0123 } 0124 0125 #include "moc_passwordsettingswidget.cpp"