From a6f3206081a571b4c836a9717976acf85f9ff28b Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Wed, 31 Mar 2021 20:40:25 +0200 Subject: [PATCH] properly accept redirections with new API. --- resources/scripts/7za | 2 +- .../network-web/basenetworkaccessmanager.cpp | 28 +++++++++++-------- .../network-web/basenetworkaccessmanager.h | 10 ++----- src/librssguard/network-web/downloader.cpp | 5 ---- 4 files changed, 20 insertions(+), 25 deletions(-) diff --git a/resources/scripts/7za b/resources/scripts/7za index 47f412575..9c10723bf 160000 --- a/resources/scripts/7za +++ b/resources/scripts/7za @@ -1 +1 @@ -Subproject commit 47f4125753452eff8800dbd6600c5a05540b15d9 +Subproject commit 9c10723bfbaf6cb85107d6ee16e0324e9e487749 diff --git a/src/librssguard/network-web/basenetworkaccessmanager.cpp b/src/librssguard/network-web/basenetworkaccessmanager.cpp index 345d9c7ad..3df1cba42 100644 --- a/src/librssguard/network-web/basenetworkaccessmanager.cpp +++ b/src/librssguard/network-web/basenetworkaccessmanager.cpp @@ -32,15 +32,21 @@ void BaseNetworkAccessManager::loadSettings() { qDebugNN << LOGSEC_NETWORK << "Settings of BaseNetworkAccessManager loaded."; } +void BaseNetworkAccessManager::acceptRedirection(const QUrl& url) { + auto* reply = qobject_cast(sender()); + emit reply->redirectAllowed(); + + qDebugNN << LOGSEC_NETWORK << "Accepting redirect to" << QUOTE_W_SPACE_DOT(url.toString()); +} + void BaseNetworkAccessManager::onSslErrors(QNetworkReply* reply, const QList& error) { qWarningNN << LOGSEC_NETWORK - << "Ignoring SSL errors for '" - << reply->url().toString() - << "':" + << "Ignoring SSL errors for" + << QUOTE_W_SPACE(reply->url().toString()) + << ":" << QUOTE_W_SPACE(reply->errorString()) - << "(code " - << reply->error() - << ")."; + << "- code" + << QUOTE_W_SPACE_DOT(reply->error()); reply->ignoreSslErrors(error); } @@ -50,19 +56,19 @@ QNetworkReply* BaseNetworkAccessManager::createRequest(QNetworkAccessManager::Op QNetworkRequest new_request = request; new_request.setAttribute(QNetworkRequest::Attribute::HttpPipeliningAllowedAttribute, true); + new_request.setAttribute(QNetworkRequest::Attribute::Http2AllowedAttribute, true); #if QT_VERSION >= 0x050900 new_request.setAttribute(QNetworkRequest::Attribute::RedirectPolicyAttribute, - QNetworkRequest::RedirectPolicy::NoLessSafeRedirectPolicy); + QNetworkRequest::RedirectPolicy::UserVerifiedRedirectPolicy); #elif QT_VERSION >= 0x050600 new_request.setAttribute(QNetworkRequest::Attribute::FollowRedirectsAttribute, true); #endif - new_request.setRawHeader(QSL("Cookie").toLocal8Bit(), QSL("JSESSIONID= ").toLocal8Bit()); - - // Setup custom user-agent. - new_request.setRawHeader(HTTP_HEADERS_USER_AGENT, QString(APP_USERAGENT).toLocal8Bit()); + new_request.setHeader(QNetworkRequest::KnownHeaders::CookieHeader, QSL("JSESSIONID= ").toLocal8Bit()); + new_request.setHeader(QNetworkRequest::KnownHeaders::UserAgentHeader, QString(APP_USERAGENT).toLocal8Bit()); auto reply = QNetworkAccessManager::createRequest(op, new_request, outgoingData); + connect(reply, &QNetworkReply::redirected, this, &BaseNetworkAccessManager::acceptRedirection); return reply; } diff --git a/src/librssguard/network-web/basenetworkaccessmanager.h b/src/librssguard/network-web/basenetworkaccessmanager.h index ae550e49a..45418a585 100644 --- a/src/librssguard/network-web/basenetworkaccessmanager.h +++ b/src/librssguard/network-web/basenetworkaccessmanager.h @@ -13,19 +13,13 @@ class BaseNetworkAccessManager : public QNetworkAccessManager { explicit BaseNetworkAccessManager(QObject* parent = nullptr); public slots: - - // Loads network settings for this instance. - // NOTE: This sets up proxy settings. - virtual void loadSettings(); + void loadSettings(); protected slots: - - // Called when some SSL-related errors are detected. + void acceptRedirection(const QUrl& url); void onSslErrors(QNetworkReply* reply, const QList& error); protected: - - // Creates custom request. QNetworkReply* createRequest(Operation op, const QNetworkRequest& request, QIODevice* outgoingData); }; diff --git a/src/librssguard/network-web/downloader.cpp b/src/librssguard/network-web/downloader.cpp index 6befbf1a4..ea62d18df 100644 --- a/src/librssguard/network-web/downloader.cpp +++ b/src/librssguard/network-web/downloader.cpp @@ -106,11 +106,6 @@ void Downloader::finished() { m_timer->stop(); - // In this phase, some part of downloading process is completed. - const QUrl redirection_url = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl(); - - // No redirection is indicated. Final file is obtained in our "reply" object. - // Read the data into output buffer. if (m_inputMultipartData == nullptr) { m_lastOutputData = reply->readAll(); }