#include <QSettings>
#include <QStringList>
#include <QVariantMap>
+#include <QWebView>
#ifdef Q_WS_MAEMO_5
#include <QMaemo5InformationBox>
#include "common.h"
#include "error.h"
-#include "facebookcommon.h"
-#include "ui/facebookloginbrowser.h"
+#include "network/networkcookiejar.h"
+#include "situareservice/situarecommon.h"
+#include "ui/mainwindow.h"
#include "facebookauthentication.h"
-const QString REDIRECT_URI = "http://www.facebook.com/connect/login_success.html";
+const QString FB_LOGIN_SUCCESS_URL = "http://www.facebook.com/connect/login_success.html";
+const QString FB_LOGIN_URL = "https://www.facebook.com/login.php";
-FacebookAuthentication::FacebookAuthentication(QObject *parent)
+FacebookAuthentication::FacebookAuthentication(MainWindow *mainWindow, QObject *parent)
: QObject(parent),
- m_browser(0)
+ m_browser(0),
+ m_mainWindow(mainWindow)
{
qDebug() << __PRETTY_FUNCTION__;
-
}
void FacebookAuthentication::browserDestroyed()
{
qWarning() << __PRETTY_FUNCTION__;
- ///< @todo (HIGH) Is newer called!
-
+ m_mainWindow->toggleProgressIndicator(false);
m_browser = 0;
}
qDebug() << __PRETTY_FUNCTION__;
///< @todo (HIGH) clear session from SituareService
- QSettings settings(DIRECTORY_NAME, FILE_NAME);
+ QSettings settings(SETTINGS_ORGANIZATION_NAME, SETTINGS_APPLICATION_NAME);
if(!keepUsername) {
settings.remove(SETTINGS_AUTOMATIC_UPDATE_ENABLED);
settings.remove(SETTINGS_AUTOMATIC_UPDATE_INTERVAL);
}
- settings.remove(COOKIES);
settings.remove(USER_UNSEND_MESSAGE);
settings.remove(USER_UNSEND_MESSAGE_PUBLISH);
+
+ NetworkCookieJar::clearCookiesSetting();
+}
+
+void FacebookAuthentication::destroyLogin()
+{
+ qWarning() << __PRETTY_FUNCTION__;
+
+ m_mainWindow->destroyLoginDialog();
+ m_browser->deleteLater();
}
void FacebookAuthentication::loadFinished(bool ok)
{
qWarning() << __PRETTY_FUNCTION__;
- emit buildLoginBrowser();
+ if (!m_browser) {
+ m_browser = new QWebView(m_mainWindow);
+
+ if (m_browser) {
+ m_browser->page()->networkAccessManager()->setCookieJar(new NetworkCookieJar());
+
+ connect(m_browser, SIGNAL(loadFinished(bool)),
+ this, SLOT(loadFinished(bool)));
+
+ connect(m_browser, SIGNAL(urlChanged(QUrl)),
+ this, SLOT(urlChanged(QUrl)));
+
+ connect(m_browser, SIGNAL(destroyed(QObject*)),
+ this, SLOT(browserDestroyed()));
+
+ connect(m_browser->page()->networkAccessManager(), SIGNAL(finished(QNetworkReply*)),
+ this, SLOT(networkReplyHandler(QNetworkReply*)));
+ }
+ }
+
+ if (m_browser) {
+ QString url = FB_LOGIN_URL + "?";
+ url.append("api_key=" + API_KEY +"&");
+ url.append("display=touch&");
+ url.append("fbconnect=1&");
+ url.append("next=" + FB_LOGIN_SUCCESS_URL + "&");
+ url.append("return_session=1&");
+ url.append("session_version=3&");
+ url.append("v=1.0&");
+ url.append("req_perms=publish_stream");
+
+ m_browser->load(QUrl(url));
+
+ m_mainWindow->toggleProgressIndicator(true);
+ }
}
void FacebookAuthentication::networkReplyHandler(QNetworkReply *reply)
if (reply->error() != QNetworkReply::NoError) {
qCritical() << __PRETTY_FUNCTION__ << "error:" << reply->error() << reply->errorString();
+ destroyLogin();
/// @todo Emit error signal
}
}
return QString();
}
-void FacebookAuthentication::setBrowser(FacebookLoginBrowser *browser)
-{
- qWarning() << __PRETTY_FUNCTION__;
-
- m_browser = browser;
-
- if (m_browser) {
- connect(m_browser, SIGNAL(loadFinished(bool)),
- this, SLOT(loadFinished(bool)));
-
- connect(m_browser, SIGNAL(urlChanged(QUrl)),
- this, SLOT(urlChanged(QUrl)));
-
- connect(m_browser, SIGNAL(destroyed()),
- this, SLOT(browserDestroyed()));
-
- connect(m_browser->page()->networkAccessManager(), SIGNAL(finished(QNetworkReply*)),
- this, SLOT(networkReplyHandler(QNetworkReply*)));
-
- // 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"));
-
- QString url = "https://www.facebook.com/login.php?";
- url.append("api_key=cf77865a5070f2c2ba3b52cbf3371579&"); ///< @todo hard coded test server api key
- url.append("cancel_url=http://www.facebook.com/connect/login_failure.html&");
- url.append("display=touch&");
- url.append("fbconnect=1&");
- url.append("next=http://www.facebook.com/connect/login_success.html&");
- url.append("return_session=1&");
- url.append("session_version=3&");
- url.append("v=1.0&");
- url.append("req_perms=publish_stream");
-
- m_browser->load(QUrl(url));
- }
-}
-
void FacebookAuthentication::urlChanged(const QUrl &url)
{
qWarning() << __PRETTY_FUNCTION__ << url.toString();
if (!url.toString().contains("session={")) {
// url parameter doesn't contain session data, so login with cookies failed
qWarning() << __PRETTY_FUNCTION__ << "working credentials required";
- m_browser->show();
- } else if (url.toString().startsWith(REDIRECT_URI)) {
+ m_mainWindow->buildLoginDialog(m_browser);
+ } else if (url.toString().startsWith(FB_LOGIN_SUCCESS_URL)) {
// login succeeded
const QString session = parseSession(url);
qWarning() << __PRETTY_FUNCTION__ << "login finished, parsed session:" << session;
- if (!session.isEmpty())
+ if (!session.isEmpty()) {
+ destroyLogin();
emit loggedIn(session);
+ }
}
else {
qWarning() << __PRETTY_FUNCTION__ << "credentials accepted, getting the access_token";