Parsing the access token from the url
authorSami Rämö <sami.ramo@ixonos.com>
Fri, 24 Sep 2010 10:19:08 +0000 (13:19 +0300)
committerSami Rämö <sami.ramo@ixonos.com>
Fri, 24 Sep 2010 10:19:08 +0000 (13:19 +0300)
src/engine/engine.cpp
src/facebookservice/facebookauthentication.cpp
src/facebookservice/facebookauthentication.h

index 3034747..975a4c7 100644 (file)
@@ -370,6 +370,13 @@ void SituareEngine::login()
     qWarning() << __PRETTY_FUNCTION__;
 
     FacebookLoginBrowser *browser = m_ui->buildFacebookLoginBrowser();
+
+    connect(browser, SIGNAL(loadFinished(bool)),
+            m_facebookAuthenticator, SLOT(loadFinished(bool)));
+
+    connect(browser, SIGNAL(urlChanged(QUrl)),
+            m_facebookAuthenticator, SLOT(urlChanged(QUrl)));
+
     browser->load(QUrl("https://graph.facebook.com/oauth/authorize?client_id=4197c64da2fb6b927236feaea32d7d81&redirect_uri=http://www.facebook.com/connect/login_success.html&display=touch&type=user_agent"));
 }
 
index 12f46e3..398e55d 100644 (file)
@@ -39,6 +39,8 @@
 
 #include "facebookauthentication.h"
 
+const QString REDIRECT_URI = "http://www.facebook.com/connect/login_success.html";
+
 FacebookAuthentication::FacebookAuthentication(QObject *parent)
     : QObject(parent),
     m_freshLogin(false)
@@ -65,6 +67,13 @@ void FacebookAuthentication::clearAccountInformation(bool keepUsername)
     settings.remove(USER_UNSEND_MESSAGE_PUBLISH);
 }
 
+void FacebookAuthentication::loadFinished(bool ok)
+{
+    qWarning() << __PRETTY_FUNCTION__ << ok;
+
+    ///< @todo show browsed window if url != redirect url
+}
+
 const QString FacebookAuthentication::loadUsername()
 {
     qDebug() << __PRETTY_FUNCTION__;
@@ -79,6 +88,24 @@ FacebookCredentials FacebookAuthentication::loginCredentials() const
     return m_loginCredentials;
 }
 
+QString FacebookAuthentication::parseAccessToken(const QUrl &url)
+{
+    qWarning() << __PRETTY_FUNCTION__;
+
+    const QString ACCESS_TOKEN_PARAMETER("#access_token=");
+    const QString EXPIRATION_PARAMETER("&expires_in=");
+
+    QString urlString = url.toString();
+
+    int begin = urlString.indexOf(ACCESS_TOKEN_PARAMETER) + ACCESS_TOKEN_PARAMETER.length();
+    int end = urlString.indexOf(EXPIRATION_PARAMETER);
+
+    if ((begin > -1) && (end > begin))
+        return urlString.mid(begin, end - begin);
+    else
+        return QString();
+}
+
 void FacebookAuthentication::saveUsername(const QString &username)
 {
     qDebug() << __PRETTY_FUNCTION__;
@@ -190,3 +217,14 @@ bool FacebookAuthentication::updateCredentials(const QUrl &url)
     }
     return found;
 }
+
+void FacebookAuthentication::urlChanged(const QUrl &url)
+{
+    qWarning() << __PRETTY_FUNCTION__ << url.toString();
+
+    // if login succeeded
+    if (url.toString().startsWith(REDIRECT_URI)) {
+        ///< @todo hide browser dialog
+        qWarning() << __PRETTY_FUNCTION__ << "access_token:" << parseAccessToken(url);
+    }
+}
index f7f8082..23c5e4c 100644 (file)
@@ -85,12 +85,17 @@ public slots:
     /**
     * @brief Shows the m_webView and loads page that is specified in the m_facebookLoginPage
     *        variable. Specifies font size for the page.
-    *    
+    *
     */
     void start();
 
+private:
+    QString parseAccessToken(const QUrl &url);
+
 private slots:
 
+    void loadFinished(bool ok);
+
     /**
     * @brief  Search credentials from URL that is given as parameter.
     *         If credentials are found thay are stored to loginCredentials variable.
@@ -101,6 +106,8 @@ private slots:
     */
     bool updateCredentials(const QUrl & url);
 
+    void urlChanged(const QUrl &url);
+
 /*******************************************************************************
  * SIGNALS
  ******************************************************************************/