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