backup
[situare] / src / facebookservice / facebookauthentication.cpp
index 1213895..02d83ec 100644 (file)
 
 #include "facebookauthentication.h"
 #include "facebookcommon.h"
-#include "../common.h"
+#include "common.h"
 #include "parser.h"
 
 FacebookAuthentication::FacebookAuthentication(QObject *parent)
     : QObject(parent),
-    m_loginAttempts(0)
+    m_freshLogin(false)
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+}
 
+void FacebookAuthentication::clearAccountInformation(bool keepUsername)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    readCredentials(m_loginCredentials);
+    m_loginCredentials.clearCredentials();
+    QSettings settings(DIRECTORY_NAME, FILE_NAME);
+
+    if(!keepUsername) {
+        settings.remove(USERNAME);
+        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);
+}
+
+const QString FacebookAuthentication::loadUsername()
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    QSettings settings(DIRECTORY_NAME, FILE_NAME);
+    return settings.value(USERNAME, EMPTY).toString();
+}
+
+FacebookCredentials FacebookAuthentication::loginCredentials() const
+{
+    qDebug() << __PRETTY_FUNCTION__;
+    return m_loginCredentials;
+}
+
+void FacebookAuthentication::saveUsername(const QString &username)
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    QSettings settings(DIRECTORY_NAME, FILE_NAME);
+    settings.setValue(USERNAME, username);
 }
 
 void FacebookAuthentication::start()
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    if (!verifyCredentials(m_loginCredentials)) {
-        QStringList list;
-        list.append(FACEBOOK_LOGINBASE);
-        list.append(SITUARE_PUBLIC_FACEBOOKAPI_KEY);
-        list.append(INTERVAL1);
-        list.append(SITUARE_LOGIN_SUCCESS);
-        list.append(INTERVAL2);
-        list.append(SITUARE_LOGIN_FAILURE);
-        list.append(FACEBOOK_LOGIN_ENDING);
-
-        emit newLoginRequest(formLoginPageUrl(list));
+    QSettings settings(DIRECTORY_NAME, FILE_NAME);
+
+    QStringList cookies = settings.value(COOKIES).toStringList();
+    if(!cookies.isEmpty()) {
+        emit loginUsingCookies();
     }
     else {
-        emit credentialsReady(false, m_loginCredentials);
+        m_freshLogin = true;
+        emit newLoginRequest();
     }
-
 }
 
 bool FacebookAuthentication::updateCredentials(const QUrl &url)
 {
-    qDebug() << __PRETTY_FUNCTION__;
+    qDebug() << __PRETTY_FUNCTION__ << url.toString();
 
     bool found = false;
 
@@ -100,7 +132,8 @@ bool FacebookAuthentication::updateCredentials(const QUrl &url)
                         if (!ok) {
 
                             qFatal("An error occurred during parsing");
-                            exit (1);
+                            emit error(SituareError::INVALID_JSON);
+                            found = false;
                         }
                         qDebug() << "Session Key" << result[SESSION_KEY].toString();
                         m_loginCredentials.setSessionKey(result[SESSION_KEY].toString());
@@ -125,20 +158,23 @@ bool FacebookAuthentication::updateCredentials(const QUrl &url)
                     }
                 }
                 found = true;
+                m_freshLogin = false;
+                emit saveCookiesRequest();
             }
-            writeCredentials(m_loginCredentials);
-            emit credentialsReady(true, m_loginCredentials);
+            emit credentialsReady(m_loginCredentials);
         }
         else if ( callbackUrl.indexOf(LOGIN_FAILURE_REPLY) == 0){
             qWarning() << "login failure" << endl;
             qDebug() << callbackUrl;
-            ++m_loginAttempts;
-            /* emit loginFailure for every second login attemps, since webview loads login
-               error page (loadingDone() signal is emitted) and we need to avoid that because
-               at this point we don't have new login parameters */
-            if(m_loginAttempts % 2) {
+            clearAccountInformation(true);
+            if(m_freshLogin) {
+                emit error(SituareError::LOGIN_FAILED);
                 emit loginFailure();
             }
+            else {
+                m_freshLogin = true;
+                emit error(SituareError::SESSION_EXPIRED);
+            }
         }
         else if(callbackUrl.indexOf(LOGIN_PAGE) == 0) {
             qDebug() << "correct loginPage";
@@ -157,100 +193,3 @@ bool FacebookAuthentication::updateCredentials(const QUrl &url)
     }
     return found;
 }
