Files
@ 7291e4c1ca28
Branch filter:
Location: libtransport.git/3rdparty/o2/examples/facebookdemo/fbdemo.cpp
7291e4c1ca28
3.9 KiB
text/x-c++hdr
Add 3rdparty oauth 2 library
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | #include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QDesktopServices>
#include <QMetaEnum>
#include <QDebug>
#include "fbdemo.h"
#include "o2globals.h"
#include "o2settingsstore.h"
const char FB_APP_KEY[] = "227896037359072";
const char FB_APP_SECRET[] = "3d35b063872579cf7213e09e76b65ceb";
const char FB_REQUEST_URL[] = "https://www.facebook.com/dialog/oauth";
const char FB_TOKEN_URL[] = "https://graph.facebook.com/oauth/access_token";
const char FB_DEBUG_TOKEN[] = "https://graph.facebook.com/me?fields=id&access_token=%1";
const int localPort = 8888;
#define QENUM_NAME(o,e,v) \
(o::staticMetaObject.enumerator(o::staticMetaObject.indexOfEnumerator(#e)).\
valueToKey((v)))
#define GRANTFLOW_STR(v) QString(QENUM_NAME(O2, \
GrantFlow, v))
FBDemo::FBDemo(QObject *parent) :
QObject(parent) {
o2Facebook_ = new O2Facebook(this);
o2Facebook_->setClientId(FB_APP_KEY);
o2Facebook_->setClientSecret(FB_APP_SECRET);
o2Facebook_->setLocalPort(localPort);
o2Facebook_->setRequestUrl(FB_REQUEST_URL);
o2Facebook_->setTokenUrl(FB_TOKEN_URL);
// Create a store object for writing the received tokens
O2SettingsStore *store = new O2SettingsStore(O2_ENCRYPTION_KEY);
store->setGroupKey("facebook");
o2Facebook_->setStore(store);
connect(o2Facebook_, SIGNAL(linkedChanged()),
this, SLOT(onLinkedChanged()));
connect(o2Facebook_, SIGNAL(linkingFailed()),
this, SIGNAL(linkingFailed()));
connect(o2Facebook_, SIGNAL(linkingSucceeded()),
this, SLOT(onLinkingSucceeded()));
connect(o2Facebook_, SIGNAL(openBrowser(QUrl)),
this, SLOT(onOpenBrowser(QUrl)));
connect(o2Facebook_, SIGNAL(closeBrowser()),
this, SLOT(onCloseBrowser()));
}
void FBDemo::doOAuth(O2::GrantFlow grantFlowType) {
qDebug() << "Starting OAuth 2 with grant flow type"
<< GRANTFLOW_STR(grantFlowType) << "...";
o2Facebook_->setGrantFlow(grantFlowType);
o2Facebook_->link();
}
void FBDemo::validateToken() {
if (!o2Facebook_->linked()) {
qWarning() << "ERROR: Application is not linked!";
emit linkingFailed();
return;
}
QString accessToken = o2Facebook_->token();
QString debugUrlStr = QString(FB_DEBUG_TOKEN).arg(accessToken);
QNetworkRequest request = QNetworkRequest(QUrl(debugUrlStr));
QNetworkAccessManager *mgr = new QNetworkAccessManager(this);
QNetworkReply *reply = mgr->get(request);
connect(reply, SIGNAL(finished()), this, SLOT(onFinished()));
qDebug() << "Validating user token. Please wait...";
}
void FBDemo::onOpenBrowser(const QUrl &url) {
QDesktopServices::openUrl(url);
}
void FBDemo::onCloseBrowser() {
}
void FBDemo::onLinkedChanged() {
qDebug() << "Link changed!";
}
void FBDemo::onLinkingSucceeded() {
O2Facebook* o1t = qobject_cast<O2Facebook *>(sender());
QVariantMap extraTokens = o1t->extraTokens();
if (!extraTokens.isEmpty()) {
emit extraTokensReady(extraTokens);
qDebug() << "Extra tokens in response:";
foreach (QString key, extraTokens.keys()) {
qDebug() << "\t" << key << ":" << extraTokens.value(key).toString();
}
}
emit linkingSucceeded();
}
void FBDemo::onFinished() {
QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
if (!reply) {
qWarning() << "NULL reply!";
emit linkingFailed();
return;
}
reply->deleteLater();
if (reply->error() != QNetworkReply::NoError) {
qWarning() << "Reply error:" << reply->error();
qWarning() << "Reason:" << reply->errorString();
emit linkingFailed();
return;
}
QByteArray replyData = reply->readAll();
bool valid = !replyData.contains("error");
if (valid) {
qDebug() << "Token is valid";
emit linkingSucceeded();
} else {
qDebug() << "Token is invalid";
emit linkingFailed();
}
}
|