diff --git a/include/global/DataStore.hpp b/include/global/DataStore.hpp index a72d962..b61f4d6 100644 --- a/include/global/DataStore.hpp +++ b/include/global/DataStore.hpp @@ -89,12 +89,14 @@ namespace Configs { QString simple_dl_url = "http://cachefly.cachefly.net/1mb.test"; bool allow_beta_update = false; + // Network + bool net_use_proxy = false; + bool net_insecure = false; + // Subscription QString user_agent = ""; // set at main.cpp - bool sub_use_proxy = false; - bool sub_clear = false; - bool sub_insecure = false; int sub_auto_update = -30; + bool sub_clear = false; bool sub_send_hwid = false; // Security diff --git a/include/global/HTTPRequestHelper.hpp b/include/global/HTTPRequestHelper.hpp index fca95ea..093cb7a 100644 --- a/include/global/HTTPRequestHelper.hpp +++ b/include/global/HTTPRequestHelper.hpp @@ -26,7 +26,7 @@ namespace Configs_network { ; public: - static HTTPResponse HttpGet(const QString &url); + static HTTPResponse HttpGet(const QString &url, bool sendHwid = false); static QString GetHeader(const QList> &header, const QString &name); diff --git a/include/ui/setting/dialog_basic_settings.ui b/include/ui/setting/dialog_basic_settings.ui index c1e2be3..29f8719 100644 --- a/include/ui/setting/dialog_basic_settings.ui +++ b/include/ui/setting/dialog_basic_settings.ui @@ -490,95 +490,125 @@ - Subscription + Network - - - - - - - - 0 - 0 - - - - Enable - - - - - - - Interval (minute, invalid if less than 30) - - - - - - - - 0 - 0 - - - - - - - - - - - - - Use proxy when updating subscription - - - - - - - Ignore TLS errors when updating subscription - - - - - - - Clear servers before updating subscription - - - - - - - <html><head/><body><p>HWID=%1</p><p>OS=%2</p><p>OS Version=%3</p><p>Model=%4</p></body></html> - - - Enable sending HWID, device model, and OS version when updating subscription - - - - - + + + 0 0 - - Automatic update + + Network + + + + + Use proxy + + + + + + + Ignore TLS errors + + + + - - - - User Agent + + + + + 0 + 0 + + + Subscription + + + + + + + + + 0 + 0 + + + + Enable + + + + + + + Interval (minute, invalid if less than 30) + + + + + + + + 0 + 0 + + + + + + + + + + + + + Clear servers before updating subscription + + + + + + + <html><head/><body><p>HWID=%1</p><p>OS=%2</p><p>OS Version=%3</p><p>Model=%4</p></body></html> + + + Enable sending HWID, device model, and OS version when updating subscription + + + + + + + + 0 + 0 + + + + Automatic update + + + + + + + User Agent + + + + diff --git a/src/configs/sub/GroupUpdater.cpp b/src/configs/sub/GroupUpdater.cpp index ad4152e..b64f711 100644 --- a/src/configs/sub/GroupUpdater.cpp +++ b/src/configs/sub/GroupUpdater.cpp @@ -807,7 +807,7 @@ namespace Subscription { auto groupName = group == nullptr ? content : group->name; MW_show_log(">>>>>>>> " + QObject::tr("Requesting subscription: %1").arg(groupName)); - auto resp = NetworkRequestHelper::HttpGet(content); + auto resp = NetworkRequestHelper::HttpGet(content, Configs::dataStore->sub_send_hwid); if (!resp.error.isEmpty()) { MW_show_log("<<<<<<<< " + QObject::tr("Requesting subscription %1 error: %2").arg(groupName, resp.error + "\n" + resp.data)); return; diff --git a/src/global/Configs.cpp b/src/global/Configs.cpp index 08ca78b..ee35951 100644 --- a/src/global/Configs.cpp +++ b/src/global/Configs.cpp @@ -255,7 +255,7 @@ namespace Configs { _add(new configItem("theme", &theme, itemType::string)); _add(new configItem("custom_inbound", &custom_inbound, itemType::string)); _add(new configItem("custom_route", &custom_route_global, itemType::string)); - _add(new configItem("sub_use_proxy", &sub_use_proxy, itemType::boolean)); + _add(new configItem("net_use_proxy", &net_use_proxy, itemType::boolean)); _add(new configItem("remember_id", &remember_id, itemType::integer)); _add(new configItem("remember_enable", &remember_enable, itemType::boolean)); _add(new configItem("language", &language, itemType::integer)); @@ -277,7 +277,7 @@ namespace Configs { _add(new configItem("vpn_ipv6", &vpn_ipv6, itemType::boolean)); _add(new configItem("vpn_strict_route", &vpn_strict_route, itemType::boolean)); _add(new configItem("sub_clear", &sub_clear, itemType::boolean)); - _add(new configItem("sub_insecure", &sub_insecure, itemType::boolean)); + _add(new configItem("net_insecure", &net_insecure, itemType::boolean)); _add(new configItem("sub_auto_update", &sub_auto_update, itemType::integer)); _add(new configItem("sub_send_hwid", &sub_send_hwid, itemType::boolean)); _add(new configItem("start_minimal", &start_minimal, itemType::boolean)); diff --git a/src/global/HTTPRequestHelper.cpp b/src/global/HTTPRequestHelper.cpp index 01fd208..a3212d1 100644 --- a/src/global/HTTPRequestHelper.cpp +++ b/src/global/HTTPRequestHelper.cpp @@ -14,11 +14,12 @@ namespace Configs_network { - HTTPResponse NetworkRequestHelper::HttpGet(const QString &url) { + HTTPResponse NetworkRequestHelper::HttpGet(const QString &url, bool sendHwid) { QNetworkRequest request; QNetworkAccessManager accessManager; + accessManager.setTransferTimeout(10000); request.setUrl(url); - if (Configs::dataStore->sub_use_proxy || Configs::dataStore->spmode_system_proxy) { + if (Configs::dataStore->net_use_proxy || Configs::dataStore->spmode_system_proxy) { if (Configs::dataStore->started_id < 0) { return HTTPResponse{QObject::tr("Request with proxy but no profile started.")}; } @@ -31,13 +32,13 @@ namespace Configs_network { // Set attribute request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy); request.setHeader(QNetworkRequest::KnownHeaders::UserAgentHeader, Configs::dataStore->GetUserAgent()); - if (Configs::dataStore->sub_insecure) { + if (Configs::dataStore->net_insecure) { QSslConfiguration c; c.setPeerVerifyMode(QSslSocket::PeerVerifyMode::VerifyNone); request.setSslConfiguration(c); } //Attach HWID and device info headers if enabled in settings - if (Configs::dataStore->sub_send_hwid && !request.url().toString().contains("/throneproj/")) { + if (sendHwid) { auto details = GetDeviceDetails(); if (!details.hwid.isEmpty()) request.setRawHeader("x-hwid", details.hwid.toUtf8()); @@ -52,23 +53,13 @@ namespace Configs_network { for (const auto &err: errors) { error_str << err.errorString(); } - MW_show_log(QString("SSL Errors: %1 %2").arg(error_str.join(","), Configs::dataStore->sub_insecure ? "(Ignored)" : "")); + MW_show_log(QString("SSL Errors: %1 %2").arg(error_str.join(","), Configs::dataStore->net_insecure ? "(Ignored)" : "")); }); // Wait for response - auto abortTimer = new QTimer; - abortTimer->setSingleShot(true); - abortTimer->setInterval(10000); - connect(abortTimer, &QTimer::timeout, _reply, &QNetworkReply::abort); - abortTimer->start(); - { - QEventLoop loop; - connect(_reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); - loop.exec(); - } - if (abortTimer != nullptr) { - abortTimer->stop(); - abortTimer->deleteLater(); - } + QEventLoop loop; + connect(_reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); + loop.exec(); + // auto result = HTTPResponse{_reply->error() == QNetworkReply::NetworkError::NoError ? "" : _reply->errorString(), _reply->readAll(), _reply->rawHeaderPairs()}; @@ -87,7 +78,7 @@ namespace Configs_network { QNetworkRequest request; QNetworkAccessManager accessManager; request.setUrl(url); - if (Configs::dataStore->spmode_system_proxy) { + if (Configs::dataStore->net_use_proxy || Configs::dataStore->spmode_system_proxy) { if (Configs::dataStore->started_id < 0) { return QObject::tr("Request with proxy but no profile started."); } @@ -97,8 +88,11 @@ namespace Configs_network { p.setPort(Configs::dataStore->inbound_socks_port); accessManager.setProxy(p); } - request.setHeader(QNetworkRequest::KnownHeaders::UserAgentHeader, Configs::dataStore->GetUserAgent()); - request.setRawHeader("Accept", "application/octet-stream"); + if (Configs::dataStore->net_insecure) { + QSslConfiguration c; + c.setPeerVerifyMode(QSslSocket::PeerVerifyMode::VerifyNone); + request.setSslConfiguration(c); + } auto _reply = accessManager.get(request); connect(_reply, &QNetworkReply::sslErrors, _reply, [](const QList &errors) { @@ -106,7 +100,7 @@ namespace Configs_network { for (const auto &err: errors) { error_str << err.errorString(); } - MW_show_log(QString("SSL Errors: %1").arg(error_str.join(","))); + MW_show_log(QString("SSL Errors: %1 %2").arg(error_str.join(","), Configs::dataStore->net_insecure ? "(Ignored)" : "")); }); connect(_reply, &QNetworkReply::downloadProgress, _reply, [&](qint64 bytesReceived, qint64 bytesTotal) { @@ -123,6 +117,7 @@ namespace Configs_network { GetMainWindow()->setDownloadReport({}, false); GetMainWindow()->UpdateDataView(true); }); + _reply->deleteLater(); if(_reply->error() != QNetworkReply::NetworkError::NoError) { return _reply->errorString(); } @@ -137,7 +132,6 @@ namespace Configs_network { } file.write(_reply->readAll()); file.close(); - _reply->deleteLater(); return ""; } diff --git a/src/ui/setting/dialog_basic_settings.cpp b/src/ui/setting/dialog_basic_settings.cpp index a6dd412..9297e7e 100644 --- a/src/ui/setting/dialog_basic_settings.cpp +++ b/src/ui/setting/dialog_basic_settings.cpp @@ -114,9 +114,9 @@ DialogBasicSettings::DialogBasicSettings(QWidget *parent) ui->user_agent->setText(Configs::dataStore->user_agent); ui->user_agent->setPlaceholderText(Configs::dataStore->GetUserAgent(true)); - D_LOAD_BOOL(sub_use_proxy) + D_LOAD_BOOL(net_use_proxy) D_LOAD_BOOL(sub_clear) - D_LOAD_BOOL(sub_insecure) + D_LOAD_BOOL(net_insecure) D_LOAD_BOOL(sub_send_hwid) D_LOAD_INT_ENABLE(sub_auto_update, sub_auto_update_enable) auto details = GetDeviceDetails(); @@ -206,9 +206,9 @@ void DialogBasicSettings::accept() { } Configs::dataStore->user_agent = ui->user_agent->text(); - D_SAVE_BOOL(sub_use_proxy) + D_SAVE_BOOL(net_use_proxy) D_SAVE_BOOL(sub_clear) - D_SAVE_BOOL(sub_insecure) + D_SAVE_BOOL(net_insecure) D_SAVE_BOOL(sub_send_hwid) D_SAVE_INT_ENABLE(sub_auto_update, sub_auto_update_enable)