Merge pull request #21663 from sledgehammer999/backport_dont_ignore_ssl_errors

Don't ignore SSL errors
This commit is contained in:
sledgehammer999 2024-10-24 11:02:31 +03:00 committed by GitHub
commit e58b0a65d2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 85 additions and 37 deletions

View file

@ -148,10 +148,20 @@ Net::DownloadManager::DownloadManager(QObject *parent)
QStringList errorList; QStringList errorList;
for (const QSslError &error : errors) for (const QSslError &error : errors)
errorList += error.errorString(); errorList += error.errorString();
LogMsg(tr("Ignoring SSL error, URL: \"%1\", errors: \"%2\"").arg(reply->url().toString(), errorList.join(u". ")), Log::WARNING);
QString errorMsg;
if (!Preferences::instance()->isIgnoreSSLErrors())
{
errorMsg = tr("SSL error, URL: \"%1\", errors: \"%2\"");
}
else
{
errorMsg = tr("Ignoring SSL error, URL: \"%1\", errors: \"%2\"");
// Ignore all SSL errors // Ignore all SSL errors
reply->ignoreSslErrors(); reply->ignoreSslErrors();
}
LogMsg(errorMsg.arg(reply->url().toString(), errorList.join(u". ")), Log::WARNING);
}); });
connect(ProxyConfigurationManager::instance(), &ProxyConfigurationManager::proxyConfigurationChanged connect(ProxyConfigurationManager::instance(), &ProxyConfigurationManager::proxyConfigurationChanged

View file

@ -1330,6 +1330,19 @@ void Preferences::setMarkOfTheWebEnabled(const bool enabled)
setValue(u"Preferences/Advanced/markOfTheWeb"_s, enabled); setValue(u"Preferences/Advanced/markOfTheWeb"_s, enabled);
} }
bool Preferences::isIgnoreSSLErrors() const
{
return value(u"Preferences/Advanced/IgnoreSSLErrors"_s, false);
}
void Preferences::setIgnoreSSLErrors(const bool enabled)
{
if (enabled == isIgnoreSSLErrors())
return;
setValue(u"Preferences/Advanced/IgnoreSSLErrors"_s, enabled);
}
Path Preferences::getPythonExecutablePath() const Path Preferences::getPythonExecutablePath() const
{ {
return value(u"Preferences/Search/pythonExecutablePath"_s, Path()); return value(u"Preferences/Search/pythonExecutablePath"_s, Path());

View file

@ -293,6 +293,8 @@ public:
void setTrackerPortForwardingEnabled(bool enabled); void setTrackerPortForwardingEnabled(bool enabled);
bool isMarkOfTheWebEnabled() const; bool isMarkOfTheWebEnabled() const;
void setMarkOfTheWebEnabled(bool enabled); void setMarkOfTheWebEnabled(bool enabled);
bool isIgnoreSSLErrors() const;
void setIgnoreSSLErrors(bool enabled);
Path getPythonExecutablePath() const; Path getPythonExecutablePath() const;
void setPythonExecutablePath(const Path &path); void setPythonExecutablePath(const Path &path);
#if defined(Q_OS_WIN) || defined(Q_OS_MACOS) #if defined(Q_OS_WIN) || defined(Q_OS_MACOS)

View file

@ -105,6 +105,7 @@ namespace
#if defined(Q_OS_MACOS) || defined(Q_OS_WIN) #if defined(Q_OS_MACOS) || defined(Q_OS_WIN)
ENABLE_MARK_OF_THE_WEB, ENABLE_MARK_OF_THE_WEB,
#endif // Q_OS_MACOS || Q_OS_WIN #endif // Q_OS_MACOS || Q_OS_WIN
IGNORE_SSL_ERRORS,
PYTHON_EXECUTABLE_PATH, PYTHON_EXECUTABLE_PATH,
START_SESSION_PAUSED, START_SESSION_PAUSED,
SESSION_SHUTDOWN_TIMEOUT, SESSION_SHUTDOWN_TIMEOUT,
@ -332,6 +333,8 @@ void AdvancedSettings::saveAdvancedSettings() const
// Mark-of-the-Web // Mark-of-the-Web
pref->setMarkOfTheWebEnabled(m_checkBoxMarkOfTheWeb.isChecked()); pref->setMarkOfTheWebEnabled(m_checkBoxMarkOfTheWeb.isChecked());
#endif // Q_OS_MACOS || Q_OS_WIN #endif // Q_OS_MACOS || Q_OS_WIN
// Ignore SSL errors
pref->setIgnoreSSLErrors(m_checkBoxIgnoreSSLErrors.isChecked());
// Python executable path // Python executable path
pref->setPythonExecutablePath(Path(m_pythonExecutablePath.text().trimmed())); pref->setPythonExecutablePath(Path(m_pythonExecutablePath.text().trimmed()));
// Start session paused // Start session paused
@ -853,6 +856,10 @@ void AdvancedSettings::loadAdvancedSettings()
m_checkBoxMarkOfTheWeb.setChecked(pref->isMarkOfTheWebEnabled()); m_checkBoxMarkOfTheWeb.setChecked(pref->isMarkOfTheWebEnabled());
addRow(ENABLE_MARK_OF_THE_WEB, motwLabel, &m_checkBoxMarkOfTheWeb); addRow(ENABLE_MARK_OF_THE_WEB, motwLabel, &m_checkBoxMarkOfTheWeb);
#endif // Q_OS_MACOS || Q_OS_WIN #endif // Q_OS_MACOS || Q_OS_WIN
// Ignore SSL errors
m_checkBoxIgnoreSSLErrors.setChecked(pref->isIgnoreSSLErrors());
m_checkBoxIgnoreSSLErrors.setToolTip(tr("Affects certificate validation and non-torrent protocol activities (e.g. RSS feeds, program updates, torrent files, geoip db, etc)"));
addRow(IGNORE_SSL_ERRORS, tr("Ignore SSL errors"), &m_checkBoxIgnoreSSLErrors);
// Python executable path // Python executable path
m_pythonExecutablePath.setPlaceholderText(tr("(Auto detect if empty)")); m_pythonExecutablePath.setPlaceholderText(tr("(Auto detect if empty)"));
m_pythonExecutablePath.setText(pref->getPythonExecutablePath().toString()); m_pythonExecutablePath.setText(pref->getPythonExecutablePath().toString());

View file

@ -77,9 +77,10 @@ private:
m_spinBoxSavePathHistoryLength, m_spinBoxPeerTurnover, m_spinBoxPeerTurnoverCutoff, m_spinBoxPeerTurnoverInterval, m_spinBoxRequestQueueSize; m_spinBoxSavePathHistoryLength, m_spinBoxPeerTurnover, m_spinBoxPeerTurnoverCutoff, m_spinBoxPeerTurnoverInterval, m_spinBoxRequestQueueSize;
QCheckBox m_checkBoxOsCache, m_checkBoxRecheckCompleted, m_checkBoxResolveCountries, m_checkBoxResolveHosts, QCheckBox m_checkBoxOsCache, m_checkBoxRecheckCompleted, m_checkBoxResolveCountries, m_checkBoxResolveHosts,
m_checkBoxProgramNotifications, m_checkBoxTorrentAddedNotifications, m_checkBoxReannounceWhenAddressChanged, m_checkBoxTrackerFavicon, m_checkBoxTrackerStatus, m_checkBoxProgramNotifications, m_checkBoxTorrentAddedNotifications, m_checkBoxReannounceWhenAddressChanged, m_checkBoxTrackerFavicon, m_checkBoxTrackerStatus,
m_checkBoxTrackerPortForwarding, m_checkBoxConfirmTorrentRecheck, m_checkBoxConfirmRemoveAllTags, m_checkBoxAnnounceAllTrackers, m_checkBoxAnnounceAllTiers, m_checkBoxTrackerPortForwarding, m_checkBoxIgnoreSSLErrors, m_checkBoxConfirmTorrentRecheck, m_checkBoxConfirmRemoveAllTags, m_checkBoxAnnounceAllTrackers,
m_checkBoxMultiConnectionsPerIp, m_checkBoxValidateHTTPSTrackerCertificate, m_checkBoxSSRFMitigation, m_checkBoxBlockPeersOnPrivilegedPorts, m_checkBoxPieceExtentAffinity, m_checkBoxAnnounceAllTiers, m_checkBoxMultiConnectionsPerIp, m_checkBoxValidateHTTPSTrackerCertificate, m_checkBoxSSRFMitigation, m_checkBoxBlockPeersOnPrivilegedPorts,
m_checkBoxSuggestMode, m_checkBoxSpeedWidgetEnabled, m_checkBoxIDNSupport, m_checkBoxConfirmRemoveTrackerFromAllTorrents, m_checkBoxStartSessionPaused; m_checkBoxPieceExtentAffinity, m_checkBoxSuggestMode, m_checkBoxSpeedWidgetEnabled, m_checkBoxIDNSupport, m_checkBoxConfirmRemoveTrackerFromAllTorrents,
m_checkBoxStartSessionPaused;
QComboBox m_comboBoxInterface, m_comboBoxInterfaceAddress, m_comboBoxDiskIOReadMode, m_comboBoxDiskIOWriteMode, m_comboBoxUtpMixedMode, m_comboBoxChokingAlgorithm, QComboBox m_comboBoxInterface, m_comboBoxInterfaceAddress, m_comboBoxDiskIOReadMode, m_comboBoxDiskIOWriteMode, m_comboBoxUtpMixedMode, m_comboBoxChokingAlgorithm,
m_comboBoxSeedChokingAlgorithm, m_comboBoxResumeDataStorage, m_comboBoxTorrentContentRemoveOption; m_comboBoxSeedChokingAlgorithm, m_comboBoxResumeDataStorage, m_comboBoxTorrentContentRemoveOption;
QLineEdit m_lineEditAppInstanceName, m_pythonExecutablePath, m_lineEditAnnounceIP, m_lineEditDHTBootstrapNodes; QLineEdit m_lineEditAppInstanceName, m_pythonExecutablePath, m_lineEditAnnounceIP, m_lineEditDHTBootstrapNodes;

View file

@ -374,6 +374,16 @@ void AppController::preferencesAction()
data[u"resolve_peer_countries"_s] = pref->resolvePeerCountries(); data[u"resolve_peer_countries"_s] = pref->resolvePeerCountries();
// Reannounce to all trackers when ip/port changed // Reannounce to all trackers when ip/port changed
data[u"reannounce_when_address_changed"_s] = session->isReannounceWhenAddressChangedEnabled(); data[u"reannounce_when_address_changed"_s] = session->isReannounceWhenAddressChangedEnabled();
// Embedded tracker
data[u"enable_embedded_tracker"_s] = session->isTrackerEnabled();
data[u"embedded_tracker_port"_s] = pref->getTrackerPort();
data[u"embedded_tracker_port_forwarding"_s] = pref->isTrackerPortForwardingEnabled();
// Mark-of-the-Web
data[u"mark_of_the_web"_s] = pref->isMarkOfTheWebEnabled();
// Ignore SSL errors
data[u"ignore_ssl_errors"_s] = pref->isIgnoreSSLErrors();
// Python executable path
data[u"python_executable_path"_s] = pref->getPythonExecutablePath().toString();
// libtorrent preferences // libtorrent preferences
// Bdecode depth limit // Bdecode depth limit
@ -436,14 +446,6 @@ void AppController::preferencesAction()
data[u"ssrf_mitigation"_s] = session->isSSRFMitigationEnabled(); data[u"ssrf_mitigation"_s] = session->isSSRFMitigationEnabled();
// Disallow connection to peers on privileged ports // Disallow connection to peers on privileged ports
data[u"block_peers_on_privileged_ports"_s] = session->blockPeersOnPrivilegedPorts(); data[u"block_peers_on_privileged_ports"_s] = session->blockPeersOnPrivilegedPorts();
// Embedded tracker
data[u"enable_embedded_tracker"_s] = session->isTrackerEnabled();
data[u"embedded_tracker_port"_s] = pref->getTrackerPort();
data[u"embedded_tracker_port_forwarding"_s] = pref->isTrackerPortForwardingEnabled();
// Mark-of-the-Web
data[u"mark_of_the_web"_s] = pref->isMarkOfTheWebEnabled();
// Python executable path
data[u"python_executable_path"_s] = pref->getPythonExecutablePath().toString();
// Choking algorithm // Choking algorithm
data[u"upload_slots_behavior"_s] = static_cast<int>(session->chokingAlgorithm()); data[u"upload_slots_behavior"_s] = static_cast<int>(session->chokingAlgorithm());
// Seed choking algorithm // Seed choking algorithm
@ -982,6 +984,22 @@ void AppController::setPreferencesAction()
// Reannounce to all trackers when ip/port changed // Reannounce to all trackers when ip/port changed
if (hasKey(u"reannounce_when_address_changed"_s)) if (hasKey(u"reannounce_when_address_changed"_s))
session->setReannounceWhenAddressChangedEnabled(it.value().toBool()); session->setReannounceWhenAddressChangedEnabled(it.value().toBool());
// Embedded tracker
if (hasKey(u"embedded_tracker_port"_s))
pref->setTrackerPort(it.value().toInt());
if (hasKey(u"embedded_tracker_port_forwarding"_s))
pref->setTrackerPortForwardingEnabled(it.value().toBool());
if (hasKey(u"enable_embedded_tracker"_s))
session->setTrackerEnabled(it.value().toBool());
// Mark-of-the-Web
if (hasKey(u"mark_of_the_web"_s))
pref->setMarkOfTheWebEnabled(it.value().toBool());
// Ignore SLL errors
if (hasKey(u"ignore_ssl_errors"_s))
pref->setIgnoreSSLErrors(it.value().toBool());
// Python executable path
if (hasKey(u"python_executable_path"_s))
pref->setPythonExecutablePath(Path(it.value().toString()));
// libtorrent preferences // libtorrent preferences
// Bdecode depth limit // Bdecode depth limit
@ -1076,19 +1094,6 @@ void AppController::setPreferencesAction()
// Disallow connection to peers on privileged ports // Disallow connection to peers on privileged ports
if (hasKey(u"block_peers_on_privileged_ports"_s)) if (hasKey(u"block_peers_on_privileged_ports"_s))
session->setBlockPeersOnPrivilegedPorts(it.value().toBool()); session->setBlockPeersOnPrivilegedPorts(it.value().toBool());
// Embedded tracker
if (hasKey(u"embedded_tracker_port"_s))
pref->setTrackerPort(it.value().toInt());
if (hasKey(u"embedded_tracker_port_forwarding"_s))
pref->setTrackerPortForwardingEnabled(it.value().toBool());
if (hasKey(u"enable_embedded_tracker"_s))
session->setTrackerEnabled(it.value().toBool());
// Mark-of-the-Web
if (hasKey(u"mark_of_the_web"_s))
pref->setMarkOfTheWebEnabled(it.value().toBool());
// Python executable path
if (hasKey(u"python_executable_path"_s))
pref->setPythonExecutablePath(Path(it.value().toString()));
// Choking algorithm // Choking algorithm
if (hasKey(u"upload_slots_behavior"_s)) if (hasKey(u"upload_slots_behavior"_s))
session->setChokingAlgorithm(static_cast<BitTorrent::ChokingAlgorithm>(it.value().toInt())); session->setChokingAlgorithm(static_cast<BitTorrent::ChokingAlgorithm>(it.value().toInt()));

View file

@ -1132,6 +1132,14 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
<input type="checkbox" id="markOfTheWeb" /> <input type="checkbox" id="markOfTheWeb" />
</td> </td>
</tr> </tr>
<tr>
<td>
<label for="ignoreSSLErrors">QBT_TR(Ignore SSL errors:)QBT_TR[CONTEXT=OptionsDialog]</label>
</td>
<td>
<input type="checkbox" id="ignoreSSLErrors">
</td>
</tr>
<tr> <tr>
<td> <td>
<label for="pythonExecutablePath">QBT_TR(Python executable path (may require restart):)QBT_TR[CONTEXT=OptionsDialog]</label> <label for="pythonExecutablePath">QBT_TR(Python executable path (may require restart):)QBT_TR[CONTEXT=OptionsDialog]</label>
@ -2353,6 +2361,12 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
$("refreshInterval").setProperty("value", pref.refresh_interval); $("refreshInterval").setProperty("value", pref.refresh_interval);
$("resolvePeerCountries").setProperty("checked", pref.resolve_peer_countries); $("resolvePeerCountries").setProperty("checked", pref.resolve_peer_countries);
$("reannounceWhenAddressChanged").setProperty("checked", pref.reannounce_when_address_changed); $("reannounceWhenAddressChanged").setProperty("checked", pref.reannounce_when_address_changed);
$("enableEmbeddedTracker").setProperty("checked", pref.enable_embedded_tracker);
$("embeddedTrackerPort").setProperty("value", pref.embedded_tracker_port);
$("embeddedTrackerPortForwarding").setProperty("checked", pref.embedded_tracker_port_forwarding);
$("markOfTheWeb").setProperty("checked", pref.mark_of_the_web);
$("ignoreSSLErrors").setProperty("checked", pref.ignore_ssl_errors);
$("pythonExecutablePath").setProperty("value", pref.python_executable_path);
// libtorrent section // libtorrent section
$("bdecodeDepthLimit").setProperty("value", pref.bdecode_depth_limit); $("bdecodeDepthLimit").setProperty("value", pref.bdecode_depth_limit);
$("bdecodeTokenLimit").setProperty("value", pref.bdecode_token_limit); $("bdecodeTokenLimit").setProperty("value", pref.bdecode_token_limit);
@ -2386,11 +2400,6 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
$("validateHTTPSTrackerCertificate").setProperty("checked", pref.validate_https_tracker_certificate); $("validateHTTPSTrackerCertificate").setProperty("checked", pref.validate_https_tracker_certificate);
$("mitigateSSRF").setProperty("checked", pref.ssrf_mitigation); $("mitigateSSRF").setProperty("checked", pref.ssrf_mitigation);
$("blockPeersOnPrivilegedPorts").setProperty("checked", pref.block_peers_on_privileged_ports); $("blockPeersOnPrivilegedPorts").setProperty("checked", pref.block_peers_on_privileged_ports);
$("enableEmbeddedTracker").setProperty("checked", pref.enable_embedded_tracker);
$("embeddedTrackerPort").setProperty("value", pref.embedded_tracker_port);
$("embeddedTrackerPortForwarding").setProperty("checked", pref.embedded_tracker_port_forwarding);
$("markOfTheWeb").setProperty("checked", pref.mark_of_the_web);
$("pythonExecutablePath").setProperty("value", pref.python_executable_path);
$("uploadSlotsBehavior").setProperty("value", pref.upload_slots_behavior); $("uploadSlotsBehavior").setProperty("value", pref.upload_slots_behavior);
$("uploadChokingAlgorithm").setProperty("value", pref.upload_choking_algorithm); $("uploadChokingAlgorithm").setProperty("value", pref.upload_choking_algorithm);
$("announceAllTrackers").setProperty("checked", pref.announce_to_all_trackers); $("announceAllTrackers").setProperty("checked", pref.announce_to_all_trackers);
@ -2802,6 +2811,12 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
settings["refresh_interval"] = Number($("refreshInterval").getProperty("value")); settings["refresh_interval"] = Number($("refreshInterval").getProperty("value"));
settings["resolve_peer_countries"] = $("resolvePeerCountries").getProperty("checked"); settings["resolve_peer_countries"] = $("resolvePeerCountries").getProperty("checked");
settings["reannounce_when_address_changed"] = $("reannounceWhenAddressChanged").getProperty("checked"); settings["reannounce_when_address_changed"] = $("reannounceWhenAddressChanged").getProperty("checked");
settings["enable_embedded_tracker"] = $("enableEmbeddedTracker").getProperty("checked");
settings["embedded_tracker_port"] = Number($("embeddedTrackerPort").getProperty("value"));
settings["embedded_tracker_port_forwarding"] = $("embeddedTrackerPortForwarding").getProperty("checked");
settings["mark_of_the_web"] = $("markOfTheWeb").getProperty("checked");
settings["ignore_ssl_errors"] = $("ignoreSSLErrors").getProperty("checked");
settings["python_executable_path"] = $("pythonExecutablePath").getProperty("value");
// libtorrent section // libtorrent section
settings["bdecode_depth_limit"] = Number($("bdecodeDepthLimit").getProperty("value")); settings["bdecode_depth_limit"] = Number($("bdecodeDepthLimit").getProperty("value"));
@ -2836,11 +2851,6 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
settings["validate_https_tracker_certificate"] = $("validateHTTPSTrackerCertificate").getProperty("checked"); settings["validate_https_tracker_certificate"] = $("validateHTTPSTrackerCertificate").getProperty("checked");
settings["ssrf_mitigation"] = $("mitigateSSRF").getProperty("checked"); settings["ssrf_mitigation"] = $("mitigateSSRF").getProperty("checked");
settings["block_peers_on_privileged_ports"] = $("blockPeersOnPrivilegedPorts").getProperty("checked"); settings["block_peers_on_privileged_ports"] = $("blockPeersOnPrivilegedPorts").getProperty("checked");
settings["enable_embedded_tracker"] = $("enableEmbeddedTracker").getProperty("checked");
settings["embedded_tracker_port"] = Number($("embeddedTrackerPort").getProperty("value"));
settings["embedded_tracker_port_forwarding"] = $("embeddedTrackerPortForwarding").getProperty("checked");
settings["mark_of_the_web"] = $("markOfTheWeb").getProperty("checked");
settings["python_executable_path"] = $("pythonExecutablePath").getProperty("value");
settings["upload_slots_behavior"] = Number($("uploadSlotsBehavior").getProperty("value")); settings["upload_slots_behavior"] = Number($("uploadSlotsBehavior").getProperty("value"));
settings["upload_choking_algorithm"] = Number($("uploadChokingAlgorithm").getProperty("value")); settings["upload_choking_algorithm"] = Number($("uploadChokingAlgorithm").getProperty("value"));
settings["announce_to_all_trackers"] = $("announceAllTrackers").getProperty("checked"); settings["announce_to_all_trackers"] = $("announceAllTrackers").getProperty("checked");