summaryrefslogtreecommitdiffstats
path: root/kdeui/kpassdlg.h
diff options
context:
space:
mode:
Diffstat (limited to 'kdeui/kpassdlg.h')
-rw-r--r--kdeui/kpassdlg.h414
1 files changed, 414 insertions, 0 deletions
diff --git a/kdeui/kpassdlg.h b/kdeui/kpassdlg.h
new file mode 100644
index 000000000..b3bc80677
--- /dev/null
+++ b/kdeui/kpassdlg.h
@@ -0,0 +1,414 @@
+// vi: ts=8 sts=4 sw=4
+/* This file is part of the KDE libraries
+ Copyright (C) 1998 Pietro Iglio <iglio@fub.it>
+ Copyright (C) 1999,2000 Geert Jansen <jansen@kde.org>
+ Copyright (C) 2004,2005 Andrew Coles <andrew_coles@yahoo.co.uk>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+#ifndef __KPassDlg_h_included__
+#define __KPassDlg_h_included__
+
+#include <qstring.h>
+#include <qlineedit.h>
+#include <kdialogbase.h>
+
+class QLabel;
+class QGridLayout;
+class QWidget;
+
+/**
+ * @short A safe password input widget.
+ * @author Geert Jansen <geertj@kde.org>
+ *
+ * The widget uses the user's global "echo mode" setting.
+ */
+
+class KDEUI_EXPORT KPasswordEdit
+ : public QLineEdit
+{
+ Q_OBJECT
+
+public:
+ enum EchoModes { OneStar, ThreeStars, NoEcho };
+
+ /**
+ * Constructs a password input widget using the user's global "echo mode" setting.
+ */
+ KPasswordEdit(QWidget *parent=0, const char *name=0);
+ // KDE4: either of the two must go! add default values for parameters
+
+ /**
+ * Constructs a password input widget using echoMode as "echo mode".
+ * Note that echoMode is a QLineEdit::EchoMode.
+ * @since 3.0
+ */
+ KPasswordEdit(EchoMode echoMode, QWidget *parent, const char *name);
+
+ /**
+ * Constructs a password input widget using echoMode as "echo mode".
+ * Note that echoMode is a KPasswordEdit::EchoModes.
+ * @since 3.2
+ */
+ KPasswordEdit(EchoModes echoMode, QWidget *parent, const char *name);
+
+ /**
+ * @deprecated, will be removed in KDE 4.0
+ * Creates a password input widget using echoMode as "echo mode".
+ */
+ KPasswordEdit(QWidget *parent, const char *name, int echoMode) KDE_DEPRECATED;
+
+ /**
+ * Destructs the widget.
+ */
+ ~KPasswordEdit();
+
+ /**
+ * Returns the password. The memory is freed in the destructor
+ * so you should make a copy.
+ */
+ const char *password() const { return m_Password; }
+
+ /**
+ * Erases the current password.
+ */
+ void erase();
+
+ static const int PassLen;
+
+ /**
+ * Set the current maximum password length. If a password longer than the limit
+ * specified is currently entered, it is truncated accordingly.
+ *
+ * The length is capped to lie between 0 and 199 inclusive.
+ *
+ * @param newLength: The new maximum password length
+ * @since 3.4
+ */
+ void setMaxPasswordLength(int newLength);
+
+ /**
+ * Returns the current maximum password length.
+ * @since 3.4
+ */
+ int maxPasswordLength() const;
+
+public slots:
+ /**
+ * Reimplementation
+ */
+ virtual void insert( const QString &);
+
+protected:
+ virtual void keyPressEvent(QKeyEvent *);
+ virtual void focusInEvent(QFocusEvent *e);
+ virtual bool event(QEvent *e);
+
+private:
+ void init();
+ void showPass();
+
+ char *m_Password;
+ int m_EchoMode, m_Length;
+};
+
+
+/**
+ * @short A password input dialog.
+ *
+ * This dialog asks the user to enter a password. The functions you're
+ * probably interested in are the static methods, getPassword() and
+ * getNewPassword().
+ *
+ * <b>Usage example</b>\n
+ *
+ * \code
+ * QCString password;
+ * int result = KPasswordDialog::getPassword(password, i18n("Prompt message"));
+ * if (result == KPasswordDialog::Accepted)
+ * use(password);
+ * \endcode
+ *
+ * \image html kpassworddialog.png "KDE Password Dialog"
+ *
+ * <b>Security notes:</b>\n
+ *
+ * Keeping passwords in memory can be a potential security hole. You should
+ * handle this situation with care.
+ *
+ * @li You may want to use disableCoreDump() to disable core dumps.
+ * Core dumps are dangerous because they are an image of the process memory,
+ * and thus include any passwords that were in memory.
+ *
+ * @li You should delete passwords as soon as they are not needed anymore.
+ * The functions getPassword() and getNewPassword() return the
+ * password as a QCString. I believe this is safer than a QString. A QString
+ * stores its characters internally as 16-bit wide values, so conversions are
+ * needed, both for creating the QString and by using it. The temporary
+ * memory used for these conversion is probably not erased. This could lead
+ * to stray passwords in memory, even if you think you erased all of them.
+ *
+ * @author Geert Jansen <jansen@kde.org>
+ */
+
+class KDEUI_EXPORT KPasswordDialog
+ : public KDialogBase
+{
+ Q_OBJECT
+
+public:
+ /**
+ * This enum distinguishes the two operation modes of this dialog:
+ */
+ enum Types {
+ /**
+ * The user is asked to enter a password.
+ */
+ Password,
+
+ /**
+ * The user is asked to enter a password and to confirm it
+ * a second time. This is usually used when the user
+ * changes his password.
+ */
+ NewPassword
+ };
+
+ /**
+ * Constructs a password dialog.
+ *
+ * @param type: if NewPassword is given here, the dialog contains two
+ * input fields, so that the user must confirm his password
+ * and possible typos are detected immediately.
+ * @param enableKeep: if true, a check box is shown in the dialog
+ * which allows the user to keep his password input for later.
+ * @param extraBttn: allows to show additional buttons, KDialogBase.
+ * @param parent Passed to lower level constructor.
+ * @param name Passed to lower level constructor
+ *
+ * @since 3.0
+ */
+ KPasswordDialog(Types type, bool enableKeep, int extraBttn,
+ QWidget *parent=0, const char *name=0);
+
+ /**
+ * @deprecated Variant of the previous constructor without the
+ * possibility to specify a parent. Will be removed in KDE 4.0
+ */
+ KPasswordDialog(int type, QString prompt, bool enableKeep=false,
+ int extraBttn=0) KDE_DEPRECATED;
+ // note that this implicitly deprecates the 'prompt' variants of
+ // getPassword() below. i guess the above constructor needs to be extended.
+
+ /**
+ * Construct a password dialog. Essentially the same as above but allows the
+ * icon in the password dialog to be set via @p iconName.
+ * @param type if NewPassword is given here, the dialog contains two
+ * input fields, so that the user must confirm his password
+ * and possible typos are detected immediately
+ * @param enableKeep: if true, a check box is shown in the dialog
+ * which allows the user to keep his password input for later.
+ * @param extraBttn: allows to show additional buttons.
+ * @param iconName the name of the icon to be shown in the dialog. If empty,
+ * a default icon is used
+ * @param parent Passed to lower level constructor.
+ * @param name Passed to lower level constructor
+ * @since 3.3
+ */
+ KPasswordDialog(Types type, bool enableKeep, int extraBttn, const QString& iconName,
+ QWidget *parent = 0, const char *name = 0);
+
+ /**
+ * Destructs the password dialog.
+ */
+ virtual ~KPasswordDialog();
+
+ /**
+ * Sets the password prompt.
+ */
+ void setPrompt(QString prompt);
+
+ /**
+ * Returns the password prompt.
+ */
+ QString prompt() const;
+
+ /**
+ * Adds a line of information to the dialog.
+ */
+ void addLine(QString key, QString value);
+
+ /**
+ * Allow empty passwords? - Default: false
+ * @since 3.4
+ */
+ void setAllowEmptyPasswords(bool allowed);
+
+ /**
+ * Allow empty passwords?
+ * @since 3.4
+ */
+ bool allowEmptyPasswords() const;
+
+ /**
+ * Minimum acceptable password length.
+ * Default: If empty passwords are forbidden, 1;
+ * Otherwise, 0.
+ *
+ * @param minLength: The new minimum password length
+ * @since 3.4
+ */
+ void setMinimumPasswordLength(int minLength);
+
+ /**
+ * Minimum acceptable password length.
+ * @since 3.4
+ */
+ int minimumPasswordLength() const;
+
+ /**
+ * Maximum acceptable password length. Limited to 199.
+ * Default: No limit, i.e. -1
+ *
+ * @param maxLength: The new maximum password length.
+ * @since 3.4
+ */
+ void setMaximumPasswordLength(int maxLength);
+
+ /**
+ * Maximum acceptable password length.
+ * @since 3.4
+ */
+ int maximumPasswordLength() const;
+
+ /**
+ * Password length that is expected to be reasonably safe.
+ *
+ * Default: 8 - the standard UNIX password length
+ *
+ * @param reasonableLength: The new reasonable password length.
+ * @since 3.4
+ */
+ void setReasonablePasswordLength(int reasonableLength);
+
+ /**
+ * Password length that is expected to be reasonably safe.
+ * @since 3.4
+ */
+ int reasonablePasswordLength() const;
+
+ /**
+ * Set the password strength level below which a warning is given
+ * Value is in the range 0 to 99. Empty passwords score 0;
+ * non-empty passwords score up to 100, depending on their length and whether they
+ * contain numbers, mixed case letters and punctuation.
+ *
+ * Default: 1 - warn if the password has no discernable strength whatsoever
+ * @param warningLevel: The level below which a warning should be given.
+ * @since 3.4
+ */
+ void setPasswordStrengthWarningLevel(int warningLevel);
+
+ /**
+ * Password strength level below which a warning is given
+ * @since 3.4
+ */
+ int passwordStrengthWarningLevel() const;
+
+ /**
+ * Returns the password entered. The memory is freed in the destructor,
+ * so you should make a copy.
+ */
+ const char *password() const { return m_pEdit->password(); }
+
+ /**
+ * Clears the password input field. You might want to use this after the
+ * user failed to enter the correct password.
+ * @since 3.3
+ */
+ void clearPassword();
+
+ /**
+ * Returns true if the user wants to keep the password.
+ */
+ bool keep() const { return m_Keep; }
+
+ /**
+ * Pops up the dialog, asks the user for a password, and returns it.
+ *
+ * @param password The password is returned in this reference parameter.
+ * @param prompt A prompt for the password. This can be a few lines of
+ * information. The text is word broken to fit nicely in the dialog.
+ * @param keep Enable/disable a checkbox controlling password keeping.
+ * If you pass a null pointer, or a pointer to the value 0, the checkbox
+ * is not shown. If you pass a pointer to a nonzero value, the checkbox
+ * is shown and the result is stored in *keep.
+ * @return Result code: Accepted or Rejected.
+ */
+ static int getPassword(QCString &password, QString prompt, int *keep=0L);
+
+ /**
+ * Pops up the dialog, asks the user for a password and returns it. The
+ * user has to enter the password twice to make sure it was entered
+ * correctly.
+ *
+ * @param password The password is returned in this reference parameter.
+ * @param prompt A prompt for the password. This can be a few lines of
+ * information. The text is word broken to fit nicely in the dialog.
+ * @return Result code: Accepted or Rejected.
+ */
+ static int getNewPassword(QCString &password, QString prompt);
+
+ /**
+ * Static helper function that disables core dumps.
+ */
+ static void disableCoreDumps();
+
+protected slots:
+ void slotOk();
+ void slotCancel();
+ void slotKeep(bool);
+
+protected:
+
+ /**
+ * Virtual function that can be overridden to provide password
+ * checking in derived classes. It should return @p true if the
+ * password is valid, @p false otherwise.
+ */
+ virtual bool checkPassword(const char *) { return true; }
+
+private slots:
+ void enableOkBtn();
+
+private:
+ void init();
+ void erase();
+
+ int m_Keep, m_Type, m_Row;
+ QLabel *m_pHelpLbl;
+ QGridLayout *m_pGrid;
+ QWidget *m_pMain;
+ KPasswordEdit *m_pEdit, *m_pEdit2;
+
+protected:
+ virtual void virtual_hook( int id, void* data );
+private:
+ class KPasswordDialogPrivate;
+ KPasswordDialogPrivate* const d;
+};
+
+
+#endif // __KPassDlg_h_included__