Fix issue #2108: Default system proxy not working with Account Wizard
authorMichael Schuster <michael@schuster.ms>
Thu, 18 Jun 2020 19:48:08 +0000 (21:48 +0200)
committerKevin Ottens <ervin@ipsquad.net>
Mon, 22 Jun 2020 09:59:13 +0000 (11:59 +0200)
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 <michael@schuster.ms>
src/libsync/account.cpp

index 692b86a7ae7b5fd74c3d08d99ce4c34b30ee0326..5477edcd962496333aaea31895a4938f00eececf 100644 (file)
@@ -29,6 +29,7 @@
 #include <QNetworkAccessManager>
 #include <QSslSocket>
 #include <QNetworkCookieJar>
+#include <QNetworkProxy>
 
 #include <QFileInfo>
 #include <QDir>
@@ -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<QNetworkAccessManager>();
     }
 
@@ -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<QSslError>)),
         SLOT(slotHandleSslErrors(QNetworkReply *, QList<QSslError>)));
     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<QNetworkAccessManager>(_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<QSslError>)),
         SLOT(slotHandleSslErrors(QNetworkReply *, QList<QSslError>)));
     connect(_am.data(), &QNetworkAccessManager::proxyAuthenticationRequired,