KWidgetsAddons

knewpassworddialog.h
1// vi: ts=8 sts=4 sw=4
2/*
3 This file is part of the KDE libraries
4 SPDX-FileCopyrightText: 1998 Pietro Iglio <iglio@fub.it>
5 SPDX-FileCopyrightText: 1999, 2000 Geert Jansen <jansen@kde.org>
6 SPDX-FileCopyrightText: 2004, 2005 Andrew Coles <andrew_coles@yahoo.co.uk>
7 SPDX-FileCopyrightText: 2006,2007 Olivier Goffart <ogoffart @ kde.org>
8
9 SPDX-License-Identifier: LGPL-2.0-only
10*/
11#ifndef KNEWPASSWORDDIALOG_H
12#define KNEWPASSWORDDIALOG_H
13
14#include <KPassword>
15#include <QDialog>
16#include <memory>
17
18#include <kwidgetsaddons_export.h>
19
20class QWidget;
21
22/**
23 * @class KNewPasswordDialog knewpassworddialog.h KNewPasswordDialog
24 *
25 * @short A password input dialog.
26 *
27 * This dialog asks the user to enter a new password.
28 *
29 * The password has to be entered twice to check if the passwords
30 * match. A hint about the strength of the entered password is also
31 * shown.
32 *
33 * \section usage Usage Example
34 * \subsection asynchronous Asynchronous
35 *
36 * \code
37 * KNewPasswordDialog *dlg = new KNewPasswordDialog( parent );
38 * dlg->setPrompt(i18n("Enter a password"));
39 * connect(dlg, &KNewPasswordDialog::newPassword, this, [this](const QString &pass) { setPassword(pass); });
40 * connect(dlg, &QDialog::rejected, this, [this]() { slotCancel(); });
41 * dlg->show();
42 * \endcode
43 *
44 * \subsection synchronous Synchronous
45 *
46 * \code
47 * KNewPasswordDialog dlg(parent);
48 * dlg.setPrompt(i18n("Enter a password"));
49 * if(dlg.exec()) {
50 * setPassword(dlg.password());
51 * }
52 * \endcode
53 *
54 * \image html knewpassworddialog.png "KNewPasswordDialog"
55 *
56 * @author Geert Jansen <jansen@kde.org>
57 * @author Olivier Goffart <ogoffart@kde.org>
58 */
59class KWIDGETSADDONS_EXPORT KNewPasswordDialog : public QDialog
60{
62
63 /**
64 * @since 6.0
65 */
67
68public:
69 /**
70 * Constructs a password dialog.
71 *
72 * @param parent Passed to lower level constructor.
73 */
74 explicit KNewPasswordDialog(QWidget *parent = nullptr);
75
76 /**
77 * Destructs the password dialog.
78 */
80
81 /**
82 * Sets the password prompt.
83 */
84 void setPrompt(const QString &prompt);
85
86 /**
87 * Returns the password prompt.
88 */
89 QString prompt() const;
90
91 /**
92 * Sets the icon that appears next to the prompt in the dialog. The default icon represents a simple key.
93 * @since 5.63
94 */
95 void setIcon(const QIcon &icon);
96
97 /**
98 * Returns the icon that appears next to the prompt in the dialog. The default icon represents a simple key.
99 * @since 5.63
100 */
101 QIcon icon() const;
102
103 /**
104 * Allow empty passwords? - Default: true
105 *
106 * same as setMinimumPasswordLength( allowed ? 0 : 1 )
107 */
108 void setAllowEmptyPasswords(bool allowed);
109
110 /**
111 * Allow empty passwords?
112 *
113 * @return true if minimumPasswordLength() == 0
114 */
115 bool allowEmptyPasswords() const;
116
117 /**
118 * Minimum acceptable password length.
119 *
120 * Default: 0
121 *
122 * @param minLength The new minimum password length
123 */
124 void setMinimumPasswordLength(int minLength);
125
126 /**
127 * Minimum acceptable password length.
128 */
129 int minimumPasswordLength() const;
130
131 /**
132 * Maximum acceptable password length.
133 *
134 * @param maxLength The new maximum password length.
135 */
136 void setMaximumPasswordLength(int maxLength);
137
138 /**
139 * Maximum acceptable password length.
140 */
141 int maximumPasswordLength() const;
142
143 /**
144 * Password length that is expected to be reasonably safe.
145 *
146 * Used to compute the strength level
147 *
148 * Default: 8 - the standard UNIX password length
149 *
150 * @param reasonableLength The new reasonable password length.
151 */
152 void setReasonablePasswordLength(int reasonableLength);
153
154 /**
155 * Password length that is expected to be reasonably safe.
156 */
157 int reasonablePasswordLength() const;
158
159 /**
160 * Set the password strength level below which a warning is given
161 * Value is in the range 0 to 99. Empty passwords score 0;
162 * non-empty passwords score up to 100, depending on their length and whether they
163 * contain numbers, mixed case letters and punctuation.
164 *
165 * Default: 1 - warn if the password has no discernible strength whatsoever
166 * @param warningLevel The level below which a warning should be given.
167 */
168 void setPasswordStrengthWarningLevel(int warningLevel);
169
170 /**
171 * Password strength level below which a warning is given
172 */
174
175 /**
176 * When the verification password does not match, the background color
177 * of the verification field is set to @p color. As soon as the passwords match,
178 * the original color of the verification field is restored.
179 *
180 * Default: the background color from the current theme.
181 * @since 5.17
182 */
183 void setBackgroundWarningColor(const QColor &color);
184
185 /**
186 * The color used as warning for the verification password field's background.
187 * @since 5.17
188 */
190
191 /**
192 * Returns the password entered.
193 * @note Only has meaningful data after accept has been called
194 * if you want to access the password from a subclass use
195 * checkAndGetPassword()
196 */
197 QString password() const;
198
199#if KWIDGETSADDONS_ENABLE_DEPRECATED_SINCE(6, 0)
200 /**
201 * Whether to show the visibility trailing action in the line edit.
202 * Default is true. This can be used to honor the lineedit_reveal_password
203 * kiosk key, for example:
204 * \code
205 * passwordDialog.setRevealPasswordAvailable(KAuthorized::authorize(QStringLiteral("lineedit_reveal_password")));
206 * \endcode
207 * @since 5.31
208 */
209 [[deprecated("Use setRevealPasswordMode instead.")]] void setRevealPasswordAvailable(bool reveal);
210
211 /**
212 * Whether the visibility trailing action in the line edit is visible.
213 * @since 5.31
214 */
215 [[deprecated("Use revealPasswordMode instead.")]] bool isRevealPasswordAvailable() const;
216#endif
217
218 /**
219 * Whether the visibility trailing action in the line edit is visible.
220 * @since 6.0
221 */
222 KPassword::RevealMode revealPasswordMode() const;
223
224 /**
225 * Set when the reveal password button will be visible.
226 *
227 * The default is RevealPasswordMode::OnlyNew and the reveal password button will
228 * only be visible when entering a new password.
229 *
230 * This can be used to honor the lineedit_reveal_password kiosk key, for example:
231 *
232 * @code{.cpp}
233 * if (KAuthorized::authorize(QStringLiteral("lineedit_reveal_password"))) {
234 * newPasswordDialog.setRevealPasswordMode(KPassword::RevealMode::OnlyNew);
235 * } else {
236 * newPasswordDialog.setRevealPasswordMode(KPassword::RevealMode::Never);
237 * }
238 * @endcode
239 * @since 6.0
240 */
241 void setRevealPasswordMode(KPassword::RevealMode revealPasswordMode);
242
243 /**
244 * @internal
245 */
246 void accept() override;
247
248protected:
249 /**
250 * Virtual function that can be overridden to provide password
251 * checking in derived classes. It should return @p true if the
252 * password is valid, @p false otherwise.
253 */
254 virtual bool checkPassword(const QString &);
255
256 /**
257 * Checks input password.
258 * If the password is right, returns true
259 * and fills pwd with the password.
260 * Otherwise returns false and pwd will be null.
261 * @since 4.2
262 */
263 bool checkAndGetPassword(QString *pwd);
264
266
267 /**
268 * The dialog has been accepted, and the new password is @p password
269 */
271
272private:
273 std::unique_ptr<class KNewPasswordDialogPrivate> const d;
274};
275
276#endif // KNEWPASSWORDDIALOG_H
void setPasswordStrengthWarningLevel(int warningLevel)
Set the password strength level below which a warning is given Value is in the range 0 to 99.
void setRevealPasswordAvailable(bool reveal)
Whether to show the visibility trailing action in the line edit.
void setBackgroundWarningColor(const QColor &color)
When the verification password does not match, the background color of the verification field is set ...
QColor backgroundWarningColor() const
The color used as warning for the verification password field's background.
void setIcon(const QIcon &icon)
Sets the icon that appears next to the prompt in the dialog.
void setReasonablePasswordLength(int reasonableLength)
Password length that is expected to be reasonably safe.
void setAllowEmptyPasswords(bool allowed)
Allow empty passwords?
bool allowEmptyPasswords() const
Allow empty passwords?
void setMaximumPasswordLength(int maxLength)
Maximum acceptable password length.
virtual bool checkPassword(const QString &)
Virtual function that can be overridden to provide password checking in derived classes.
bool checkAndGetPassword(QString *pwd)
Checks input password.
int minimumPasswordLength() const
Minimum acceptable password length.
int passwordStrengthWarningLevel() const
Password strength level below which a warning is given.
void setMinimumPasswordLength(int minLength)
Minimum acceptable password length.
QString prompt() const
Returns the password prompt.
KPassword::RevealMode revealPasswordMode
int maximumPasswordLength() const
Maximum acceptable password length.
bool isRevealPasswordAvailable() const
Whether the visibility trailing action in the line edit is visible.
QIcon icon() const
Returns the icon that appears next to the prompt in the dialog.
void newPassword(const QString &password)
The dialog has been accepted, and the new password is password.
void setPrompt(const QString &prompt)
Sets the password prompt.
QString password() const
Returns the password entered.
void setRevealPasswordMode(KPassword::RevealMode revealPasswordMode)
Set when the reveal password button will be visible.
KNewPasswordDialog(QWidget *parent=nullptr)
Constructs a password dialog.
~KNewPasswordDialog() override
Destructs the password dialog.
int reasonablePasswordLength() const
Password length that is expected to be reasonably safe.
QDialog(QWidget *parent, Qt::WindowFlags f)
virtual void accept()
Q_OBJECTQ_OBJECT
Q_PROPERTY(...)
Q_SIGNALSQ_SIGNALS
QObject * parent() const const
QWidget(QWidget *parent, Qt::WindowFlags f)
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Feb 21 2025 11:52:02 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.