aboutsummaryrefslogtreecommitdiff
path: root/src/base/QXmppSasl.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2012-09-05 15:28:18 +0200
committerJeremy Lainé <jeremy.laine@m4x.org>2012-09-05 15:28:18 +0200
commit9168d631d5c266ee79c3112840423d4fca0c96dd (patch)
treed5e9d67627ca46cb04eb63e06a50ffa7dc38aa7d /src/base/QXmppSasl.cpp
parent49d30871e8a605bea9679353afd9a6fb6a877664 (diff)
downloadqxmpp-9168d631d5c266ee79c3112840423d4fca0c96dd.tar.gz
Add support for X-OAUTH2 authentication for Google Talk.
Diffstat (limited to 'src/base/QXmppSasl.cpp')
-rw-r--r--src/base/QXmppSasl.cpp29
1 files changed, 28 insertions, 1 deletions
diff --git a/src/base/QXmppSasl.cpp b/src/base/QXmppSasl.cpp
index 54683032..bf50eaa6 100644
--- a/src/base/QXmppSasl.cpp
+++ b/src/base/QXmppSasl.cpp
@@ -230,7 +230,7 @@ QXmppSaslClient::~QXmppSaslClient()
QStringList QXmppSaslClient::availableMechanisms()
{
- return QStringList() << "PLAIN" << "DIGEST-MD5" << "ANONYMOUS" << "X-FACEBOOK-PLATFORM" << "X-MESSENGER-OAUTH2";
+ return QStringList() << "PLAIN" << "DIGEST-MD5" << "ANONYMOUS" << "X-FACEBOOK-PLATFORM" << "X-MESSENGER-OAUTH2" << "X-OAUTH2";
}
/// Creates an SASL client for the given mechanism.
@@ -247,6 +247,8 @@ QXmppSaslClient* QXmppSaslClient::create(const QString &mechanism, QObject *pare
return new QXmppSaslClientFacebook(parent);
} else if (mechanism == "X-MESSENGER-OAUTH2") {
return new QXmppSaslClientWindowsLive(parent);
+ } else if (mechanism == "X-OAUTH2") {
+ return new QXmppSaslClientGoogle(parent);
} else {
return 0;
}
@@ -456,6 +458,31 @@ bool QXmppSaslClientFacebook::respond(const QByteArray &challenge, QByteArray &r
}
}
+QXmppSaslClientGoogle::QXmppSaslClientGoogle(QObject *parent)
+ : QXmppSaslClient(parent)
+ , m_step(0)
+{
+}
+
+QString QXmppSaslClientGoogle::mechanism() const
+{
+ return "X-OAUTH2";
+}
+
+bool QXmppSaslClientGoogle::respond(const QByteArray &challenge, QByteArray &response)
+{
+ Q_UNUSED(challenge);
+ if (m_step == 0) {
+ // send initial response
+ response = QString('\0' + username() + '\0' + password()).toUtf8();
+ m_step++;
+ return true;
+ } else {
+ warning("QXmppSaslClientGoogle : Invalid step");
+ return false;
+ }
+}
+
QXmppSaslClientPlain::QXmppSaslClientPlain(QObject *parent)
: QXmppSaslClient(parent)
, m_step(0)