From 902963fa100e420232ac28dd1465e7b6eb0a144c Mon Sep 17 00:00:00 2001 From: Michael Schuster Date: Thu, 18 Jun 2020 21:48:08 +0200 Subject: [PATCH] Fix issue #2108: Default system proxy not working with Account Wizard Discovered on Windows in conjunction with PAC scripts: - Already configured accounts worked - Fresh client account setup did not work Reason: - Proxy was reset over and over again in Account::setCredentials Signed-off-by: Michael Schuster --- src/libsync/account.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/libsync/account.cpp b/src/libsync/account.cpp index 692b86a7a..5477edcd9 100644 --- a/src/libsync/account.cpp +++ b/src/libsync/account.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -161,10 +162,15 @@ void Account::setCredentials(AbstractCredentials *cred) { // set active credential manager QNetworkCookieJar *jar = nullptr; + QNetworkProxy proxy; + if (_am) { jar = _am->cookieJar(); jar->setParent(nullptr); + // Remember proxy (issue #2108) + proxy = _am->proxy(); + _am = QSharedPointer(); } @@ -181,6 +187,9 @@ void Account::setCredentials(AbstractCredentials *cred) if (jar) { _am->setCookieJar(jar); } + if (proxy.type() != QNetworkProxy::DefaultProxy) { + _am->setProxy(proxy); + } connect(_am.data(), SIGNAL(sslErrors(QNetworkReply *, QList)), SLOT(slotHandleSslErrors(QNetworkReply *, QList))); connect(_am.data(), &QNetworkAccessManager::proxyAuthenticationRequired, @@ -237,12 +246,15 @@ void Account::resetNetworkAccessManager() qCDebug(lcAccount) << "Resetting QNAM"; QNetworkCookieJar *jar = _am->cookieJar(); + QNetworkProxy proxy = _am->proxy(); // Use a QSharedPointer to allow locking the life of the QNAM on the stack. // Make it call deleteLater to make sure that we can return to any QNAM stack frames safely. _am = QSharedPointer(_credentials->createQNAM(), &QObject::deleteLater); _am->setCookieJar(jar); // takes ownership of the old cookie jar + _am->setProxy(proxy); // Remember proxy (issue #2108) + connect(_am.data(), SIGNAL(sslErrors(QNetworkReply *, QList)), SLOT(slotHandleSslErrors(QNetworkReply *, QList))); connect(_am.data(), &QNetworkAccessManager::proxyAuthenticationRequired, -- 2.30.2