void MediaDownload::startRequest(unsigned position, unsigned size) { Q_ASSERT(m_url.isValid()); if (m_task) { m_task->abortLater(); m_task->deleteLater(); } m_task = new MediaDownloadTask; m_task->moveToThread(m_thread); connect(m_task, SIGNAL(requestReady(uint)), SLOT(requestReady(uint)), Qt::DirectConnection); connect(m_task, SIGNAL(dataRead(QByteArray,uint)), SLOT(incomingData(QByteArray,uint)), Qt::DirectConnection); connect(m_task, SIGNAL(finished()), SLOT(taskFinished()), Qt::DirectConnection); connect(m_task, SIGNAL(error(QString)), SLOT(taskError(QString)), Qt::DirectConnection); /* If size will reach the end of what we believe the file size to be, make it infinite instead, * to ease behavior with still active files */ if (position + size >= m_fileSize) size = 0; bool ok = m_task->metaObject()->invokeMethod(m_task, "start", Q_ARG(QUrl, m_url), Q_ARG(QList<QNetworkCookie>, m_cookies), Q_ARG(unsigned, position), Q_ARG(unsigned, size)); Q_ASSERT(ok); Q_UNUSED(ok); }
TwitterInterface::TwitterInterface (QObject *parent) : QObject (parent) { HttpClient_ = Core::Instance ().GetCoreProxy ()->GetNetworkAccessManager (); OAuthRequest_ = new KQOAuthRequest (this); OAuthManager_ = new KQOAuthManager (this); #ifdef WP_DEBUG OAuthRequest_->setEnableDebugOutput (true); #else OAuthRequest_->setEnableDebugOutput (false); #endif ConsumerKey_ = XmlSettingsManager::Instance ()->property ("consumer_key").toString (); ConsumerKeySecret_ = XmlSettingsManager::Instance ()-> property ("consumer_key_secret").toString (); connect (OAuthManager_, SIGNAL (requestReady (QByteArray)), this, SLOT (onRequestReady (QByteArray))); connect (OAuthManager_, SIGNAL (authorizedRequestDone ()), this, SLOT (onAuthorizedRequestDone ())); }
void Kaqtoos::setupConnections() { // OAUTH connect(oauthManager, SIGNAL(temporaryTokenReceived(QString,QString)), this, SLOT(onTemporaryTokenReceived(QString, QString))); connect(oauthManager, SIGNAL(authorizationReceived(QString,QString)), this, SLOT(onAuthorizationReceived(QString, QString))); connect(oauthManager, SIGNAL(accessTokenReceived(QString,QString)), this, SLOT(onAccessTokenReceived(QString,QString))); connect(oauthManager, SIGNAL(requestReady(QByteArray)), this, SLOT(onRequestReady(QByteArray))); // Network connect(&downloadManager, SIGNAL(getDownload(QBuffer *, const QString &)), this, SLOT(receiveBuffer(QBuffer *, const QString &))); // UI connect(connectAction, SIGNAL(triggered()), this, SLOT(getAccess())); connect(disconnectAction, SIGNAL(triggered()), this, SLOT(deleteUserOAuthConnection())); connect(exitAction, SIGNAL(triggered()), this, SLOT(close())); connect(aboutAction, SIGNAL(triggered()), this, SLOT(openAbout())); }
void FBRequestEnvelope::onRequestCallback(QByteArray resp) { disconnect(Facebook::instance()->getRequestManager(), SIGNAL(requestReady(QByteArray)), this, SLOT(onRequestCallback(QByteArray))); if(resp.isEmpty()) { //error need to tell the UI emit requestError(0x0); return; } response->parse(resp); if(response->getType() == FBApiResponseObjectFactory::Empty) { emit requestComplete(NULL); } else if(response->getResponse() != NULL) { if(param1 == NULL) { emit requestComplete(response->getResponse()); } else { emit requestComplete(param1, response->getResponse()); } } else { emit requestError(response->getMeta()); } }
void LoginManager::onAccessTokenReceived(QString token, QString tokenSecret) { //qDebug() << "Access token received: " << token << tokenSecret; _accessToken = token; _accessTokenSecret = tokenSecret; disconnect(_oauthManager, SIGNAL(requestReady(QByteArray)), this, SLOT(onAccessTokenRequestReady(QByteArray))); emit loginSuccess(); }
void LoginManager::upload(const QString &path, int nid, const QString &title, const QString &description, const QString& priv, const QString& license, const QString& tags) { //qDebug() << "file upload"; KQOAuthRequest *oauthRequest = new KQOAuthRequest(this); QUrl url("https://api.musescore.com/services/rest/score.json"); if (nid > 0) url = QUrl(QString("https://api.musescore.com/services/rest/score/%1/update.json").arg(nid)); oauthRequest->initRequest(KQOAuthRequest::AuthorizedRequest, url); oauthRequest->setConsumerKey(_consumerKey); oauthRequest->setConsumerSecretKey(_consumerSecret); oauthRequest->setToken(_accessToken); oauthRequest->setTokenSecret(_accessTokenSecret); oauthRequest->setContentType("multipart/form-data"); QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType); QHttpPart filePart; filePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/octet-stream")); filePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"score_data\"; filename=\"temp.mscz\"")); QFile *file = new QFile(path); file->open(QIODevice::ReadOnly); filePart.setBodyDevice(file); file->setParent(multiPart); // we cannot delete the file now, so delete it with the multiPart multiPart->append(filePart); QHttpPart titlePart; titlePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"title\"")); titlePart.setBody(title.toUtf8()); multiPart->append(titlePart); QHttpPart descriptionPart; descriptionPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"description\"")); descriptionPart.setBody(description.toUtf8()); multiPart->append(descriptionPart); QHttpPart privatePart; privatePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"private\"")); privatePart.setBody(priv.toUtf8()); multiPart->append(privatePart); QHttpPart licensePart; licensePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"license\"")); licensePart.setBody(license.toUtf8()); multiPart->append(licensePart); QHttpPart tagsPart; tagsPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"tags\"")); tagsPart.setBody(tags.toUtf8()); multiPart->append(tagsPart); connect(_oauthManager, SIGNAL(requestReady(QByteArray)), this, SLOT(onUploadRequestReady(QByteArray))); oauthRequest->setHttpMultiPart(multiPart); _oauthManager->executeRequest(oauthRequest); }
void VimeoAuth::onRequestReady(QByteArray response) { qDebug() << "Response from the service: " << response; switch(oauthManager->lastError()){ case KQOAuthManager::NoError: break; default: qDebug() << "There was an error"; break; } disconnect(oauthManager, SIGNAL(requestReady(QByteArray)), this, SLOT(onRequestReady(QByteArray))); }
void VimeoAuth::getAccess() { connect(oauthManager, SIGNAL(temporaryTokenReceived(QString,QString)), this, SLOT(onTemporaryTokenReceived(QString, QString))); connect(oauthManager, SIGNAL(authorizationReceived(QString,QString)), this, SLOT( onAuthorizationReceived(QString, QString))); connect(oauthManager, SIGNAL(accessTokenReceived(QString,QString)), this, SLOT(onAccessTokenReceived(QString, QString))); connect(oauthManager, SIGNAL(requestReady(QByteArray)), this, SLOT(onRequestReady(QByteArray))); oauthRequest->initRequest(KQOAuthRequest::TemporaryCredentials, QUrl("https://vimeo.com/oauth/request_token")); oauthRequest->setConsumerKey(CONSUMER_KEY); oauthRequest->setConsumerSecretKey(CONSUMER_SECRET); oauthManager->setHandleUserAuthorization(true); oauthManager->executeRequest(oauthRequest); }
void LoginManager::login(QString login, QString password) { if(login == "" || password == "") return; connect(_oauthManager, SIGNAL(requestReady(QByteArray)), this, SLOT(onAccessTokenRequestReady(QByteArray)), Qt::UniqueConnection); KQOAuthRequest_XAuth *oauthRequest = new KQOAuthRequest_XAuth(this); oauthRequest->initRequest(KQOAuthRequest::AccessToken, QUrl("https://api.musescore.com/oauth/access_token")); oauthRequest->setConsumerKey(_consumerKey); oauthRequest->setConsumerSecretKey(_consumerSecret); oauthRequest->setXAuthLogin(login, password); _oauthManager->executeRequest(oauthRequest); }
void MediaDownloadTask::metaDataReady() { int status = m_reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); if (m_reply->error() != QNetworkReply::NoError || status < 200 || status > 299) { if (m_reply->error() != QNetworkReply::NoError) emit error(m_reply->errorString()); else emit error(Qt::escape(m_reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString())); disconnect(m_reply, 0, this, 0); m_reply->deleteLater(); m_reply = 0; return; } unsigned size = m_reply->header(QNetworkRequest::ContentLengthHeader).toUInt(); if (size) emit requestReady(m_writePos + size); }
void LoginManager::onUploadRequestReady(QByteArray ba) { disconnect(_oauthManager, SIGNAL(requestReady(QByteArray)), this, SLOT(onUploadRequestReady(QByteArray))); //qDebug() << "onUploadRequestReady" << ba; if (_oauthManager->lastError() == KQOAuthManager::NoError) { QJsonDocument jsonResponse = QJsonDocument::fromJson(ba); QJsonObject score = jsonResponse.object(); if (score.value("permalink") != QJsonValue::Undefined) { emit uploadSuccess(score.value("permalink").toString()); } else { emit uploadError(tr("An error occurred during the file transfer. Please try again")); } } else { emit uploadError(tr("Cannot upload: %1").arg(_oauthManager->lastError())); } }
/* test function to get a profile */ void Oauth::testCall(QString test) { oauthRequest->initRequest(KQOAuthRequest::AuthorizedRequest, QUrl("http://api.tumblr.com/v2/user/info")); //oauthRequest->initRequest(KQOAuthRequest::AuthorizedRequest, QUrl("http://api.tumblr.com/v2/blog/niwakame.tumblr.com/post")); oauthRequest->setConsumerKey(m_sets->getConsumerKey()); oauthRequest->setConsumerSecretKey(m_sets->getConsumerSecret()); oauthRequest->setToken(m_sets->getAccessToken()); oauthRequest->setTokenSecret(m_sets->getAccessTokenSecret()); //oauthRequest->setHttpMethod(KQOAuthRequest::POST); /*KQOAuthParameters params; params.insert("type", "text"); params.insert("body", "This is a testpost from Meemblr. Fear us :>"); oauthRequest->setAdditionalParameters(params);*/ connect(oauthManager, SIGNAL(requestReady(QByteArray)), this, SLOT(onApiResponse(QByteArray))); oauthManager->executeRequest(oauthRequest); }
void LoginManager::getScore(int nid) { //qDebug() << "getScore"; if (_accessToken.isEmpty() || _accessTokenSecret.isEmpty()) { emit getScoreError("getScore - No token"); return; } KQOAuthRequest * oauthRequest = new KQOAuthRequest(); oauthRequest->initRequest(KQOAuthRequest::AuthorizedRequest, QUrl(QString("https://api.musescore.com/services/rest/score/%1.json").arg(nid))); oauthRequest->setHttpMethod(KQOAuthRequest::GET); oauthRequest->setConsumerKey(_consumerKey); oauthRequest->setConsumerSecretKey(_consumerSecret); oauthRequest->setToken(_accessToken); oauthRequest->setTokenSecret(_accessTokenSecret); connect(_oauthManager, SIGNAL(requestReady(QByteArray)), this, SLOT(onGetScoreRequestReady(QByteArray))); _oauthManager->executeRequest(oauthRequest); }
//--------------------------------------------------------- // onGetMediaUrlReply //--------------------------------------------------------- void LoginManager::onGetMediaUrlReply(QNetworkReply* reply, int code, const QJsonObject& response) { if (code == HTTP_OK) { QJsonValue urlValue = response.value("url"); if (urlValue.isString()) { _mediaUrl = urlValue.toString(); QString mp3Path = QDir::tempPath() + QString("/temp_%1.mp3").arg(qrand() % 100000); _mp3File = new QFile(mp3Path); Score* score = mscore->currentScore()->masterScore(); int br = preferences.getInt(PREF_EXPORT_MP3_BITRATE); preferences.setPreference(PREF_EXPORT_MP3_BITRATE, 128); if (mscore->saveMp3(score, mp3Path)) { // no else, error handling is done in saveMp3 _uploadTryCount = 0; uploadMedia(); } preferences.setPreference(PREF_EXPORT_MP3_BITRATE, br); } } else // TODO: handle request error properly qWarning("%s", getErrorString(reply, response).toUtf8().constData()); #if 0 disconnect(_oauthManager, SIGNAL(requestReady(QByteArray)), this, SLOT(onGetMediaUrlRequestReady(QByteArray))); QJsonDocument jsonResponse = QJsonDocument::fromJson(ba); QJsonObject response = jsonResponse.object(); QJsonValue urlValue = response.value("url"); if (urlValue.isString()) { _mediaUrl = response.value("url").toString(); QString mp3Path = QDir::tempPath() + QString("/temp_%1.mp3").arg(qrand() % 100000); _mp3File = new QFile(mp3Path); Score* score = mscore->currentScore()->masterScore(); int br = preferences.getInt(PREF_EXPORT_MP3_BITRATE); preferences.setPreference(PREF_EXPORT_MP3_BITRATE, 128); if (mscore->saveMp3(score, mp3Path)) { // no else, error handling is done in saveMp3 _uploadTryCount = 0; uploadMedia(); } preferences.setPreference(PREF_EXPORT_MP3_BITRATE, br); } #endif }
void LoginManager::onGetUserRequestReady(QByteArray ba) { //qDebug() << "onGetUserRequestReady" << ba; disconnect(_oauthManager, SIGNAL(requestReady(QByteArray)), this, SLOT(onGetUserRequestReady(QByteArray))); if (_oauthManager->lastError() == KQOAuthManager::NoError) { QJsonDocument jsonResponse = QJsonDocument::fromJson(ba); QJsonObject user = jsonResponse.object(); if (user.value("name") != QJsonValue::Undefined) { _userName = user.value("name").toString(); _uid = user.value("id").toString().toInt(); emit getUserSuccess(); } else { emit getUserError(tr("Error while getting user info. Please try again")); } } else if (_oauthManager->lastError() != KQOAuthManager::NetworkError) { emit getUserError(tr("Error while getting user info: %1").arg(_oauthManager->lastError())); } }
void LoginManager::onGetScoreRequestReady(QByteArray ba) { //qDebug() << "onGetScoreRequestReady" << ba; //qDebug() << _oauthManager->lastError(); disconnect(_oauthManager, SIGNAL(requestReady(QByteArray)), this, SLOT(onGetScoreRequestReady(QByteArray))); if (_oauthManager->lastError() == KQOAuthManager::NoError) { QJsonDocument jsonResponse = QJsonDocument::fromJson(ba); QJsonObject score = jsonResponse.object(); if (score.value("user") != QJsonValue::Undefined) { QJsonObject user = score.value("user").toObject(); QString title = score.value("title").toString(); QString description = score.value("description").toString(); QString sharing = score.value("sharing").toString(); QString license = score.value("license").toString(); QString tags = score.value("tags").toString(); QString url = score.value("custom_url").toString(); if (user.value("uid") != QJsonValue::Undefined) { int uid = user.value("uid").toString().toInt(); if (uid == _uid) emit getScoreSuccess(title, description, (sharing == "private"), license, tags, url); else emit getScoreError(""); } else { emit getScoreError(""); } } else { emit getScoreError(""); } } else { emit getScoreError(""); } }
void FBRequestEnvelope::makeRequest() { connect(Facebook::instance()->getRequestManager(), SIGNAL(requestReady(QByteArray)), this, SLOT(onRequestCallback(QByteArray))); request->setEnableDebugOutput(true); Facebook::instance()->getRequestManager()->executeRequest(request); }
OAuthDialog::OAuthDialog(Context *context, OAuthSite site) : context(context), site(site) { setAttribute(Qt::WA_DeleteOnClose); setWindowTitle(tr("OAuth")); // check if SSL is available - if not - message and end if (!QSslSocket::supportsSsl()) { QString text = QString(tr("SSL Security Libraries required for 'Authorise' are missing in this installation.")); QMessageBox sslMissing(QMessageBox::Critical, tr("Authorization Error"), text); sslMissing.exec(); noSSLlib = true; return; } // SSL is available - so authorisation can take place noSSLlib = false; layout = new QVBoxLayout(); layout->setSpacing(0); layout->setContentsMargins(2,0,2,2); setLayout(layout); #if QT_VERSION < 0x050000 || !defined(Q_OS_MAC) view = new QWebView(); #else view = new QWebEngineView(); #endif view->setContentsMargins(0,0,0,0); view->page()->view()->setContentsMargins(0,0,0,0); view->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); view->setAcceptDrops(false); layout->addWidget(view); QString urlstr = ""; if (site == STRAVA) { urlstr = QString("https://www.strava.com/oauth/authorize?"); urlstr.append("client_id=").append(GC_STRAVA_CLIENT_ID).append("&"); urlstr.append("scope=view_private,write&"); urlstr.append("redirect_uri=http://www.goldencheetah.org/&"); urlstr.append("response_type=code&"); urlstr.append("approval_prompt=force"); } else if (site == DROPBOX) { urlstr = QString("https://www.dropbox.com/1/oauth2/authorize?"); #ifdef GC_DROPBOX_CLIENT_ID urlstr.append("client_id=").append(GC_DROPBOX_CLIENT_ID).append("&"); #endif urlstr.append("redirect_uri=https://goldencheetah.github.io/blank.html&"); urlstr.append("response_type=code&"); urlstr.append("force_reapprove=true"); } else if (site == TWITTER) { #ifdef GC_HAVE_KQOAUTH oauthRequest = new KQOAuthRequest; oauthManager = new KQOAuthManager(this); connect(oauthManager, SIGNAL(temporaryTokenReceived(QString,QString)), this, SLOT(onTemporaryTokenReceived(QString, QString))); connect(oauthManager, SIGNAL(authorizationReceived(QString,QString)), this, SLOT( onAuthorizationReceived(QString, QString))); connect(oauthManager, SIGNAL(accessTokenReceived(QString,QString)), this, SLOT(onAccessTokenReceived(QString,QString))); connect(oauthManager, SIGNAL(requestReady(QByteArray)), this, SLOT(onRequestReady(QByteArray))); connect(oauthManager, SIGNAL(authorizationPageRequested(QUrl)), this, SLOT(onAuthorizationPageRequested(QUrl))); oauthRequest->initRequest(KQOAuthRequest::TemporaryCredentials, QUrl("https://api.twitter.com/oauth/request_token")); oauthRequest->setConsumerKey(GC_TWITTER_CONSUMER_KEY); oauthRequest->setConsumerSecretKey(GC_TWITTER_CONSUMER_SECRET); oauthManager->setHandleUserAuthorization(true); oauthManager->setHandleAuthorizationPageOpening(false); oauthManager->executeRequest(oauthRequest); #endif } else if (site == CYCLING_ANALYTICS) { urlstr = QString("https://www.cyclinganalytics.com/api/auth?"); urlstr.append("client_id=").append(GC_CYCLINGANALYTICS_CLIENT_ID).append("&"); urlstr.append("scope=modify_rides&"); urlstr.append("redirect_uri=http://www.goldencheetah.org/&"); urlstr.append("response_type=code&"); urlstr.append("approval_prompt=force"); } else if (site == GOOGLE_CALENDAR) { // OAUTH 2.0 - Google flow for installed applications urlstr = QString("https://accounts.google.com/o/oauth2/auth?"); urlstr.append("scope=https://www.googleapis.com/auth/calendar&"); urlstr.append("redirect_uri=urn:ietf:wg:oauth:2.0:oob&"); urlstr.append("response_type=code&"); urlstr.append("client_id=").append(GC_GOOGLE_CALENDAR_CLIENT_ID); } // different process to get the token for STRAVA, CYCLINGANALYTICS vs. TWITTER if (site == DROPBOX || site == STRAVA || site == CYCLING_ANALYTICS || site == GOOGLE_CALENDAR ) { url = QUrl(urlstr); view->setUrl(url); // connects connect(view, SIGNAL(urlChanged(const QUrl&)), this, SLOT(urlChanged(const QUrl&))); connect(view, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished(bool))); }