26
|
1 |
/**
|
|
2 |
* Copyright (c) 2010 Sasken Communication Technologies Ltd.
|
|
3 |
* All rights reserved.
|
|
4 |
* This component and the accompanying materials are made available
|
|
5 |
* under the terms of the "{License}"
|
|
6 |
* which accompanies this distribution, and is available
|
|
7 |
* at the URL "{LicenseUrl}".
|
|
8 |
*
|
|
9 |
* Initial Contributors:
|
|
10 |
* Narasimhulu Kavadapu, Sasken Communication Technologies Ltd - Initial contribution
|
|
11 |
*
|
|
12 |
* Contributors:
|
|
13 |
* Siddhartha Chandra, Satish Kanteti Sasken Communication Technologies Ltd
|
|
14 |
* Description:
|
|
15 |
* Login Dialog class of Authentication Application
|
|
16 |
*/
|
|
17 |
|
|
18 |
#include <qdebug.h>
|
|
19 |
|
|
20 |
#include "authAppConstants.h"
|
|
21 |
#include "sessionSP.h"
|
|
22 |
#include "errorCodes.h"
|
|
23 |
#include "loginDialog.h"
|
|
24 |
#include "keys.h"
|
|
25 |
#include <QNetworkCookie>
|
|
26 |
#include <QInputDialog>
|
|
27 |
#include <QSslConfiguration>
|
|
28 |
|
|
29 |
static const QString kStringBoundary = "3i2ndDfv2rTHiSisAbouNdArYfORhtTPEefj3q2f";
|
|
30 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
31 |
// global
|
|
32 |
|
|
33 |
//static const QString kLoginURL = "http://www.facebook.com/login.php";
|
|
34 |
|
|
35 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
36 |
void FBLoginDialog::connectToGetSession(const QString& aToken)
|
|
37 |
{
|
|
38 |
qDebug()<<"Inside FBLoginDialog::connectToGetSession()";
|
|
39 |
iGetSessionRequest = FBRequest::requestWithSession(iSession);
|
|
40 |
|
|
41 |
//connect(iGetSessionRequest, SIGNAL(LoadLoginPage()), this, SLOT(LoadLoginPage()));
|
|
42 |
connect(iGetSessionRequest, SIGNAL(requestDidLoad(QVariant)), this, SLOT(requestDidLoad(QVariant)));
|
|
43 |
connect(iGetSessionRequest, SIGNAL(requestFailedWithNetworkError(QNetworkReply::NetworkError)), this, SLOT(requestFailedWithNetworkError(QNetworkReply::NetworkError)));
|
|
44 |
connect(iGetSessionRequest, SIGNAL(requestFailedWithFacebookError(FBError)), this, SLOT(requestFailedWithFacebookError(FBError)));
|
|
45 |
|
|
46 |
Dictionary params;
|
|
47 |
params["auth_token"] = aToken;
|
|
48 |
|
|
49 |
if (iSession->apiSecret().length())
|
|
50 |
{
|
|
51 |
params["generate_session_secret"]="1";
|
|
52 |
}
|
|
53 |
|
|
54 |
if (iSession->getSessionProxy().length())
|
|
55 |
{
|
|
56 |
iGetSessionRequest->post(iSession->getSessionProxy(),params);
|
|
57 |
}
|
|
58 |
else
|
|
59 |
{
|
|
60 |
iGetSessionRequest->call("facebook.auth.getSession", params);
|
|
61 |
}
|
|
62 |
}
|
|
63 |
void FBLoginDialog::connectToGetToken()
|
|
64 |
{
|
|
65 |
qDebug()<<"Inside FBLoginDialog::connectToGetToken()";
|
|
66 |
iGetSessionRequest = FBRequest::requestWithSession(iSession);
|
|
67 |
|
|
68 |
// connect(iGetSessionRequest, SIGNAL(requestDidLoad(QVariant)), this, SLOT(requestDidLoad(QVariant)));
|
|
69 |
// connect(iGetSessionRequest, SIGNAL(requestFailedWithNetworkError(QNetworkReply::NetworkError)), this, SLOT(requestFailedWithNetworkError(QNetworkReply::NetworkError)));
|
|
70 |
// connect(iGetSessionRequest, SIGNAL(requestFailedWithFacebookError(FBError)), this, SLOT(requestFailedWithFacebookError(FBError)));
|
|
71 |
|
|
72 |
Dictionary postParams;
|
|
73 |
iSession->stroauth_nonce = generateNONCE(43);
|
|
74 |
iSession->stroauth_timestamp = generateTimeStamp();//QString::number(generateTimeStamp());
|
|
75 |
qDebug()<<"iSession->stroauth_timestamp"<<iSession->stroauth_timestamp;
|
|
76 |
//postParams["oauth_callback"] = kBase;
|
|
77 |
postParams["oauth_consumer_key"] = kConsumerKey;
|
|
78 |
postParams["oauth_signature_method"] = "HMAC-SHA1";
|
|
79 |
postParams["oauth_timestamp"] = iSession->stroauth_timestamp;
|
|
80 |
postParams["oauth_nonce"] = iSession->stroauth_nonce;
|
|
81 |
postParams["oauth_version"] = "1.0";
|
|
82 |
FBRequest* req = FBRequest::requestWithSession(iSession);
|
|
83 |
iSession->stroauth_signature = req->generateSig(postParams);
|
|
84 |
iGetSessionRequest->call("/uas/oauth/accessToken", postParams);
|
|
85 |
|
|
86 |
}
|
|
87 |
void FBLoginDialog::loadLoginPage()
|
|
88 |
{
|
|
89 |
iGetSessionRequest = FBRequest::requestWithSession(iSession);
|
|
90 |
qDebug()<<"Inside FBLoginDialog::loadLoginPage()";
|
|
91 |
Dictionary getParams, postParams;
|
|
92 |
iSession->stroauth_nonce = generateNONCE(43);
|
|
93 |
iSession->stroauth_timestamp = generateTimeStamp();//QString::number(generateTimeStamp());
|
|
94 |
qDebug()<<"iSession->stroauth_timestamp"<<iSession->stroauth_timestamp;
|
|
95 |
postParams["oauth_callback"] = "oob";
|
|
96 |
postParams["oauth_consumer_key"] = kConsumerKey;
|
|
97 |
postParams["oauth_signature_method"] = "HMAC-SHA1";
|
|
98 |
postParams["oauth_timestamp"] = iSession->stroauth_timestamp;
|
|
99 |
postParams["oauth_nonce"] = iSession->stroauth_nonce;
|
|
100 |
postParams["oauth_version"] = "1.0";
|
|
101 |
/* FBRequest* req = FBRequest::requestWithSession(iSession);*/
|
|
102 |
iSession->stroauth_signature = iGetSessionRequest->generateSig(postParams);
|
|
103 |
|
|
104 |
connect(iGetSessionRequest, SIGNAL(LoadLoginPage()), this, SLOT(LoadLoginPage()));
|
|
105 |
|
|
106 |
iGetSessionRequest->connect();
|
|
107 |
|
|
108 |
|
|
109 |
|
|
110 |
|
|
111 |
|
|
112 |
|
|
113 |
//loadURL(kRequestTokenUrl,QNetworkAccessManager::PostOperation, getParams, postParams);
|
|
114 |
|
|
115 |
}
|
|
116 |
/*int FBLoginDialog::generateTimeStamp()
|
|
117 |
{
|
|
118 |
QDate oldDate;
|
|
119 |
oldDate.setYMD(1970,1,1);
|
|
120 |
|
|
121 |
QDateTime OldDateTime;
|
|
122 |
OldDateTime.setDate(oldDate);
|
|
123 |
QTime temp;
|
|
124 |
temp.setHMS(0,0,0,0);
|
|
125 |
OldDateTime.setTime(temp);
|
|
126 |
QDateTime CurTime = QDateTime::currentDateTime();
|
|
127 |
|
|
128 |
int timestamp = OldDateTime.secsTo(CurTime);
|
|
129 |
return timestamp;
|
|
130 |
}*/
|
|
131 |
QByteArray FBLoginDialog::generateTimeStamp()
|
|
132 |
{
|
|
133 |
uint time = QDateTime::currentDateTime().toTime_t();
|
|
134 |
QByteArray timestamp = QByteArray::number( time );
|
|
135 |
return timestamp;
|
|
136 |
}
|
|
137 |
QString FBLoginDialog::generateNONCE(const qint64 Length)
|
|
138 |
{
|
|
139 |
srand(time(0));
|
|
140 |
//QDateTime UniqueNumber = QDateTime::currentDateTime();
|
|
141 |
|
|
142 |
//read upto milliseconds
|
|
143 |
QString RetString;//(UniqueNumber.toString("hh/mm/ss/zzz"));
|
|
144 |
|
|
145 |
QString Letters(
|
|
146 |
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");
|
|
147 |
|
|
148 |
//append a randomly generated string to RetString
|
|
149 |
for (int i = 0; i < Length; i++)
|
|
150 |
{
|
|
151 |
RetString.insert((i), Letters.at(rand() % Letters.size()));
|
|
152 |
}
|
|
153 |
|
|
154 |
return RetString;
|
|
155 |
}
|
|
156 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
157 |
|
|
158 |
FBLoginDialog::FBLoginDialog() : FBDialog () {}
|
|
159 |
|
|
160 |
FBLoginDialog::FBLoginDialog(FBSession* aSession) : FBDialog(aSession) {}
|
|
161 |
|
|
162 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
163 |
// FBDialog
|
|
164 |
|
|
165 |
void FBLoginDialog::load()
|
|
166 |
{
|
|
167 |
qDebug()<<"Inside FBLoginDialog::load()";
|
|
168 |
loadLoginPage();
|
|
169 |
}
|
|
170 |
|
|
171 |
void FBLoginDialog::dialogWillDisappear()
|
|
172 |
{
|
|
173 |
qDebug()<<"Inside FBLoginDialog::dialogWillDisappear()";
|
|
174 |
iGetSessionRequest->cancel();
|
|
175 |
|
|
176 |
if (!iSession->isConnected())
|
|
177 |
{
|
|
178 |
iSession->cancelLogin();
|
|
179 |
}
|
|
180 |
}
|
|
181 |
|
|
182 |
void FBLoginDialog::GetSessionKey(const QUrl& aUrl)
|
|
183 |
{
|
|
184 |
qDebug()<<"Inside FBLoginDialog::GetSessionKey()";
|
|
185 |
const QString authToken = "auth_token=";
|
|
186 |
const QString url ( aUrl.toString() );
|
|
187 |
|
|
188 |
int start = url.indexOf(authToken);
|
|
189 |
if (start != -1)
|
|
190 |
{
|
|
191 |
QString token;
|
|
192 |
int end = url.indexOf("&", start);
|
|
193 |
int delta = start + authToken.size() + 1;
|
|
194 |
if (end != -1)
|
|
195 |
{
|
|
196 |
token = url.mid(delta, end - delta );
|
|
197 |
}
|
|
198 |
else
|
|
199 |
{
|
|
200 |
token = url.right(url.size() - delta + 1);
|
|
201 |
}
|
|
202 |
|
|
203 |
connectToGetSession(token);
|
|
204 |
}
|
|
205 |
}
|
|
206 |
void FBLoginDialog::FetchKeyFromUrl(const QUrl& aUrl)
|
|
207 |
{
|
|
208 |
const QString url ( aUrl.toString() );
|
|
209 |
QStringList varList = url.split("{");
|
|
210 |
QString newvar = varList[1];
|
|
211 |
varList.clear();
|
|
212 |
varList = newvar.split(",");
|
|
213 |
QString session_key = varList[0];
|
|
214 |
QString uid = varList[1];
|
|
215 |
QString expires = varList[2];
|
|
216 |
QString secret = varList[3];
|
|
217 |
varList.clear();
|
|
218 |
varList = session_key.split(":");
|
|
219 |
session_key = varList[1];
|
|
220 |
session_key = session_key.mid(1,session_key.length()-2);
|
|
221 |
varList.clear();
|
|
222 |
varList = uid.split(":");
|
|
223 |
uid = varList[1];
|
|
224 |
varList.clear();
|
|
225 |
varList = expires.split(":");
|
|
226 |
expires = varList[1];
|
|
227 |
varList.clear();
|
|
228 |
varList = secret.split(":");
|
|
229 |
secret = varList[1];
|
|
230 |
secret = secret.mid(1,secret.length()-2);
|
|
231 |
varList.clear();
|
|
232 |
qDebug()<<"session_key"<<session_key<<"\n";
|
|
233 |
qDebug()<<"uid"<<uid<<"\n";
|
|
234 |
qDebug()<<"expires"<<expires<<"\n";
|
|
235 |
qDebug()<<"secret"<<secret<<"\n";
|
|
236 |
uint expiry = expires.toUInt();//.toUInt(&conversionError);
|
|
237 |
QDateTime expiration; expiration.setTime_t( expiry );
|
|
238 |
iSession->beginSession(session_key, secret,expiration);
|
|
239 |
iSession->resume();
|
|
240 |
}
|
|
241 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
242 |
// slots for signals from FBRequest
|
|
243 |
|
|
244 |
void FBLoginDialog::requestDidLoad(const QVariant& aResult)
|
|
245 |
{
|
|
246 |
qDebug()<<"Inside FBLoginDialog::requestDidLoad";
|
|
247 |
bool conversionError = false;
|
|
248 |
QVariantHash object = aResult.toHash();
|
|
249 |
QString sessionKey = object.value("session_key").toString();
|
|
250 |
QString sessionSecret = object.value("secret").toString();
|
|
251 |
|
|
252 |
QVariant ex = object.value("expires");
|
|
253 |
uint expires = object.value("expires").toUInt(&conversionError);
|
|
254 |
QDateTime expiration; expiration.setTime_t( expires );
|
|
255 |
|
|
256 |
iSession->beginSession(sessionKey, sessionSecret,expiration);
|
|
257 |
iSession->resume();
|
|
258 |
|
|
259 |
dismissWithSuccess(true, true);
|
|
260 |
}
|
|
261 |
|
|
262 |
void FBLoginDialog::requestFailedWithFacebookError (const FBError& aCode )
|
|
263 |
{
|
|
264 |
qDebug()<<"Inside FBLoginDialog::requestFailedWithFacebookError()";
|
|
265 |
dismissWithError(aCode, true);
|
|
266 |
}
|
|
267 |
|
|
268 |
void FBLoginDialog::requestFailedWithNetworkError( QNetworkReply::NetworkError aCode )
|
|
269 |
{
|
|
270 |
qDebug()<<"Inside FBLoginDialog::requestFailedWithNetworkError()";
|
|
271 |
dismissWithError(aCode, true);
|
|
272 |
}
|
|
273 |
void FBLoginDialog::LoadLoginPage()
|
|
274 |
{
|
|
275 |
|
|
276 |
qDebug()<<"Enter: LoadLoginPage()";
|
|
277 |
QString LoginUrl = "https://api.linkedin.com/uas/oauth/authorize?oauth_token=";//94ab03c4-ae2c-45e4-8732-0e6c4899db63";
|
|
278 |
LoginUrl += iSession->stroauth_Token;
|
|
279 |
proxysettings();
|
|
280 |
qDebug()<<"LoginUrl:"<<LoginUrl;
|
|
281 |
//TBuf<1024> sid(LoginUrl.utf16()); //uncomment to invoke browser
|
|
282 |
//LaunchBrowserL(sid); //uncomment to invoke browser
|
|
283 |
QNetworkRequest request;
|
|
284 |
QSslConfiguration config = request.sslConfiguration();
|
|
285 |
config.setProtocol(QSsl::SslV3);
|
|
286 |
request.setSslConfiguration(config);
|
|
287 |
request.setUrl(QUrl(LoginUrl));
|
|
288 |
iWebView->load(request,QNetworkAccessManager::PostOperation); //uncomment to invoke browser
|
|
289 |
|
|
290 |
|
|
291 |
qDebug()<<"Exit: LoadLoginPage()";
|
|
292 |
|
|
293 |
}
|
|
294 |
void FBLoginDialog::LaunchBrowserL(const TDesC& aUrl)
|
|
295 |
{
|
|
296 |
qDebug()<<"Enter: LaunchBrowserL()";
|
|
297 |
const TInt KWmlBrowserUid = 0x10008D39;
|
|
298 |
TUid id( TUid::Uid( KWmlBrowserUid ) );
|
|
299 |
TApaTaskList taskList( CEikonEnv::Static()->WsSession() );
|
|
300 |
TApaTask task = taskList.FindApp( id );
|
|
301 |
if ( task.Exists() )
|
|
302 |
{
|
|
303 |
qDebug()<<"Inside: if()";
|
|
304 |
HBufC8* param = HBufC8::NewLC( aUrl.Length() + 2);
|
|
305 |
//"4 " is to Start/Continue the browser specifying a URL
|
|
306 |
param->Des().Append(_L("4 "));
|
|
307 |
param->Des().Append(aUrl);
|
|
308 |
task.SendMessage( TUid::Uid( 0 ), *param ); // Uid is not used
|
|
309 |
CleanupStack::PopAndDestroy(param);
|
|
310 |
}
|
|
311 |
else
|
|
312 |
{
|
|
313 |
qDebug()<<"Inside: else()";
|
|
314 |
HBufC16* param = HBufC16::NewLC( aUrl.Length() + 2);
|
|
315 |
//"4 " is to Start/Continue the browser specifying a URL
|
|
316 |
param->Des().Append(_L("4 "));
|
|
317 |
param->Des().Append(aUrl);
|
|
318 |
RApaLsSession appArcSession;
|
|
319 |
// connect to AppArc server
|
|
320 |
User::LeaveIfError(appArcSession.Connect());
|
|
321 |
TThreadId id;
|
|
322 |
appArcSession.StartDocument( *param, TUid::Uid( KWmlBrowserUid)
|
|
323 |
, id );
|
|
324 |
appArcSession.Close();
|
|
325 |
CleanupStack::PopAndDestroy(param);
|
|
326 |
}
|
|
327 |
}
|
|
328 |
void FBLoginDialog::GetAccessToken()
|
|
329 |
{
|
|
330 |
/*qDebug()<<"Inside FBLoginDialog::GetAccessToken()";
|
|
331 |
Dictionary getParams, postParams;
|
|
332 |
iSession->stroauth_nonce = generateNONCE(43);
|
|
333 |
iSession->stroauth_timestamp = generateTimeStamp();//QString::number(generateTimeStamp());
|
|
334 |
qDebug()<<"iSession->stroauth_timestamp"<<iSession->stroauth_timestamp;
|
|
335 |
|
|
336 |
postParams["oauth_consumer_key"] = kConsumerKey;
|
|
337 |
postParams["oauth_signature_method"] = "HMAC-SHA1";
|
|
338 |
postParams["oauth_timestamp"] = iSession->stroauth_timestamp;
|
|
339 |
postParams["oauth_nonce"] = iSession->stroauth_nonce;
|
|
340 |
postParams["oauth_version"] = "1.0";
|
|
341 |
|
|
342 |
iSession->stroauth_signature = iGetSessionRequest->generateSig(postParams);*/
|
|
343 |
}
|