diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-08-12 07:55:43 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-08-12 07:55:43 +0000 |
| commit | 4e6d4908fdf5168fbd0ad4025f00a8d133622b4d (patch) | |
| tree | 4f434a77e0a13f84e9b417a2fa74c68d82730f16 /src | |
| parent | 3ad23dd378b7b769ff65c6bf297d2547184e78e2 (diff) | |
| download | qxmpp-4e6d4908fdf5168fbd0ad4025f00a8d133622b4d.tar.gz | |
start refactoring and testing non-SASL auth
Diffstat (limited to 'src')
| -rw-r--r-- | src/QXmppNonSASLAuth.cpp | 81 | ||||
| -rw-r--r-- | src/QXmppNonSASLAuth.h | 35 | ||||
| -rw-r--r-- | src/QXmppStream.cpp | 19 |
3 files changed, 81 insertions, 54 deletions
diff --git a/src/QXmppNonSASLAuth.cpp b/src/QXmppNonSASLAuth.cpp index c17a1ba6..7e33fa43 100644 --- a/src/QXmppNonSASLAuth.cpp +++ b/src/QXmppNonSASLAuth.cpp @@ -21,55 +21,70 @@ * */ -#include "QXmppNonSASLAuth.h" -#include "QXmppUtils.h" #include <QCryptographicHash> +#include <QDomElement> #include <QXmlStreamWriter> -QXmppNonSASLAuthTypesRequestIq::QXmppNonSASLAuthTypesRequestIq() : QXmppIq(QXmppIq::Get) -{ +#include "QXmppConstants.h" +#include "QXmppNonSASLAuth.h" +#include "QXmppUtils.h" +QXmppNonSASLAuthIq::QXmppNonSASLAuthIq() + : QXmppIq(QXmppIq::Set), + m_useplaintext(false) +{ } -void QXmppNonSASLAuthTypesRequestIq::setUsername( const QString &username ) +void QXmppNonSASLAuthIq::parseElementFromChild(const QDomElement &element) { - m_username = username; + QDomElement queryElement = element.firstChildElement("query"); + m_username = queryElement.firstChildElement("username").text(); + m_password = queryElement.firstChildElement("password").text(); + m_digest = queryElement.firstChildElement("digest").text(); + m_resource = queryElement.firstChildElement("resource").text(); } -void QXmppNonSASLAuthTypesRequestIq::toXmlElementFromChild(QXmlStreamWriter *writer) const +void QXmppNonSASLAuthIq::toXmlElementFromChild(QXmlStreamWriter *writer) const { writer->writeStartElement("query"); - writer->writeAttribute( "xmlns","jabber:iq:auth"); - writer->writeTextElement("username", m_username ); + writer->writeAttribute("xmlns", ns_auth); + if (!m_username.isEmpty()) + writer->writeTextElement("username", m_username); + if (!m_password.isEmpty()) + { + if ( m_useplaintext ) + writer->writeTextElement("password", m_password); + else + {//SHA1(concat(sid, password)). + QByteArray textSid = m_sid.toUtf8(); + QByteArray encodedPassword = m_password.toUtf8(); + QByteArray digest = QCryptographicHash::hash(textSid + encodedPassword, QCryptographicHash::Sha1 ).toHex(); + writer->writeTextElement("digest", digest); + } + } + if (!m_resource.isEmpty()) + writer->writeTextElement("resource", m_resource); writer->writeEndElement(); } -QXmppNonSASLAuthIq::QXmppNonSASLAuthIq() : QXmppIq(QXmppIq::Set), m_useplaintext(false) +QString QXmppNonSASLAuthIq::username() const { + return m_username; +} +void QXmppNonSASLAuthIq::setUsername( const QString &username ) +{ + m_username = username; } -void QXmppNonSASLAuthIq::toXmlElementFromChild(QXmlStreamWriter *writer) const +QString QXmppNonSASLAuthIq::digest() const { - writer->writeStartElement("query"); - writer->writeAttribute( "xmlns","jabber:iq:auth"); - writer->writeTextElement("username", m_username ); - if ( m_useplaintext ) - writer->writeTextElement("password", m_password ); - else - {//SHA1(concat(sid, password)). - QByteArray textSid = m_sid.toUtf8(); - QByteArray encodedPassword = m_password.toUtf8(); - QByteArray digest = QCryptographicHash::hash(textSid + encodedPassword, QCryptographicHash::Sha1 ).toHex(); - writer->writeTextElement("digest", digest ); - } - writer->writeTextElement("resource", m_resource ); - writer->writeEndElement(); + return m_digest; } -void QXmppNonSASLAuthIq::setUsername( const QString &username ) +QString QXmppNonSASLAuthIq::password() const { - m_username = username; + return m_password; } void QXmppNonSASLAuthIq::setPassword( const QString &password ) @@ -77,17 +92,23 @@ void QXmppNonSASLAuthIq::setPassword( const QString &password ) m_password = password; } -void QXmppNonSASLAuthIq::setResource( const QString &resource ) +QString QXmppNonSASLAuthIq::resource() const +{ + return m_resource; +} + +void QXmppNonSASLAuthIq::setResource(const QString &resource) { m_resource = resource; } -void QXmppNonSASLAuthIq::setStreamId( const QString &sid ) +void QXmppNonSASLAuthIq::setStreamId(const QString &sid) { m_sid = sid; } -void QXmppNonSASLAuthIq::setUsePlainText( bool use ) +void QXmppNonSASLAuthIq::setUsePlainText(bool use) { m_useplaintext = use; } + diff --git a/src/QXmppNonSASLAuth.h b/src/QXmppNonSASLAuth.h index 956814fa..10dab42c 100644 --- a/src/QXmppNonSASLAuth.h +++ b/src/QXmppNonSASLAuth.h @@ -26,29 +26,34 @@ #include "QXmppIq.h" -class QXmppNonSASLAuthTypesRequestIq : public QXmppIq -{ -public: - QXmppNonSASLAuthTypesRequestIq(); - void setUsername( const QString &username ); - virtual void toXmlElementFromChild(QXmlStreamWriter *writer) const; -private: - QString m_username; -}; - class QXmppNonSASLAuthIq : public QXmppIq { public: QXmppNonSASLAuthIq(); - virtual void toXmlElementFromChild(QXmlStreamWriter *writer) const; - void setUsername( const QString &username ); - void setPassword( const QString &password ); - void setResource( const QString &resource ); - void setStreamId( const QString &sid ); + + QString username() const; + void setUsername(const QString &username); + + QString digest() const; + + QString password() const; + void setPassword(const QString &password); + + QString resource() const; + void setResource(const QString &resource); + + void setStreamId(const QString &sid); void setUsePlainText( bool useplaintext ); +protected: + /// \cond + void parseElementFromChild(const QDomElement &element); + void toXmlElementFromChild(QXmlStreamWriter *writer) const; + /// \endcond + private: QString m_username; + QString m_digest; QString m_password; QString m_resource; QString m_sid; diff --git a/src/QXmppStream.cpp b/src/QXmppStream.cpp index 4e655885..d4625ba3 100644 --- a/src/QXmppStream.cpp +++ b/src/QXmppStream.cpp @@ -224,15 +224,6 @@ void QXmppStream::socketReadReady() parser(data); } -void QXmppStream::sendNonSASLAuthQuery( const QString &to ) -{ - QXmppNonSASLAuthTypesRequestIq authQuery; - authQuery.setTo(to); - authQuery.setUsername(configuration().user()); - - sendPacket(authQuery); -} - /// Returns the QXmppLogger associated with the current QXmppStream. QXmppLogger *QXmppStream::logger() @@ -821,6 +812,7 @@ bool QXmppStream::sendToServer(const QByteArray& packet) void QXmppStream::sendNonSASLAuth(bool plainText) { QXmppNonSASLAuthIq authQuery; + authQuery.setType(QXmppIq::Set); authQuery.setUsername(configuration().user()); authQuery.setPassword(configuration().passwd()); authQuery.setResource(configuration().resource()); @@ -830,6 +822,15 @@ void QXmppStream::sendNonSASLAuth(bool plainText) sendPacket(authQuery); } +void QXmppStream::sendNonSASLAuthQuery( const QString &to ) +{ + QXmppNonSASLAuthIq authQuery; + authQuery.setType(QXmppIq::Get); + authQuery.setTo(to); + authQuery.setUsername(configuration().user()); + sendPacket(authQuery); +} + // challenge is BASE64 encoded string void QXmppStream::sendAuthDigestMD5ResponseStep1(const QString& challenge) { |