-
-void FacebookAuthentication::writeCredentials(const FacebookCredentials &credentials)
-{
-    qDebug() << __PRETTY_FUNCTION__;
-    QSettings settings(DIRECTORY_NAME, FILE_NAME);
-
-    settings.setValue(SESSION_KEY, credentials.sessionKey());
-    settings.setValue(USER_ID, credentials.userID());
-    settings.setValue(EXPIRES, credentials.expires());
-    settings.setValue(SESSION_SECRET, credentials.sessionSecret());
-    settings.setValue(SIGNATURE, credentials.sig());
-}
-
-void FacebookAuthentication::readCredentials(FacebookCredentials &credentialsFromFile)
-{
-    qDebug() << __PRETTY_FUNCTION__;
-
-    QSettings settings(DIRECTORY_NAME, FILE_NAME);
-
-    credentialsFromFile.setSessionKey(settings.value(SESSION_KEY, ERROR).toString());
-    credentialsFromFile.setUserID(settings.value(USER_ID, ERROR).toString());
-    credentialsFromFile.setExpires(settings.value(EXPIRES, ERROR).toString());
-    credentialsFromFile.setSessionSecret(settings.value(SESSION_SECRET, ERROR).toString());
-    credentialsFromFile.setSig(settings.value(SIGNATURE, ERROR).toString());
-}
-
- FacebookCredentials FacebookAuthentication::loginCredentials() const
- {
-     qDebug() << __PRETTY_FUNCTION__;
-     return m_loginCredentials;
- }
-
- bool FacebookAuthentication::verifyCredentials(const FacebookCredentials &credentials) const
- {
-     qDebug() << __PRETTY_FUNCTION__;
-
-     // if expires value is 0, then credentials are valid forever
-     if(credentials.expires() == "0") {
-         return true;
-     }
-     else {
-         const QString dateTimeFormat = "dd.MM.yyyy  hh:mm:ss";
-         QString expires = credentials.expires();
-         QDateTime expireTime;
-         expireTime.setTime_t(expires.toInt());
-         QString expiresString = expireTime.toString(dateTimeFormat);
-         qDebug() << expiresString.toAscii();
-
-         QDateTime currentTime;
-         currentTime = QDateTime::currentDateTime();
-         QString currentTimeString = currentTime.toString(dateTimeFormat);
-         qDebug() << currentTimeString.toAscii();
-
-         return currentTime < expireTime;
-     }
- }
-
- QUrl FacebookAuthentication::formLoginPageUrl(const QStringList &urlParts) const
- {
-    qDebug() << __PRETTY_FUNCTION__;
-
-    return QUrl(urlParts.join(EMPTY));
- }
-
- void FacebookAuthentication::saveUsername(const QString &username)
- {
-     qDebug() << __PRETTY_FUNCTION__;
-
-     QSettings settings(DIRECTORY_NAME, FILE_NAME);
-     settings.setValue(USERNAME, username);
- }
-
- const QString FacebookAuthentication::loadUsername()
- {
-     qDebug() << __PRETTY_FUNCTION__;
-
-     QSettings settings(DIRECTORY_NAME, FILE_NAME);
-     return settings.value(USERNAME, EMPTY).toString();
- }
-
- void FacebookAuthentication::clearAccountInformation(bool keepUsername)
- {
-     qDebug() << __PRETTY_FUNCTION__;
-
-     m_loginCredentials.clearCredentials();
-     QSettings settings(DIRECTORY_NAME, FILE_NAME);
-     if(!keepUsername) {
-        settings.remove(USERNAME);
-     }
-     settings.remove(USER_ID);
-     settings.remove(SESSION_KEY);
-     settings.remove(SESSION_SECRET);
-     settings.remove(EXPIRES);
-     settings.remove(SIGNATURE);
-
-     emit credentialsChanged(m_loginCredentials);
- }