From 1c2aa7919b74740dbca348134c2c676203278a80 Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Fri, 20 Jul 2012 12:19:10 +0200 Subject: start refactoring server-side auth --- src/server/QXmppIncomingClient.cpp | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) (limited to 'src/server/QXmppIncomingClient.cpp') diff --git a/src/server/QXmppIncomingClient.cpp b/src/server/QXmppIncomingClient.cpp index c81c20be..c6984a1a 100644 --- a/src/server/QXmppIncomingClient.cpp +++ b/src/server/QXmppIncomingClient.cpp @@ -48,6 +48,7 @@ public: QString jid; QString resource; QXmppPasswordChecker *passwordChecker; + QXmppSaslServer *saslServer; QXmppSaslDigestMd5 saslDigest; int saslDigestStep; QString saslDigestUsername; @@ -61,6 +62,7 @@ private: QXmppIncomingClientPrivate::QXmppIncomingClientPrivate(QXmppIncomingClient *qq) : idleTimer(0) , passwordChecker(0) + , saslServer(0) , saslDigestStep(0) , q(qq) { @@ -225,9 +227,18 @@ void QXmppIncomingClient::handleStanza(const QDomElement &nodeRecv) } else if (ns == ns_sasl) { + if (!d->passwordChecker) { + // FIXME: what type of failure? + warning("Cannot perform authentication, no password checker"); + sendData(""); + disconnectFromHost(); + return; + } + if (nodeRecv.tagName() == QLatin1String("auth")) { const QString mechanism = nodeRecv.attribute("mechanism"); + d->saslServer = QXmppSaslServer::create(mechanism); if (mechanism == QLatin1String("PLAIN")) { QList auth = QByteArray::fromBase64(nodeRecv.text().toAscii()).split('\0'); @@ -242,13 +253,6 @@ void QXmppIncomingClient::handleStanza(const QDomElement &nodeRecv) request.setDomain(d->domain); request.setUsername(QString::fromUtf8(auth[1])); request.setPassword(QString::fromUtf8(auth[2])); - if (!d->passwordChecker) { - // FIXME: what type of failure? - warning(QString("Cannot authenticate '%1', no password checker").arg(request.username())); - sendData(""); - disconnectFromHost(); - return; - } QXmppPasswordReply *reply = d->passwordChecker->checkPassword(request); reply->setParent(this); @@ -289,13 +293,6 @@ void QXmppIncomingClient::handleStanza(const QDomElement &nodeRecv) // check credentials const QString username = QString::fromUtf8(saslResponse.value("username")); - if (!d->passwordChecker) { - // FIXME: what type of failure? - warning(QString("Cannot authenticate '%1', no password checker").arg(username)); - sendData(""); - disconnectFromHost(); - return; - } QXmppPasswordRequest request; request.setUsername(username); -- cgit v1.2.3