X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Ffacebookservice%2Ffacebookauthentication.cpp;h=02d83eca6350c0c04711ad041b7a6d1e2448d864;hb=5ac73fbad15c9f09f4a9321751aa4e49cb404238;hp=1a0d6f1d1966d859c445857652f4c55a476ebea1;hpb=1e5b1e03ea3fddf1b5dc0c30201851bc7984555b;p=situare diff --git a/src/facebookservice/facebookauthentication.cpp b/src/facebookservice/facebookauthentication.cpp index 1a0d6f1..02d83ec 100644 --- a/src/facebookservice/facebookauthentication.cpp +++ b/src/facebookservice/facebookauthentication.cpp @@ -33,41 +33,76 @@ #include "facebookauthentication.h" #include "facebookcommon.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__; + + 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__; - readCredentials(m_loginCredentials); + 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 { + m_freshLogin = true; + emit newLoginRequest(); } - else - emit credentialsReady(m_loginCredentials); } bool FacebookAuthentication::updateCredentials(const QUrl &url) { - qDebug() << __PRETTY_FUNCTION__; + qDebug() << __PRETTY_FUNCTION__ << url.toString(); bool found = false; @@ -97,13 +132,20 @@ 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()); - qDebug() << "userID" << result[USER_ID].toString(); - m_loginCredentials.setUserID(result[USER_ID].toString()); +// // commeted out until qjson parser can handle 64-bit integers +// qDebug() << "userID" << result[USER_ID].toString(); +// m_loginCredentials.setUserID(result[USER_ID].toString().toAscii()); + + // dirty fix, get user id from session_key + QStringList list = result[SESSION_KEY].toString().split("-"); + m_loginCredentials.setUserID(list.at(1)); + qDebug() << m_loginCredentials.userID(); qDebug() << "Expires" << result[EXPIRES].toString(); m_loginCredentials.setExpires(result[EXPIRES].toString()); @@ -116,20 +158,23 @@ bool FacebookAuthentication::updateCredentials(const QUrl &url) } } found = true; + m_freshLogin = false; + emit saveCookiesRequest(); } - writeCredentials(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"; @@ -148,66 +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)); - }