Switched to Google's new authentication method.
authorJan Dumon <j.dumon@option.com>
Wed, 17 Mar 2010 20:39:51 +0000 (21:39 +0100)
committerJan Dumon <j.dumon@option.com>
Wed, 17 Mar 2010 20:39:51 +0000 (21:39 +0100)
src/googlereader.cpp
src/googlereader.h

index e9dfc19..dcb76dc 100644 (file)
@@ -41,6 +41,7 @@ void Feed::fetch(bool cont) {
                url.addEncodedQueryItem("r", "o");
        }
 
+       request.setRawHeader("Authorization", reader->getAuth());
        request.setUrl(url);
        reply = reader->getManager()->get(request);
        connect(reply, SIGNAL(finished()), SLOT(fetchFinished()));
@@ -110,10 +111,10 @@ GoogleReader::GoogleReader() {
        connect(&manager, SIGNAL(finished(QNetworkReply*)),
                SLOT(downloadFinished(QNetworkReply*)));
 
-       SID = NULL;
+       auth.clear();
        updateSubscriptionsPending = false;
        updateUnreadPending = false;
-       SIDPending = false;
+       authPending = false;
 
        login_url.setUrl("https://www.google.com/accounts/ClientLogin");
        subscriptions_url.setUrl("http://www.google.com/reader/api/0/subscription/list?output=json");
@@ -148,7 +149,7 @@ void GoogleReader::downloadFinished(QNetworkReply *reply) {
        if (reply->error()) {
                qDebug() << "Download of" << url << "failed:" << qPrintable(reply->errorString());
                if(url == login_url) {
-                       SIDPending = false;
+                       authPending = false;
                        emit loginFailed("Incorrect username or password");
                }
                else if(url == edittag_url)
@@ -157,17 +158,15 @@ void GoogleReader::downloadFinished(QNetworkReply *reply) {
        }
        else if(url == login_url) {
                QByteArray data = reply->readAll();
-               data.remove(0, data.indexOf("SID=", 0) + 4);
+               data.remove(0, data.indexOf("Auth=", 0) + 5);
                data.remove(data.indexOf("\n", 0), 1024);
-               SID = strdup(data.data());
+               auth.clear();
+               auth.append("GoogleLogin auth=");
+               auth.append(data);
 
-               qDebug() << "SID:" << SID;
+               qDebug() << "Auth:" << auth;
 
-               manager.cookieJar()->setCookiesFromUrl(
-                       QList<QNetworkCookie>() << QNetworkCookie("SID", SID),
-                       QUrl("http://www.google.com"));
-
-               SIDPending = false;
+               authPending = false;
 
                getToken();
 
@@ -283,12 +282,12 @@ void GoogleReader::parseUnread(QByteArray data) {
        emit updateUnreadComplete();
 }
 
-void GoogleReader::getSID() {
+void GoogleReader::clientLogin() {
 
-       if(SIDPending)
+       if(authPending)
                return;
 
-       SIDPending = true;
+       authPending = true;
 
        QNetworkRequest request;
        request.setUrl(login_url);
@@ -309,6 +308,7 @@ void GoogleReader::getSID() {
 
 void GoogleReader::getToken() {
        QNetworkRequest request;
+       request.setRawHeader("Authorization", auth);
        request.setUrl(token_url);
        manager.get(request);
 }
@@ -319,12 +319,13 @@ void GoogleReader::updateSubscriptions() {
        if(updateSubscriptionsPending)
                return;
 
-       if(!SID) {
+       if(auth == "") {
                updateSubscriptionsPending = true;
-               getSID();
+               clientLogin();
                return;
        }
 
+       request.setRawHeader("Authorization", auth);
        request.setUrl(subscriptions_url);
        manager.get(request);
 }
@@ -335,12 +336,13 @@ void GoogleReader::updateUnread() {
        if(updateUnreadPending)
                return;
 
-       if(!SID) {
+       if(auth == "") {
                updateUnreadPending = true;
-               getSID();
+               clientLogin();
                return;
        }
 
+       request.setRawHeader("Authorization", auth);
        request.setUrl(unread_url);
        manager.get(request);
 }
@@ -390,6 +392,7 @@ void Feed::markRead() {
                /* Mark all the remaining items read */
 
                QNetworkRequest request;
+               request.setRawHeader("Authorization", reader->getAuth());
                request.setUrl(reader->markallread_url);
 
                buffer.open(QBuffer::ReadWrite | QBuffer::Truncate);
@@ -439,6 +442,7 @@ void Entry::markRead(bool mark_read) {
                return;
 
        QNetworkRequest request;
+       request.setRawHeader("Authorization", feed->reader->getAuth());
        request.setUrl(feed->reader->edittag_url);
 
        postread.open(QBuffer::ReadWrite | QBuffer::Truncate);
@@ -468,6 +472,7 @@ void Entry::markStar(bool mark_star) {
                return;
 
        QNetworkRequest request;
+       request.setRawHeader("Authorization", feed->reader->getAuth());
        request.setUrl(feed->reader->edittag_url);
 
        poststar.open(QBuffer::ReadWrite | QBuffer::Truncate);
@@ -501,6 +506,7 @@ void Entry::markShared(bool mark_shared) {
                return;
 
        QNetworkRequest request;
+       request.setRawHeader("Authorization", feed->reader->getAuth());
        request.setUrl(feed->reader->edittag_url);
 
        postshared.open(QBuffer::ReadWrite | QBuffer::Truncate);
index da927aa..360f7dd 100644 (file)
@@ -139,24 +139,28 @@ class GoogleReader: public QObject {
                void setLogin(QString l) { login = l; }
                void setPasswd(QString p) { passwd = p; }
                void logOut() { 
-                       SID = NULL; 
+                       auth = NULL;
                        token = NULL;
                        updateSubscriptionsPending = false;
                        updateUnreadPending = false;
-                       SIDPending = false;
+                       authPending = false;
+               }
+
+               QByteArray getAuth() {
+                       return auth;
                }
 
        private slots:
                void downloadFinished(QNetworkReply *reply);
 
        private:
-               char *SID;
+               QByteArray auth;
                QBuffer buffer;
                bool updateSubscriptionsPending;
                bool updateUnreadPending;
-               bool SIDPending;
+               bool authPending;
 
-               void getSID();
+               void clientLogin();
                void parseSubscriptions(QByteArray data);
                void parseUnread(QByteArray data);