From cea7ae1e702b82d2d0d0a851de1aae58270b14f6 Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Wed, 8 Feb 2012 12:14:30 +0000 Subject: move QXmppPasswordChecker, it's server-only --- src/QXmppPasswordChecker.cpp | 224 ------------------------------------ src/QXmppPasswordChecker.h | 109 ------------------ src/server/QXmppPasswordChecker.cpp | 224 ++++++++++++++++++++++++++++++++++++ src/server/QXmppPasswordChecker.h | 109 ++++++++++++++++++ src/src.pro | 4 +- 5 files changed, 335 insertions(+), 335 deletions(-) delete mode 100644 src/QXmppPasswordChecker.cpp delete mode 100644 src/QXmppPasswordChecker.h create mode 100644 src/server/QXmppPasswordChecker.cpp create mode 100644 src/server/QXmppPasswordChecker.h (limited to 'src') diff --git a/src/QXmppPasswordChecker.cpp b/src/QXmppPasswordChecker.cpp deleted file mode 100644 index 9048d66c..00000000 --- a/src/QXmppPasswordChecker.cpp +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Copyright (C) 2008-2011 The QXmpp developers - * - * Author: - * Jeremy Lainé - * - * Source: - * http://code.google.com/p/qxmpp - * - * This file is a part of QXmpp library. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * 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 - * Lesser General Public License for more details. - * - */ - -#include -#include -#include - -#include "QXmppPasswordChecker.h" - -/// Returns the requested domain. - -QString QXmppPasswordRequest::domain() const -{ - return m_domain; -} - -/// Sets the requested \a domain. -/// -/// \param domain - -void QXmppPasswordRequest::setDomain(const QString &domain) -{ - m_domain = domain; -} - -QString QXmppPasswordRequest::password() const -{ - return m_password; -} - -void QXmppPasswordRequest::setPassword(const QString &password) -{ - m_password = password; -} - -/// Returns the requested username. - -QString QXmppPasswordRequest::username() const -{ - return m_username; -} - -/// Sets the requested \a username. -/// -/// \param username - -void QXmppPasswordRequest::setUsername(const QString &username) -{ - m_username = username; -} - -/// Constructs a new QXmppPasswordReply. -/// -/// \param parent - -QXmppPasswordReply::QXmppPasswordReply(QObject *parent) - : QObject(parent), - m_error(QXmppPasswordReply::NoError), - m_isFinished(false) -{ -} - -/// Returns the received MD5 digest. - -QByteArray QXmppPasswordReply::digest() const -{ - return m_digest; -} - -/// Sets the received MD5 digest. -/// -/// \param digest - -void QXmppPasswordReply::setDigest(const QByteArray &digest) -{ - m_digest = digest; -} - -/// Returns the error that was found during the processing of this request. -/// -/// If no error was found, returns NoError. - -QXmppPasswordReply::Error QXmppPasswordReply::error() const -{ - return m_error; -} - -/// Returns the error that was found during the processing of this request. -/// -void QXmppPasswordReply::setError(QXmppPasswordReply::Error error) -{ - m_error = error; -} - -/// Mark reply as finished. - -void QXmppPasswordReply::finish() -{ - m_isFinished = true; - emit finished(); -} - -/// Delay marking reply as finished. - -void QXmppPasswordReply::finishLater() -{ - QTimer::singleShot(0, this, SLOT(finish())); -} - -/// Returns true when the reply has finished. - -bool QXmppPasswordReply::isFinished() const -{ - return m_isFinished; -} - -/// Returns the received password. - -QString QXmppPasswordReply::password() const -{ - return m_password; -} - -/// Sets the received password. -/// -/// \param password - -void QXmppPasswordReply::setPassword(const QString &password) -{ - m_password = password; -} - -/// Checks that the given credentials are valid. -/// -/// The base implementation requires that you reimplement getPassword(). -/// -/// \param request - -QXmppPasswordReply *QXmppPasswordChecker::checkPassword(const QXmppPasswordRequest &request) -{ - QXmppPasswordReply *reply = new QXmppPasswordReply; - - QString secret; - QXmppPasswordReply::Error error = getPassword(request, secret); - if (error == QXmppPasswordReply::NoError) { - if (request.password() != secret) - reply->setError(QXmppPasswordReply::AuthorizationError); - } else { - reply->setError(error); - } - - // reply is finished - reply->finishLater(); - return reply; -} - -/// Retrieves the MD5 digest for the given username. -/// -/// Reimplement this method if your backend natively supports -/// retrieving MD5 digests. -/// -/// \param request - -QXmppPasswordReply *QXmppPasswordChecker::getDigest(const QXmppPasswordRequest &request) -{ - QXmppPasswordReply *reply = new QXmppPasswordReply; - - QString secret; - QXmppPasswordReply::Error error = getPassword(request, secret); - if (error == QXmppPasswordReply::NoError) { - reply->setDigest(QCryptographicHash::hash( - (request.username() + ":" + request.domain() + ":" + secret).toUtf8(), - QCryptographicHash::Md5)); - } else { - reply->setError(error); - } - - // reply is finished - reply->finishLater(); - return reply; -} - -/// Retrieves the password for the given username. -/// -/// The simplest way to write a password checker is to reimplement this method. -/// -/// \param request -/// \param password - -QXmppPasswordReply::Error QXmppPasswordChecker::getPassword(const QXmppPasswordRequest &request, QString &password) -{ - Q_UNUSED(request); - Q_UNUSED(password); - return QXmppPasswordReply::TemporaryError; -} - -/// Returns true if the getPassword() method is implemented. -/// - -bool QXmppPasswordChecker::hasGetPassword() const -{ - return false; -} - diff --git a/src/QXmppPasswordChecker.h b/src/QXmppPasswordChecker.h deleted file mode 100644 index 85cef3d4..00000000 --- a/src/QXmppPasswordChecker.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (C) 2008-2011 The QXmpp developers - * - * Author: - * Jeremy Lainé - * - * Source: - * http://code.google.com/p/qxmpp - * - * This file is a part of QXmpp library. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * 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 - * Lesser General Public License for more details. - * - */ - -#ifndef QXMPPPASSWORDCHECKER_H -#define QXMPPPASSWORDCHECKER_H - -#include - -/// \brief The QXmppPasswordRequest class represents a password request. -/// -class QXmppPasswordRequest -{ -public: - // This enum is used to describe request types. - enum Type { - CheckPassword = 0, - }; - - QString domain() const; - void setDomain(const QString &domain); - - QString password() const; - void setPassword(const QString &password); - - QString username() const; - void setUsername(const QString &username); - -private: - QString m_domain; - QString m_password; - QString m_username; -}; - -/// \brief The QXmppPasswordRequest class represents a password reply. -/// -class QXmppPasswordReply : public QObject -{ - Q_OBJECT - -public: - /// This enum is used to describe authentication errors. - enum Error { - NoError = 0, - AuthorizationError, - TemporaryError, - }; - - QXmppPasswordReply(QObject *parent = 0); - - QByteArray digest() const; - void setDigest(const QByteArray &digest); - - QString password() const; - void setPassword(const QString &password); - - QXmppPasswordReply::Error error() const; - void setError(QXmppPasswordReply::Error error); - - bool isFinished() const; - -public slots: - void finish(); - void finishLater(); - -signals: - void finished(); - -private: - QByteArray m_digest; - QString m_password; - QXmppPasswordReply::Error m_error; - bool m_isFinished; -}; - -/// \brief The QXmppPasswordChecker class represents an abstract password checker. -/// - -class QXmppPasswordChecker -{ -public: - virtual QXmppPasswordReply *checkPassword(const QXmppPasswordRequest &request); - virtual QXmppPasswordReply *getDigest(const QXmppPasswordRequest &request); - virtual bool hasGetPassword() const; - -protected: - virtual QXmppPasswordReply::Error getPassword(const QXmppPasswordRequest &request, QString &password); -}; - -#endif diff --git a/src/server/QXmppPasswordChecker.cpp b/src/server/QXmppPasswordChecker.cpp new file mode 100644 index 00000000..9048d66c --- /dev/null +++ b/src/server/QXmppPasswordChecker.cpp @@ -0,0 +1,224 @@ +/* + * Copyright (C) 2008-2011 The QXmpp developers + * + * Author: + * Jeremy Lainé + * + * Source: + * http://code.google.com/p/qxmpp + * + * This file is a part of QXmpp library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * 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 + * Lesser General Public License for more details. + * + */ + +#include +#include +#include + +#include "QXmppPasswordChecker.h" + +/// Returns the requested domain. + +QString QXmppPasswordRequest::domain() const +{ + return m_domain; +} + +/// Sets the requested \a domain. +/// +/// \param domain + +void QXmppPasswordRequest::setDomain(const QString &domain) +{ + m_domain = domain; +} + +QString QXmppPasswordRequest::password() const +{ + return m_password; +} + +void QXmppPasswordRequest::setPassword(const QString &password) +{ + m_password = password; +} + +/// Returns the requested username. + +QString QXmppPasswordRequest::username() const +{ + return m_username; +} + +/// Sets the requested \a username. +/// +/// \param username + +void QXmppPasswordRequest::setUsername(const QString &username) +{ + m_username = username; +} + +/// Constructs a new QXmppPasswordReply. +/// +/// \param parent + +QXmppPasswordReply::QXmppPasswordReply(QObject *parent) + : QObject(parent), + m_error(QXmppPasswordReply::NoError), + m_isFinished(false) +{ +} + +/// Returns the received MD5 digest. + +QByteArray QXmppPasswordReply::digest() const +{ + return m_digest; +} + +/// Sets the received MD5 digest. +/// +/// \param digest + +void QXmppPasswordReply::setDigest(const QByteArray &digest) +{ + m_digest = digest; +} + +/// Returns the error that was found during the processing of this request. +/// +/// If no error was found, returns NoError. + +QXmppPasswordReply::Error QXmppPasswordReply::error() const +{ + return m_error; +} + +/// Returns the error that was found during the processing of this request. +/// +void QXmppPasswordReply::setError(QXmppPasswordReply::Error error) +{ + m_error = error; +} + +/// Mark reply as finished. + +void QXmppPasswordReply::finish() +{ + m_isFinished = true; + emit finished(); +} + +/// Delay marking reply as finished. + +void QXmppPasswordReply::finishLater() +{ + QTimer::singleShot(0, this, SLOT(finish())); +} + +/// Returns true when the reply has finished. + +bool QXmppPasswordReply::isFinished() const +{ + return m_isFinished; +} + +/// Returns the received password. + +QString QXmppPasswordReply::password() const +{ + return m_password; +} + +/// Sets the received password. +/// +/// \param password + +void QXmppPasswordReply::setPassword(const QString &password) +{ + m_password = password; +} + +/// Checks that the given credentials are valid. +/// +/// The base implementation requires that you reimplement getPassword(). +/// +/// \param request + +QXmppPasswordReply *QXmppPasswordChecker::checkPassword(const QXmppPasswordRequest &request) +{ + QXmppPasswordReply *reply = new QXmppPasswordReply; + + QString secret; + QXmppPasswordReply::Error error = getPassword(request, secret); + if (error == QXmppPasswordReply::NoError) { + if (request.password() != secret) + reply->setError(QXmppPasswordReply::AuthorizationError); + } else { + reply->setError(error); + } + + // reply is finished + reply->finishLater(); + return reply; +} + +/// Retrieves the MD5 digest for the given username. +/// +/// Reimplement this method if your backend natively supports +/// retrieving MD5 digests. +/// +/// \param request + +QXmppPasswordReply *QXmppPasswordChecker::getDigest(const QXmppPasswordRequest &request) +{ + QXmppPasswordReply *reply = new QXmppPasswordReply; + + QString secret; + QXmppPasswordReply::Error error = getPassword(request, secret); + if (error == QXmppPasswordReply::NoError) { + reply->setDigest(QCryptographicHash::hash( + (request.username() + ":" + request.domain() + ":" + secret).toUtf8(), + QCryptographicHash::Md5)); + } else { + reply->setError(error); + } + + // reply is finished + reply->finishLater(); + return reply; +} + +/// Retrieves the password for the given username. +/// +/// The simplest way to write a password checker is to reimplement this method. +/// +/// \param request +/// \param password + +QXmppPasswordReply::Error QXmppPasswordChecker::getPassword(const QXmppPasswordRequest &request, QString &password) +{ + Q_UNUSED(request); + Q_UNUSED(password); + return QXmppPasswordReply::TemporaryError; +} + +/// Returns true if the getPassword() method is implemented. +/// + +bool QXmppPasswordChecker::hasGetPassword() const +{ + return false; +} + diff --git a/src/server/QXmppPasswordChecker.h b/src/server/QXmppPasswordChecker.h new file mode 100644 index 00000000..85cef3d4 --- /dev/null +++ b/src/server/QXmppPasswordChecker.h @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2008-2011 The QXmpp developers + * + * Author: + * Jeremy Lainé + * + * Source: + * http://code.google.com/p/qxmpp + * + * This file is a part of QXmpp library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * 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 + * Lesser General Public License for more details. + * + */ + +#ifndef QXMPPPASSWORDCHECKER_H +#define QXMPPPASSWORDCHECKER_H + +#include + +/// \brief The QXmppPasswordRequest class represents a password request. +/// +class QXmppPasswordRequest +{ +public: + // This enum is used to describe request types. + enum Type { + CheckPassword = 0, + }; + + QString domain() const; + void setDomain(const QString &domain); + + QString password() const; + void setPassword(const QString &password); + + QString username() const; + void setUsername(const QString &username); + +private: + QString m_domain; + QString m_password; + QString m_username; +}; + +/// \brief The QXmppPasswordRequest class represents a password reply. +/// +class QXmppPasswordReply : public QObject +{ + Q_OBJECT + +public: + /// This enum is used to describe authentication errors. + enum Error { + NoError = 0, + AuthorizationError, + TemporaryError, + }; + + QXmppPasswordReply(QObject *parent = 0); + + QByteArray digest() const; + void setDigest(const QByteArray &digest); + + QString password() const; + void setPassword(const QString &password); + + QXmppPasswordReply::Error error() const; + void setError(QXmppPasswordReply::Error error); + + bool isFinished() const; + +public slots: + void finish(); + void finishLater(); + +signals: + void finished(); + +private: + QByteArray m_digest; + QString m_password; + QXmppPasswordReply::Error m_error; + bool m_isFinished; +}; + +/// \brief The QXmppPasswordChecker class represents an abstract password checker. +/// + +class QXmppPasswordChecker +{ +public: + virtual QXmppPasswordReply *checkPassword(const QXmppPasswordRequest &request); + virtual QXmppPasswordReply *getDigest(const QXmppPasswordRequest &request); + virtual bool hasGetPassword() const; + +protected: + virtual QXmppPasswordReply::Error getPassword(const QXmppPasswordRequest &request, QString &password); +}; + +#endif diff --git a/src/src.pro b/src/src.pro index dc4a8e3f..bd48f8d3 100644 --- a/src/src.pro +++ b/src/src.pro @@ -58,7 +58,6 @@ INSTALL_HEADERS = QXmppUtils.h \ QXmppNonSASLAuth.h \ QXmppOutgoingClient.h \ QXmppPacket.h \ - QXmppPasswordChecker.h \ QXmppPingIq.h \ QXmppPresence.h \ QXmppPubSubIq.h \ @@ -86,6 +85,7 @@ INSTALL_HEADERS = QXmppUtils.h \ server/QXmppIncomingClient.h \ server/QXmppIncomingServer.h \ server/QXmppOutgoingServer.h \ + server/QXmppPasswordChecker.h \ server/QXmppServer.h \ server/QXmppServerExtension.h \ server/QXmppServerPlugin.h @@ -125,7 +125,6 @@ SOURCES += QXmppUtils.cpp \ QXmppNonSASLAuth.cpp \ QXmppOutgoingClient.cpp \ QXmppPacket.cpp \ - QXmppPasswordChecker.cpp \ QXmppPingIq.cpp \ QXmppPresence.cpp \ QXmppPubSubIq.cpp \ @@ -153,6 +152,7 @@ SOURCES += QXmppUtils.cpp \ server/QXmppIncomingClient.cpp \ server/QXmppIncomingServer.cpp \ server/QXmppOutgoingServer.cpp \ + server/QXmppPasswordChecker.cpp \ server/QXmppServer.cpp \ server/QXmppServerExtension.cpp -- cgit v1.2.3