From 4e6d4908fdf5168fbd0ad4025f00a8d133622b4d Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Thu, 12 Aug 2010 07:55:43 +0000 Subject: start refactoring and testing non-SASL auth --- src/QXmppNonSASLAuth.cpp | 81 ++++++++++++++++++++++++++++++------------------ 1 file changed, 51 insertions(+), 30 deletions(-) (limited to 'src/QXmppNonSASLAuth.cpp') 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 +#include #include -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; } + -- cgit v1.2.3