/** * Gets oauth tokens using XAuth method (starts authorization process) * @param username username * @param password password * @remarks Async, emits authorizeXAuthFinished or authorizeXAuthError when there is error */ void OAuthTwitter::authorizeXAuth(const QString &username, const QString &password) { Q_ASSERT(m_netManager != 0); QUrl url(TWITTER_ACCESS_TOKEN_XAUTH_URL); url.addEncodedQueryItem("x_auth_username", username.toUtf8().toPercentEncoding()); url.addEncodedQueryItem("x_auth_password", password.toUtf8().toPercentEncoding()); url.addQueryItem("x_auth_mode", "client_auth"); QByteArray oauthHeader = generateAuthorizationHeader(url, OAuth::POST); QNetworkRequest req(url); req.setRawHeader(AUTH_HEADER, oauthHeader); QNetworkReply *reply = m_netManager->post(req, QByteArray()); connect(reply, SIGNAL(finished()), this, SLOT(finishedAuthorization())); }
/** * Gets access tokens for user entered pin number * @param pin entered pin number */ void OAuthTwitter::requestAccessToken(const QString& pin) { Q_ASSERT(m_netManager != 0); QUrl url(TWITTER_ACCESS_TOKEN_URL); QUrlQuery query; query.addQueryItem("oauth_verifier", pin.toLatin1().toPercentEncoding()); url.setQuery(query); QByteArray oauthHeader = generateAuthorizationHeader(url, OAuth::POST); QEventLoop q; QTimer t; t.setSingleShot(true); connect(&t, SIGNAL(timeout()), &q, SLOT(quit())); QNetworkRequest req(url); req.setRawHeader(AUTH_HEADER, oauthHeader); req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); QNetworkReply *reply = m_netManager->post(req, QByteArray()); connect(reply, SIGNAL(finished()), &q, SLOT(quit())); connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(error())); t.start(5000); q.exec(); if(t.isActive()){ QByteArray response = reply->readAll(); parseTokens(response); reply->deleteLater(); emit authorizePinFinished(); } else { qDebug() << "Timeout"; } }
/** * Starts PIN based OAuth authorization */ void OAuthTwitter::authorizePin() { Q_ASSERT(m_netManager != 0); QUrl url(TWITTER_REQUEST_TOKEN_URL); QByteArray oauthHeader = generateAuthorizationHeader(url, OAuth::POST); QNetworkRequest req(url); req.setRawHeader(AUTH_HEADER, oauthHeader); req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); //enters event loop, simulate blocking io QEventLoop q; QTimer t; t.setSingleShot(true); connect(&t, SIGNAL(timeout()), &q, SLOT(quit())); QNetworkReply *reply = m_netManager->post(req, QByteArray()); connect(reply, SIGNAL(finished()), &q, SLOT(quit())); connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(error())); t.start(5000); q.exec(); if (t.isActive()) { t.stop(); QByteArray response = reply->readAll(); parseTokens(response); reply->deleteLater(); requestAuthorization(); } else { qDebug() << "Timeout"; } }