1 #include <QDebug>
2 #include <QDateTime>
3 #include <QNetworkReply>
4 #include <QNetworkAccessManager>
5
6 #include "o1requestor.h"
7 #include "o1timedreply.h"
8 #include "o0globals.h"
9
O1Requestor(QNetworkAccessManager * manager,O1 * authenticator,QObject * parent)10 O1Requestor::O1Requestor(QNetworkAccessManager *manager, O1 *authenticator, QObject *parent): QObject(parent) {
11 manager_ = manager;
12 authenticator_ = authenticator;
13 }
14
get(const QNetworkRequest & req,const QList<O0RequestParameter> & signingParameters)15 QNetworkReply *O1Requestor::get(const QNetworkRequest &req, const QList<O0RequestParameter> &signingParameters) {
16 QNetworkRequest request = setup(req, signingParameters, QNetworkAccessManager::GetOperation);
17 return addTimer(manager_->get(request));
18 }
19
post(const QNetworkRequest & req,const QList<O0RequestParameter> & signingParameters,const QByteArray & data)20 QNetworkReply *O1Requestor::post(const QNetworkRequest &req, const QList<O0RequestParameter> &signingParameters, const QByteArray &data) {
21 QNetworkRequest request = setup(req, signingParameters, QNetworkAccessManager::PostOperation);
22 return addTimer(manager_->post(request, data));
23 }
24
post(const QNetworkRequest & req,const QList<O0RequestParameter> & signingParameters,QHttpMultiPart * multiPart)25 QNetworkReply *O1Requestor::post(const QNetworkRequest &req, const QList<O0RequestParameter> &signingParameters, QHttpMultiPart * multiPart) {
26 QNetworkRequest request = setup(req, signingParameters, QNetworkAccessManager::PostOperation);
27 return addTimer(manager_->post(request, multiPart));
28 }
29
put(const QNetworkRequest & req,const QList<O0RequestParameter> & signingParameters,const QByteArray & data)30 QNetworkReply *O1Requestor::put(const QNetworkRequest &req, const QList<O0RequestParameter> &signingParameters, const QByteArray &data) {
31 QNetworkRequest request = setup(req, signingParameters, QNetworkAccessManager::PutOperation);
32 return addTimer(manager_->put(request, data));
33 }
34
addTimer(QNetworkReply * reply)35 QNetworkReply *O1Requestor::addTimer(QNetworkReply *reply) {
36 (void)new O1TimedReply(reply);
37 return reply;
38 }
39
setup(const QNetworkRequest & req,const QList<O0RequestParameter> & signingParameters,QNetworkAccessManager::Operation operation)40 QNetworkRequest O1Requestor::setup(const QNetworkRequest &req, const QList<O0RequestParameter> &signingParameters, QNetworkAccessManager::Operation operation) {
41 // Collect OAuth parameters
42 QList<O0RequestParameter> oauthParams;
43 oauthParams.append(O0RequestParameter(O2_OAUTH_CONSUMER_KEY, authenticator_->clientId().toLatin1()));
44 oauthParams.append(O0RequestParameter(O2_OAUTH_VERSION, "1.0"));
45 oauthParams.append(O0RequestParameter(O2_OAUTH_TOKEN, authenticator_->token().toLatin1()));
46 oauthParams.append(O0RequestParameter(O2_OAUTH_SIGNATURE_METHOD, authenticator_->signatureMethod().toLatin1()));
47 oauthParams.append(O0RequestParameter(O2_OAUTH_NONCE, O1::nonce()));
48 oauthParams.append(O0RequestParameter(O2_OAUTH_TIMESTAMP, QString::number(QDateTime::currentDateTimeUtc().toTime_t()).toLatin1()));
49
50 // Add signature parameter
51 oauthParams.append(O0RequestParameter(O2_OAUTH_SIGNATURE, authenticator_->generateSignature(oauthParams, req, signingParameters, operation)));
52
53 // Return a copy of the original request with authorization header set
54 QNetworkRequest request(req);
55 request.setRawHeader(O2_HTTP_AUTHORIZATION_HEADER, O1::buildAuthorizationHeader(oauthParams));
56 return request;
57 }
58