From 1b74bdb03aacc6274ad51b27f4f8953edf481e06 Mon Sep 17 00:00:00 2001 From: Jesus Fernandez Date: Thu, 14 Jul 2016 19:03:51 +0200 Subject: [PATCH] QNetworkAccessManager changed to optional --- QtOAuth/private/qabstractoauth_p.h | 5 ++-- QtOAuth/qabstractoauth.cpp | 29 +++++++++++++++++++++--- QtOAuth/qabstractoauth.h | 3 +++ QtOAuth/qabstractoauth2.cpp | 4 ++-- QtOAuth/qoauth1.cpp | 22 +++++++++--------- QtOAuth/qoauth2authorizationcodeflow.cpp | 11 ++++----- QtOAuth/qoauth2implicitgrantflow.cpp | 3 --- 7 files changed, 49 insertions(+), 28 deletions(-) diff --git a/QtOAuth/private/qabstractoauth_p.h b/QtOAuth/private/qabstractoauth_p.h index b3ce8cd..233f388 100644 --- a/QtOAuth/private/qabstractoauth_p.h +++ b/QtOAuth/private/qabstractoauth_p.h @@ -77,15 +77,16 @@ public: QAbstractOAuthPrivate(QNetworkAccessManager *manager); ~QAbstractOAuthPrivate(); + QNetworkAccessManager *networkAccessManager(); void setStatus(QAbstractOAuth::Status status); QUrl authorizationUrl; QVariantMap extraTokens; - QAbstractOAuth::Status status; + QAbstractOAuth::Status status = QAbstractOAuth::Status::NotAuthenticated; QNetworkAccessManager::Operation operation; QScopedPointer replyHandler; QScopedPointer defaultReplyHandler; - QNetworkAccessManager *networkAccessManager; + QPointer networkAccessManagerPointer; QAbstractOAuth::ModifyParametersFunction modifyParametersFunction; static QUrlQuery createQuery(const QVariantMap ¶meters); diff --git a/QtOAuth/qabstractoauth.cpp b/QtOAuth/qabstractoauth.cpp index 6701bd6..4b0226d 100644 --- a/QtOAuth/qabstractoauth.cpp +++ b/QtOAuth/qabstractoauth.cpp @@ -58,10 +58,9 @@ QT_BEGIN_NAMESPACE Q_DECLARE_METATYPE(QAbstractOAuth::Error) QAbstractOAuthPrivate::QAbstractOAuthPrivate(QNetworkAccessManager *manager) - : status(QAbstractOAuth::Status::NotAuthenticated), - replyHandler(nullptr), + : replyHandler(nullptr), defaultReplyHandler(new QOAuthOobReplyHandler), - networkAccessManager(manager) + networkAccessManagerPointer(manager) { Q_ASSERT(manager); } @@ -69,6 +68,14 @@ QAbstractOAuthPrivate::QAbstractOAuthPrivate(QNetworkAccessManager *manager) QAbstractOAuthPrivate::~QAbstractOAuthPrivate() {} +QNetworkAccessManager *QAbstractOAuthPrivate::networkAccessManager() +{ + Q_Q(QAbstractOAuth); + if (!networkAccessManagerPointer) + networkAccessManagerPointer = new QNetworkAccessManager(q); + return networkAccessManagerPointer.data(); +} + void QAbstractOAuthPrivate::setStatus(QAbstractOAuth::Status newStatus) { Q_Q(QAbstractOAuth); @@ -104,6 +111,22 @@ QAbstractOAuth::QAbstractOAuth(QAbstractOAuthPrivate &dd, QObject *parent) QAbstractOAuth::~QAbstractOAuth() {} +QNetworkAccessManager *QAbstractOAuth::networkAccessManager() const +{ + Q_D(const QAbstractOAuth); + return d->networkAccessManagerPointer.data(); +} + +void QAbstractOAuth::setNetworkAccessManager(QNetworkAccessManager *networkAccessManager) +{ + Q_D(QAbstractOAuth); + if (networkAccessManager != d->networkAccessManagerPointer) { + if (d->networkAccessManagerPointer && d->networkAccessManagerPointer->parent() == this) + delete d->networkAccessManagerPointer.data(); + d->networkAccessManagerPointer = networkAccessManager; + } +} + QAbstractOAuth::Status QAbstractOAuth::status() const { Q_D(const QAbstractOAuth); diff --git a/QtOAuth/qabstractoauth.h b/QtOAuth/qabstractoauth.h index 82f69c6..0a3e829 100644 --- a/QtOAuth/qabstractoauth.h +++ b/QtOAuth/qabstractoauth.h @@ -106,6 +106,9 @@ public: virtual ~QAbstractOAuth(); + QNetworkAccessManager *networkAccessManager() const; + void setNetworkAccessManager(QNetworkAccessManager *networkAccessManager); + Status status() const; // Resource Owner Authorization: https://tools.ietf.org/html/rfc5849#section-2.2 diff --git a/QtOAuth/qabstractoauth2.cpp b/QtOAuth/qabstractoauth2.cpp index b5ec14c..bf0a132 100644 --- a/QtOAuth/qabstractoauth2.cpp +++ b/QtOAuth/qabstractoauth2.cpp @@ -125,7 +125,7 @@ QNetworkReply *QAbstractOAuth2::get(const QNetworkRequest &req, const QVariantMa const QString bearer = d->bearerFormat.arg(d->token.key); request.setRawHeader("Authorization", bearer.toUtf8()); - return d->networkAccessManager->get(request); + return d->networkAccessManager()->get(request); } QNetworkReply *QAbstractOAuth2::post(const QNetworkRequest &req, const QVariantMap ¶meters) @@ -146,7 +146,7 @@ QNetworkReply *QAbstractOAuth2::post(const QNetworkRequest &req, const QVariantM const QString bearer = d->bearerFormat.arg(d->token.key); request.setRawHeader("Authorization", bearer.toUtf8()); - return d->networkAccessManager->post(request, QByteArray()); + return d->networkAccessManager()->post(request, QByteArray()); } QString QAbstractOAuth2::scope() const diff --git a/QtOAuth/qoauth1.cpp b/QtOAuth/qoauth1.cpp index 5a33805..cfec0d7 100644 --- a/QtOAuth/qoauth1.cpp +++ b/QtOAuth/qoauth1.cpp @@ -74,10 +74,10 @@ const QString String::oauthVersion = QStringLiteral("oauth_version"); static auto networkReplyErrorFunctionPointer = static_cast(&QNetworkReply::error); -QOAuth1Private::QOAuth1Private(QNetworkAccessManager *manager) - : QAbstractOAuthPrivate(manager) +QOAuth1Private::QOAuth1Private(QNetworkAccessManager *networkAccessManager) + : QAbstractOAuthPrivate(networkAccessManager) { - Q_ASSERT(manager); + Q_ASSERT(networkAccessManager); qRegisterMetaType("QOAuth1::Credential"); qRegisterMetaType("QNetworkReply::NetworkError"); } @@ -196,7 +196,7 @@ QNetworkReply *QOAuth1Private::requestToken(QNetworkAccessManager::Operation ope Q_Q(QOAuth1); typedef OAuth1KeyString Key; - Q_ASSERT(networkAccessManager); + Q_ASSERT(networkAccessManager()); Q_ASSERT(operation == QNetworkAccessManager::GetOperation || operation == QNetworkAccessManager::PostOperation); @@ -222,14 +222,14 @@ QNetworkReply *QOAuth1Private::requestToken(QNetworkAccessManager::Operation ope url.setQuery(QOAuth1Private::createQuery(parameters)); request.setUrl(url); } - reply = networkAccessManager->get(request); + reply = networkAccessManager()->get(request); } else if (operation == QNetworkAccessManager::PostOperation) { QUrlQuery query = QOAuth1Private::createQuery(parameters); const QByteArray data = query.toString(QUrl::PrettyDecoded).toUtf8(); request.setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("application/x-www-form-urlencoded")); - reply = networkAccessManager->post(request, data); + reply = networkAccessManager()->post(request, data); } connect(reply, networkReplyErrorFunctionPointer, this, &QOAuth1Private::_q_onTokenRequestError); @@ -390,13 +390,13 @@ QNetworkReply *QOAuth1::get(const QNetworkRequest &req, const QVariantMap ¶m allParameters.unite(parameters); setup(&request, parameters, QNetworkAccessManager::GetOperation); - return d->networkAccessManager->get(request); + return d->networkAccessManager()->get(request); } QNetworkReply *QOAuth1::post(const QNetworkRequest &req, const QVariantMap ¶meters) { Q_D(QOAuth1); - if (!d->networkAccessManager) { + if (!d->networkAccessManager()) { qCritical("QNetworkAccessManager not available"); return nullptr; } @@ -410,7 +410,7 @@ QNetworkReply *QOAuth1::post(const QNetworkRequest &req, const QVariantMap ¶ for (auto it = parameters.begin(), end = parameters.end(); it != end; ++it) query.addQueryItem(it.key(), it.value().toString()); QString data = query.toString(QUrl::FullyEncoded); - return d->networkAccessManager->post(request, data.toUtf8()); + return d->networkAccessManager()->post(request, data.toUtf8()); } QNetworkReply *QOAuth1::requestTemporaryCredentials(QNetworkAccessManager::Operation operation, @@ -418,7 +418,7 @@ QNetworkReply *QOAuth1::requestTemporaryCredentials(QNetworkAccessManager::Opera const QVariantMap ¶meters) { Q_D(QOAuth1); - if (Q_UNLIKELY(!d->networkAccessManager)) { + if (Q_UNLIKELY(!d->networkAccessManager())) { qCritical("QNetworkAccessManager not available"); return nullptr; } @@ -441,7 +441,7 @@ QNetworkReply *QOAuth1::requestTokenCredentials(QNetworkAccessManager::Operation const QVariantMap ¶meters) { Q_D(QOAuth1); - if (!d->networkAccessManager) { + if (!d->networkAccessManager()) { qCritical("QNetworkAccessManager not available"); return nullptr; } diff --git a/QtOAuth/qoauth2authorizationcodeflow.cpp b/QtOAuth/qoauth2authorizationcodeflow.cpp index 6699dd9..33e9eca 100644 --- a/QtOAuth/qoauth2authorizationcodeflow.cpp +++ b/QtOAuth/qoauth2authorizationcodeflow.cpp @@ -160,8 +160,6 @@ QOAuth2AuthorizationCodeFlow::QOAuth2AuthorizationCodeFlow(QNetworkAccessManager QObject *parent) : QAbstractOAuth2(*new QOAuth2AuthorizationCodeFlowPrivate(manager, port), parent) { - Q_D(QOAuth2AuthorizationCodeFlow); - d->networkAccessManager = manager; } QOAuth2AuthorizationCodeFlow::QOAuth2AuthorizationCodeFlow(const QString &consumerKey, @@ -171,7 +169,6 @@ QOAuth2AuthorizationCodeFlow::QOAuth2AuthorizationCodeFlow(const QString &consum : QAbstractOAuth2(*new QOAuth2AuthorizationCodeFlowPrivate(manager, port), parent) { Q_D(QOAuth2AuthorizationCodeFlow); - d->networkAccessManager = manager; d->consumer = consumerKey; } @@ -196,7 +193,6 @@ QOAuth2AuthorizationCodeFlow::QOAuth2AuthorizationCodeFlow(const QString &consum : QAbstractOAuth2(*new QOAuth2AuthorizationCodeFlowPrivate(manager, port), parent) { Q_D(QOAuth2AuthorizationCodeFlow); - d->networkAccessManager = manager; d->authorizationUrl = authenticateUrl; d->accessTokenUrl = accessTokenUrl; d->consumer = consumerKey; @@ -289,10 +285,11 @@ void QOAuth2AuthorizationCodeFlow::requestAccessToken(const QString &code) QStringLiteral("application/x-www-form-urlencoded")); const auto data = query.toString(QUrl::FullyEncoded); - d->accessTokenReply = d->networkAccessManager->post(request, data.toUtf8()); - QObjectPrivate::connect(d->networkAccessManager, &QNetworkAccessManager::finished, + d->accessTokenReply = d->networkAccessManager()->post(request, data.toUtf8()); + QObjectPrivate::connect(d->networkAccessManager(), &QNetworkAccessManager::finished, d, &QOAuth2AuthorizationCodeFlowPrivate::accessTokenRequestFinished); - QObjectPrivate::connect(d->networkAccessManager, &QNetworkAccessManager::authenticationRequired, + QObjectPrivate::connect(d->networkAccessManager(), + &QNetworkAccessManager::authenticationRequired, d, &QOAuth2AuthorizationCodeFlowPrivate::authenticate, Qt::UniqueConnection); } diff --git a/QtOAuth/qoauth2implicitgrantflow.cpp b/QtOAuth/qoauth2implicitgrantflow.cpp index c91eafb..3f607b4 100644 --- a/QtOAuth/qoauth2implicitgrantflow.cpp +++ b/QtOAuth/qoauth2implicitgrantflow.cpp @@ -63,8 +63,6 @@ QOAuth2ImplicitGrantFlow::QOAuth2ImplicitGrantFlow(QNetworkAccessManager *manage QObject *parent) : QAbstractOAuth2(*new QOAuth2ImplicitGrantFlowPrivate(manager), parent) { - Q_D(QOAuth2ImplicitGrantFlow); - d->networkAccessManager = manager; } QOAuth2ImplicitGrantFlow::QOAuth2ImplicitGrantFlow(const QString &consumerToken, @@ -73,7 +71,6 @@ QOAuth2ImplicitGrantFlow::QOAuth2ImplicitGrantFlow(const QString &consumerToken, : QAbstractOAuth2(*new QOAuth2ImplicitGrantFlowPrivate(manager), parent) { Q_D(QOAuth2ImplicitGrantFlow); - d->networkAccessManager = manager; d->consumer = consumerToken; } -- GitLab