From: Roeland Jago Douma Date: Sat, 21 Mar 2020 10:25:34 +0000 (+0100) Subject: Move the proxyfiles to libsync where they make more sense X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~222^2^2~145^2~1 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=50dcab5f8813f81394cb2e6ac2fa8740cce23b2f;p=nextcloud-desktop.git Move the proxyfiles to libsync where they make more sense Signed-off-by: Roeland Jago Douma Signed-off-by: Michael Schuster --- diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index cb8738581..b83106441 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -54,7 +54,6 @@ set(client_SRCS accountmanager.cpp accountsettings.cpp application.cpp - clientproxy.cpp connectionvalidator.cpp folder.cpp folderman.cpp diff --git a/src/gui/clientproxy.cpp b/src/gui/clientproxy.cpp deleted file mode 100644 index d9f851d1a..000000000 --- a/src/gui/clientproxy.cpp +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright (C) by Klaas Freitag - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. - */ - -#include "clientproxy.h" - -#include "configfile.h" -#include -#include -#include - -namespace OCC { - -Q_LOGGING_CATEGORY(lcClientProxy, "nextcloud.sync.clientproxy", QtInfoMsg) - -ClientProxy::ClientProxy(QObject *parent) - : QObject(parent) -{ -} - -static QNetworkProxy proxyFromConfig(const ConfigFile &cfg) -{ - QNetworkProxy proxy; - - if (cfg.proxyHostName().isEmpty()) - return QNetworkProxy(); - - proxy.setHostName(cfg.proxyHostName()); - proxy.setPort(cfg.proxyPort()); - if (cfg.proxyNeedsAuth()) { - proxy.setUser(cfg.proxyUser()); - proxy.setPassword(cfg.proxyPassword()); - } - return proxy; -} - -bool ClientProxy::isUsingSystemDefault() -{ - OCC::ConfigFile cfg; - - // if there is no config file, default to system proxy. - if (cfg.exists()) { - return cfg.proxyType() == QNetworkProxy::DefaultProxy; - } - - return true; -} - -QString printQNetworkProxy(const QNetworkProxy &proxy) -{ - return QString("%1://%2:%3").arg(proxy.type()).arg(proxy.hostName()).arg(proxy.port()); -} - -void ClientProxy::setupQtProxyFromConfig() -{ - OCC::ConfigFile cfg; - int proxyType = QNetworkProxy::DefaultProxy; - QNetworkProxy proxy; - - // if there is no config file, default to system proxy. - if (cfg.exists()) { - proxyType = cfg.proxyType(); - proxy = proxyFromConfig(cfg); - } - - switch (proxyType) { - case QNetworkProxy::NoProxy: - qCInfo(lcClientProxy) << "Set proxy configuration to use NO proxy"; - QNetworkProxyFactory::setUseSystemConfiguration(false); - QNetworkProxy::setApplicationProxy(QNetworkProxy::NoProxy); - break; - case QNetworkProxy::DefaultProxy: - qCInfo(lcClientProxy) << "Set proxy configuration to use the preferred system proxy for http tcp connections"; - { - QNetworkProxyQuery query; - query.setProtocolTag("http"); - query.setQueryType(QNetworkProxyQuery::TcpSocket); - auto proxies = QNetworkProxyFactory::proxyForQuery(query); - proxy = proxies.first(); - } - QNetworkProxyFactory::setUseSystemConfiguration(false); - QNetworkProxy::setApplicationProxy(proxy); - break; - case QNetworkProxy::Socks5Proxy: - proxy.setType(QNetworkProxy::Socks5Proxy); - qCInfo(lcClientProxy) << "Set proxy configuration to SOCKS5" << printQNetworkProxy(proxy); - QNetworkProxyFactory::setUseSystemConfiguration(false); - QNetworkProxy::setApplicationProxy(proxy); - break; - case QNetworkProxy::HttpProxy: - proxy.setType(QNetworkProxy::HttpProxy); - qCInfo(lcClientProxy) << "Set proxy configuration to HTTP" << printQNetworkProxy(proxy); - QNetworkProxyFactory::setUseSystemConfiguration(false); - QNetworkProxy::setApplicationProxy(proxy); - break; - default: - break; - } -} - -const char *ClientProxy::proxyTypeToCStr(QNetworkProxy::ProxyType type) -{ - switch (type) { - case QNetworkProxy::NoProxy: - return "NoProxy"; - case QNetworkProxy::DefaultProxy: - return "DefaultProxy"; - case QNetworkProxy::Socks5Proxy: - return "Socks5Proxy"; - case QNetworkProxy::HttpProxy: - return "HttpProxy"; - case QNetworkProxy::HttpCachingProxy: - return "HttpCachingProxy"; - case QNetworkProxy::FtpCachingProxy: - return "FtpCachingProxy"; - default: - return "NoProxy"; - } -} - -void ClientProxy::lookupSystemProxyAsync(const QUrl &url, QObject *dst, const char *slot) -{ - auto *runnable = new SystemProxyRunnable(url); - QObject::connect(runnable, SIGNAL(systemProxyLookedUp(QNetworkProxy)), dst, slot); - QThreadPool::globalInstance()->start(runnable); // takes ownership and deletes -} - -SystemProxyRunnable::SystemProxyRunnable(const QUrl &url) - : QObject() - , QRunnable() - , _url(url) -{ -} - -void SystemProxyRunnable::run() -{ - qRegisterMetaType("QNetworkProxy"); - QList proxies = QNetworkProxyFactory::systemProxyForQuery(QNetworkProxyQuery(_url)); - - if (proxies.isEmpty()) { - emit systemProxyLookedUp(QNetworkProxy(QNetworkProxy::NoProxy)); - } else { - emit systemProxyLookedUp(proxies.first()); - // FIXME Would we really ever return more? - } -} -} diff --git a/src/gui/clientproxy.h b/src/gui/clientproxy.h deleted file mode 100644 index 348eab99b..000000000 --- a/src/gui/clientproxy.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) by Klaas Freitag - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. - */ - -#ifndef CLIENTPROXY_H -#define CLIENTPROXY_H - -#include -#include -#include -#include - -#include -#include "common/utility.h" -#include "owncloudlib.h" - -namespace OCC { - -class ConfigFile; - -/** - * @brief The ClientProxy class - * @ingroup libsync - */ -class ClientProxy : public QObject -{ - Q_OBJECT -public: - explicit ClientProxy(QObject *parent = nullptr); - - static bool isUsingSystemDefault(); - static void lookupSystemProxyAsync(const QUrl &url, QObject *dst, const char *slot); - -public slots: - void setupQtProxyFromConfig(); - -private: - const char *proxyTypeToCStr(QNetworkProxy::ProxyType type); -}; - -class SystemProxyRunnable : public QObject, public QRunnable -{ - Q_OBJECT -public: - SystemProxyRunnable(const QUrl &url); - void run() override; -signals: - void systemProxyLookedUp(const QNetworkProxy &url); - -private: - QUrl _url; -}; - -QString printQNetworkProxy(const QNetworkProxy &proxy); -} - -#endif // CLIENTPROXY_H diff --git a/src/libsync/CMakeLists.txt b/src/libsync/CMakeLists.txt index 663bc1ac8..ac3e99bd4 100644 --- a/src/libsync/CMakeLists.txt +++ b/src/libsync/CMakeLists.txt @@ -24,6 +24,7 @@ set(libsync_SRCS wordlist.cpp bandwidthmanager.cpp capabilities.cpp + clientproxy.cpp cookiejar.cpp discoveryphase.cpp filesystem.cpp diff --git a/src/libsync/clientproxy.cpp b/src/libsync/clientproxy.cpp new file mode 100644 index 000000000..8d078f2dd --- /dev/null +++ b/src/libsync/clientproxy.cpp @@ -0,0 +1,137 @@ +/* + * Copyright (C) by Klaas Freitag + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#include "clientproxy.h" + +#include "configfile.h" +#include +#include +#include + +namespace OCC { + +Q_LOGGING_CATEGORY(lcClientProxy, "nextcloud.sync.clientproxy", QtInfoMsg) + +ClientProxy::ClientProxy(QObject *parent) + : QObject(parent) +{ +} + +static QNetworkProxy proxyFromConfig(const ConfigFile &cfg) +{ + QNetworkProxy proxy; + + if (cfg.proxyHostName().isEmpty()) + return QNetworkProxy(); + + proxy.setHostName(cfg.proxyHostName()); + proxy.setPort(cfg.proxyPort()); + if (cfg.proxyNeedsAuth()) { + proxy.setUser(cfg.proxyUser()); + proxy.setPassword(cfg.proxyPassword()); + } + return proxy; +} + +bool ClientProxy::isUsingSystemDefault() +{ + OCC::ConfigFile cfg; + + // if there is no config file, default to system proxy. + if (cfg.exists()) { + return cfg.proxyType() == QNetworkProxy::DefaultProxy; + } + + return true; +} + +QString printQNetworkProxy(const QNetworkProxy &proxy) +{ + return QString("%1://%2:%3").arg(proxy.type()).arg(proxy.hostName()).arg(proxy.port()); +} + +void ClientProxy::setupQtProxyFromConfig() +{ + OCC::ConfigFile cfg; + int proxyType = QNetworkProxy::DefaultProxy; + QNetworkProxy proxy; + + // if there is no config file, default to system proxy. + if (cfg.exists()) { + proxyType = cfg.proxyType(); + proxy = proxyFromConfig(cfg); + } + + switch (proxyType) { + case QNetworkProxy::NoProxy: + qCInfo(lcClientProxy) << "Set proxy configuration to use NO proxy"; + QNetworkProxyFactory::setUseSystemConfiguration(false); + QNetworkProxy::setApplicationProxy(QNetworkProxy::NoProxy); + break; + case QNetworkProxy::DefaultProxy: + qCInfo(lcClientProxy) << "Set proxy configuration to use the preferred system proxy for http tcp connections"; + { + QNetworkProxyQuery query; + query.setProtocolTag("http"); + query.setQueryType(QNetworkProxyQuery::TcpSocket); + auto proxies = QNetworkProxyFactory::proxyForQuery(query); + proxy = proxies.first(); + } + QNetworkProxyFactory::setUseSystemConfiguration(false); + QNetworkProxy::setApplicationProxy(proxy); + break; + case QNetworkProxy::Socks5Proxy: + proxy.setType(QNetworkProxy::Socks5Proxy); + qCInfo(lcClientProxy) << "Set proxy configuration to SOCKS5" << printQNetworkProxy(proxy); + QNetworkProxyFactory::setUseSystemConfiguration(false); + QNetworkProxy::setApplicationProxy(proxy); + break; + case QNetworkProxy::HttpProxy: + proxy.setType(QNetworkProxy::HttpProxy); + qCInfo(lcClientProxy) << "Set proxy configuration to HTTP" << printQNetworkProxy(proxy); + QNetworkProxyFactory::setUseSystemConfiguration(false); + QNetworkProxy::setApplicationProxy(proxy); + break; + default: + break; + } +} + +void ClientProxy::lookupSystemProxyAsync(const QUrl &url, QObject *dst, const char *slot) +{ + auto *runnable = new SystemProxyRunnable(url); + QObject::connect(runnable, SIGNAL(systemProxyLookedUp(QNetworkProxy)), dst, slot); + QThreadPool::globalInstance()->start(runnable); // takes ownership and deletes +} + +SystemProxyRunnable::SystemProxyRunnable(const QUrl &url) + : QObject() + , QRunnable() + , _url(url) +{ +} + +void SystemProxyRunnable::run() +{ + qRegisterMetaType("QNetworkProxy"); + QList proxies = QNetworkProxyFactory::systemProxyForQuery(QNetworkProxyQuery(_url)); + + if (proxies.isEmpty()) { + emit systemProxyLookedUp(QNetworkProxy(QNetworkProxy::NoProxy)); + } else { + emit systemProxyLookedUp(proxies.first()); + // FIXME Would we really ever return more? + } +} +} diff --git a/src/libsync/clientproxy.h b/src/libsync/clientproxy.h new file mode 100644 index 000000000..0363ae466 --- /dev/null +++ b/src/libsync/clientproxy.h @@ -0,0 +1,64 @@ +/* + * Copyright (C) by Klaas Freitag + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#ifndef CLIENTPROXY_H +#define CLIENTPROXY_H + +#include +#include +#include +#include + +#include +#include "common/utility.h" +#include "owncloudlib.h" + +namespace OCC { + +class ConfigFile; + +/** + * @brief The ClientProxy class + * @ingroup libsync + */ +class OWNCLOUDSYNC_EXPORT ClientProxy : public QObject +{ + Q_OBJECT +public: + explicit ClientProxy(QObject *parent = nullptr); + + static bool isUsingSystemDefault(); + static void lookupSystemProxyAsync(const QUrl &url, QObject *dst, const char *slot); + +public slots: + void setupQtProxyFromConfig(); +}; + +class OWNCLOUDSYNC_EXPORT SystemProxyRunnable : public QObject, public QRunnable +{ + Q_OBJECT +public: + SystemProxyRunnable(const QUrl &url); + void run() override; +signals: + void systemProxyLookedUp(const QNetworkProxy &url); + +private: + QUrl _url; +}; + +QString printQNetworkProxy(const QNetworkProxy &proxy); +} + +#endif // CLIENTPROXY_H diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index a39da386d..8a7a79049 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -69,7 +69,6 @@ list(APPEND FolderMan_SRC ../src/gui/guiutility.cpp ) list(APPEND FolderMan_SRC ../src/gui/navigationpanehelper.cpp ) list(APPEND FolderMan_SRC ../src/gui/userinfo.cpp ) list(APPEND FolderMan_SRC ../src/gui/connectionvalidator.cpp ) -list(APPEND FolderMan_SRC ../src/gui/clientproxy.cpp ) list(APPEND FolderMan_SRC ../src/gui/ocsjob.cpp ) list(APPEND FolderMan_SRC ../src/gui/ocsnavigationappsjob.cpp ) list(APPEND FolderMan_SRC ../src/gui/accountstate.cpp ) @@ -79,7 +78,6 @@ list(APPEND FolderMan_SRC stubfolderman.cpp ) nextcloud_add_test(FolderMan "${FolderMan_SRC}") SET(RemoteWipe_SRC ../src/gui/remotewipe.cpp) -list(APPEND RemoteWipe_SRC ../src/gui/clientproxy.cpp ) list(APPEND RemoteWipe_SRC ../src/gui/guiutility.cpp ) list(APPEND RemoteWipe_SRC ../src/gui/userinfo.cpp ) list(APPEND RemoteWipe_SRC ../src/gui/connectionvalidator.cpp )