example/AuthApp/src/loginDialog.cpp
changeset 14 a469c0e6e7fb
child 17 106a4bfcb866
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/AuthApp/src/loginDialog.cpp	Wed Jun 23 19:51:49 2010 +0530
@@ -0,0 +1,152 @@
+/**
+* Copyright (c) 2010 Sasken Communication Technologies Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "{License}"
+* which accompanies  this distribution, and is available
+* at the URL "{LicenseUrl}".
+*
+* Initial Contributors:
+* Narasimhulu Kavadapu, Sasken Communication Technologies Ltd - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* Login Dialog class of Authentication Application
+*/
+
+#include "authAppConstants.h"
+#include "sessionSP.h"
+#include "errorCodes.h"
+#include "loginDialog.h"
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// global
+
+static const QString kLoginURL = "http://www.facebook.com/login.php";
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+void FBLoginDialog::connectToGetSession(const QString& aToken)
+{
+    iGetSessionRequest = FBRequest::requestWithSession(iSession);
+
+    connect(iGetSessionRequest, SIGNAL(requestDidLoad(QVariant)), this, SLOT(requestDidLoad(QVariant)));
+    connect(iGetSessionRequest, SIGNAL(requestFailedWithNetworkError(QNetworkReply::NetworkError)), this, SLOT(requestFailedWithNetworkError(QNetworkReply::NetworkError)));
+    connect(iGetSessionRequest, SIGNAL(requestFailedWithFacebookError(FBError)), this, SLOT(requestFailedWithFacebookError(FBError)));
+
+    Dictionary params;
+    params["auth_token"] = aToken;
+
+    if (iSession->apiSecret().length())
+    {
+        params["generate_session_secret"]="1";
+    }
+
+    if (iSession->getSessionProxy().length())
+    {
+        iGetSessionRequest->post(iSession->getSessionProxy(),params);
+    }
+    else
+    {
+        iGetSessionRequest->call("facebook.auth.getSession", params);
+    }
+}
+
+void FBLoginDialog::loadLoginPage()
+{
+    Dictionary getParams, postParams;
+
+    getParams["fbconnect"] = "1";
+	
+    #ifdef __WINSCW__ 
+		getParams["connect_display"] = "touch";
+	#else
+		getParams["connect_display"] = "popup";
+	#endif
+		
+    getParams["api_key"] = iSession->apiKey();
+    getParams["next"] = KSuccessurl;
+    getParams["cancel_url"] = "http://www.facebook.com/connect/login_failure.html";
+    getParams["req_perms"] = "read_stream,publish_stream,offline_access";
+
+    loadURL(kLoginURL,QNetworkAccessManager::GetOperation, getParams, postParams);
+
+}
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+FBLoginDialog::FBLoginDialog() : FBDialog () {}
+
+FBLoginDialog::FBLoginDialog(FBSession* aSession) : FBDialog(aSession) {}
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// FBDialog
+
+void FBLoginDialog::load()
+{
+    loadLoginPage();
+}
+
+void FBLoginDialog::dialogWillDisappear()
+{
+  iGetSessionRequest->cancel();
+
+  if (!iSession->isConnected())
+  {
+      iSession->cancelLogin();
+  }
+}
+
+void FBLoginDialog::GetSessionKey(const QUrl& aUrl)
+{
+    const QString authToken = "auth_token=";
+    const QString url ( aUrl.toString() );
+
+    int start = url.indexOf(authToken);
+    if (start != -1)
+    {
+        QString token;
+        int end = url.indexOf("&", start);
+        int delta = start + authToken.size() + 1;
+        if (end != -1)
+        {
+            token = url.mid(delta, end - delta );
+        }
+        else
+        {
+            token = url.right(url.size() - delta + 1);
+        }
+
+        connectToGetSession(token);
+    }
+}
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// slots for signals from FBRequest
+
+void FBLoginDialog::requestDidLoad(const QVariant& aResult)
+{
+    bool conversionError = false;
+    QVariantHash object = aResult.toHash();
+    QString sessionKey = object.value("session_key").toString();
+    QString sessionSecret = object.value("secret").toString();
+
+    QVariant ex = object.value("expires");
+    uint expires = object.value("expires").toUInt(&conversionError);
+    QDateTime expiration; expiration.setTime_t( expires );
+
+    iSession->beginSession(sessionKey, sessionSecret,expiration);
+    iSession->resume();
+
+    dismissWithSuccess(true, true);
+}
+
+void FBLoginDialog::requestFailedWithFacebookError (const FBError& aCode )
+{
+    dismissWithError(aCode, true);
+}
+
+void FBLoginDialog::requestFailedWithNetworkError( QNetworkReply::NetworkError aCode )
+{
+    dismissWithError(aCode, true);
+}