2 Situare - A location system for Facebook
3 Copyright (C) 2010 Ixonos Plc. Authors:
5 Ville Tiensuu - ville.tiensuu@ixonos.com
6 Kaj Wallin - kaj.wallin@ixonos.com
7 Henri Lampela - henri.lampela@ixonos.com
9 Situare is free software; you can redistribute it and/or
10 modify it under the terms of the GNU General Public License
11 version 2 as published by the Free Software Foundation.
13 Situare is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with Situare; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
27 #include <QStringList>
28 #include <QVariantMap>
31 #include <QMaemo5InformationBox>
32 #endif // Q_WS_MAEMO_5
34 #include "facebookauthentication.h"
35 #include "facebookcommon.h"
39 FacebookAuthentication::FacebookAuthentication(QObject *parent)
43 qDebug() << __PRETTY_FUNCTION__;
47 void FacebookAuthentication::clearAccountInformation(bool keepUsername)
49 qDebug() << __PRETTY_FUNCTION__;
51 m_loginCredentials.clearCredentials();
52 QSettings settings(DIRECTORY_NAME, FILE_NAME);
55 settings.remove(USERNAME);
56 settings.remove(SETTINGS_AUTOMATIC_UPDATE_ENABLED);
57 settings.remove(SETTINGS_AUTOMATIC_UPDATE_INTERVAL);
60 settings.remove(COOKIES);
61 settings.remove(USER_UNSEND_MESSAGE);
62 settings.remove(USER_UNSEND_MESSAGE_PUBLISH);
65 const QString FacebookAuthentication::loadUsername()
67 qDebug() << __PRETTY_FUNCTION__;
69 QSettings settings(DIRECTORY_NAME, FILE_NAME);
70 return settings.value(USERNAME, EMPTY).toString();
73 FacebookCredentials FacebookAuthentication::loginCredentials() const
75 qDebug() << __PRETTY_FUNCTION__;
76 return m_loginCredentials;
79 void FacebookAuthentication::saveUsername(const QString &username)
81 qDebug() << __PRETTY_FUNCTION__;
83 QSettings settings(DIRECTORY_NAME, FILE_NAME);
84 settings.setValue(USERNAME, username);
87 void FacebookAuthentication::start()
89 qDebug() << __PRETTY_FUNCTION__;
91 QSettings settings(DIRECTORY_NAME, FILE_NAME);
93 QStringList cookies = settings.value(COOKIES).toStringList();
94 if(!cookies.isEmpty()) {
95 emit loginUsingCookies();
99 emit newLoginRequest();
103 bool FacebookAuthentication::updateCredentials(const QUrl &url)
105 qDebug() << __PRETTY_FUNCTION__ << url.toString();
110 qDebug() << "url is valid";
112 QString callbackUrl = url.toString();
113 qDebug() << "callbackUrl: " << callbackUrl.toAscii();
115 if (callbackUrl.indexOf(LOGIN_SUCCESS_REPLY) == 0) {
116 qDebug() << "login success";
118 // let's find out session credentials
119 if(callbackUrl.contains(SESSION_KEY)) {
121 QJson::Parser parser;
124 // split string into string part and json part
125 QStringList list = url.toString().split("=");
127 for(int i=0;i<list.count();i++) {
128 // if string starts with json item
129 if(list.at(i).startsWith("{")) {
130 QByteArray jsonString = list.at(i).toAscii();
131 QVariantMap result = parser.parse (jsonString, &ok).toMap();
134 qFatal("An error occurred during parsing");
135 emit error(SituareError::INVALID_JSON);
138 qDebug() << "Session Key" << result[SESSION_KEY].toString();
139 m_loginCredentials.setSessionKey(result[SESSION_KEY].toString());
141 // // commeted out until qjson parser can handle 64-bit integers
142 // qDebug() << "userID" << result[USER_ID].toString();
143 // m_loginCredentials.setUserID(result[USER_ID].toString().toAscii());
145 // dirty fix, get user id from session_key
146 QStringList list = result[SESSION_KEY].toString().split("-");
147 m_loginCredentials.setUserID(list.at(1));
148 qDebug() << m_loginCredentials.userID();
150 qDebug() << "Expires" << result[EXPIRES].toString();
151 m_loginCredentials.setExpires(result[EXPIRES].toString());
153 qDebug() << "Session Secret" << result[SESSION_SECRET].toString();
154 m_loginCredentials.setSessionSecret(result[SESSION_SECRET].toString());
156 qDebug() << "Signature" << result[SIGNATURE].toString();
157 m_loginCredentials.setSig(result[SIGNATURE].toString());
161 m_freshLogin = false;
162 emit saveCookiesRequest();
164 emit credentialsReady(m_loginCredentials);
166 else if ( callbackUrl.indexOf(LOGIN_FAILURE_REPLY) == 0){
167 qWarning() << "login failure" << endl;
168 qDebug() << callbackUrl;
169 clearAccountInformation(true);
171 emit error(SituareError::LOGIN_FAILED);
176 emit error(SituareError::SESSION_EXPIRED);
179 else if(callbackUrl.indexOf(LOGIN_PAGE) == 0) {
180 qDebug() << "correct loginPage";
183 qDebug() << "totally wrong webPage";
184 // we should not get a wrong page at this point
189 qDebug() << " Loading of page failed invalid URL" << endl;
190 // we should not get a wrong page at this point