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"