diff --git a/src/librssguard/gui/settings/settingsbrowsermail.cpp b/src/librssguard/gui/settings/settingsbrowsermail.cpp index 2abb36485..3373ce574 100644 --- a/src/librssguard/gui/settings/settingsbrowsermail.cpp +++ b/src/librssguard/gui/settings/settingsbrowsermail.cpp @@ -8,6 +8,7 @@ #include "miscellaneous/application.h" #include "miscellaneous/externaltool.h" #include "miscellaneous/iconfactory.h" +#include "network-web/cookiejar.h" #include "network-web/silentnetworkaccessmanager.h" #include "network-web/webfactory.h" @@ -39,6 +40,7 @@ SettingsBrowserMail::SettingsBrowserMail(Settings* settings, QWidget* parent) m_ui->m_listTools->setHeaderLabels(QStringList() << tr("Executable") << tr("Parameters")); m_ui->m_listTools->header()->setSectionResizeMode(0, QHeaderView::ResizeMode::ResizeToContents); + connect(m_ui->m_cbIgnoreAllCookies, &QCheckBox::stateChanged, this, &SettingsBrowserMail::dirtifySettings); connect(m_ui->m_checkOpenLinksInExternal, &QCheckBox::stateChanged, this, &SettingsBrowserMail::dirtifySettings); connect(m_proxyDetails, &NetworkProxyDetails::changed, this, &SettingsBrowserMail::dirtifySettings); connect(m_ui->m_grpCustomExternalBrowser, &QGroupBox::toggled, this, &SettingsBrowserMail::dirtifySettings); @@ -153,6 +155,8 @@ void SettingsBrowserMail::selectEmailExecutable() { void SettingsBrowserMail::loadSettings() { onBeginLoadSettings(); + m_ui->m_cbIgnoreAllCookies + ->setChecked(settings()->value(GROUP(Network), SETTING(Network::IgnoreAllCookies)).toBool()); m_ui->m_checkOpenLinksInExternal ->setChecked(settings()->value(GROUP(Browser), SETTING(Browser::OpenLinksInExternalBrowserRightAway)).toBool()); @@ -191,6 +195,8 @@ void SettingsBrowserMail::loadSettings() { void SettingsBrowserMail::saveSettings() { onBeginSaveSettings(); + settings()->setValue(GROUP(Network), Network::IgnoreAllCookies, m_ui->m_cbIgnoreAllCookies->isChecked()); + settings()->setValue(GROUP(Browser), Browser::OpenLinksInExternalBrowserRightAway, m_ui->m_checkOpenLinksInExternal->isChecked()); @@ -229,6 +235,7 @@ void SettingsBrowserMail::saveSettings() { ExternalTool::setToolsToSettings(tools); + qApp->web()->cookieJar()->updateSettings(); qApp->web()->updateProxy(); // Reload settings for all network access managers. diff --git a/src/librssguard/gui/settings/settingsbrowsermail.h b/src/librssguard/gui/settings/settingsbrowsermail.h index 167c9ab4e..bb124433d 100644 --- a/src/librssguard/gui/settings/settingsbrowsermail.h +++ b/src/librssguard/gui/settings/settingsbrowsermail.h @@ -12,7 +12,7 @@ class NetworkProxyDetails; class SettingsBrowserMail : public SettingsPanel { - Q_OBJECT + Q_OBJECT public: explicit SettingsBrowserMail(Settings* settings, QWidget* parent = nullptr); @@ -43,7 +43,7 @@ class SettingsBrowserMail : public SettingsPanel { }; inline QString SettingsBrowserMail::title() const { - return tr("Web browser & e-mail & proxy"); + return tr("Network & web & tools"); } #endif // SETTINGSBROWSERMAIL_H diff --git a/src/librssguard/gui/settings/settingsbrowsermail.ui b/src/librssguard/gui/settings/settingsbrowsermail.ui index dea7101a0..f5024ca4d 100644 --- a/src/librssguard/gui/settings/settingsbrowsermail.ui +++ b/src/librssguard/gui/settings/settingsbrowsermail.ui @@ -16,6 +16,20 @@ 0 + + + Network + + + + + + Do not accept any incoming cookies + + + + + External web browser diff --git a/src/librssguard/miscellaneous/settings.cpp b/src/librssguard/miscellaneous/settings.cpp index b77f3e06d..976ce0711 100644 --- a/src/librssguard/miscellaneous/settings.cpp +++ b/src/librssguard/miscellaneous/settings.cpp @@ -10,7 +10,6 @@ #include #if defined(USE_WEBENGINE) - // WebEngine. DKEY WebEngineAttributes::ID = "web_engine_attributes"; #endif @@ -42,6 +41,11 @@ DVALUE(QString) Node::PackageFolderDef = QSL(USER_DATA_PLACEHOLDER) + "/node-pac // Cookies. DKEY Cookies::ID = "cookies"; +DKEY Network::ID = "network"; + +DKEY Network::IgnoreAllCookies = "ignore_all_cookies"; +DVALUE(bool) Network::IgnoreAllCookiesDef = false; + // AdBlock. DKEY AdBlock::ID = "adblock"; diff --git a/src/librssguard/miscellaneous/settings.h b/src/librssguard/miscellaneous/settings.h index 250a9c894..3a46fa1fd 100644 --- a/src/librssguard/miscellaneous/settings.h +++ b/src/librssguard/miscellaneous/settings.h @@ -316,6 +316,14 @@ namespace GUI { VALUE(char*) StyleDef; } // namespace GUI +// Network. +namespace Network { + KEY ID; + + KEY IgnoreAllCookies; + VALUE(bool) IgnoreAllCookiesDef; +} // namespace Network + // General. namespace General { KEY ID; diff --git a/src/librssguard/network-web/cookiejar.cpp b/src/librssguard/network-web/cookiejar.cpp index c0d2f85a8..29834bb4d 100644 --- a/src/librssguard/network-web/cookiejar.cpp +++ b/src/librssguard/network-web/cookiejar.cpp @@ -21,12 +21,14 @@ CookieJar::CookieJar(QObject* parent) : QNetworkCookieJar(parent) { #if defined(USE_WEBENGINE) // WebEngine does not store cookies, CookieJar does. - QWebEngineProfile::defaultProfile()->setPersistentCookiesPolicy(QWebEngineProfile::PersistentCookiesPolicy::NoPersistentCookies); + QWebEngineProfile::defaultProfile() + ->setPersistentCookiesPolicy(QWebEngineProfile::PersistentCookiesPolicy::NoPersistentCookies); m_webEngineCookies = QWebEngineProfile::defaultProfile()->cookieStore(); #endif // Load all cookies and also set them into WebEngine store. + updateSettings(); loadCookies(); #if defined(USE_WEBENGINE) @@ -75,7 +77,7 @@ QList CookieJar::extractCookiesFromUrl(const QString& url) { void CookieJar::loadCookies() { Settings* sett = qApp->settings(); - auto keys = sett->allKeys(Cookies::ID); + auto keys = sett->allKeys(GROUP(Cookies)); for (const QString& cookie_key : qAsConst(keys)) { QByteArray encoded = sett->password(GROUP(Cookies), cookie_key, {}).toByteArray(); @@ -85,10 +87,7 @@ void CookieJar::loadCookies() { if (!cookie.isEmpty()) { if (!insertCookieInternal(cookie.at(0), true, false)) { - qCriticalNN << LOGSEC_NETWORK - << "Failed to load cookie" - << QUOTE_W_SPACE(cookie_key) - << "from settings."; + qCriticalNN << LOGSEC_NETWORK << "Failed to load cookie" << QUOTE_W_SPACE(cookie_key) << "from settings."; sett->remove(Cookies::ID, cookie_key); } } @@ -181,13 +180,27 @@ bool CookieJar::deleteCookieInternal(const QNetworkCookie& cookie, bool notify_o } bool CookieJar::insertCookie(const QNetworkCookie& cookie) { - return insertCookieInternal(cookie, false, true); + if (m_ignoreAllCookies) { + return {}; + } + else { + return insertCookieInternal(cookie, false, true); + } } bool CookieJar::deleteCookie(const QNetworkCookie& cookie) { return deleteCookieInternal(cookie, false); } +void CookieJar::updateSettings() { + m_ignoreAllCookies = qApp->settings()->value(GROUP(Network), SETTING(Network::IgnoreAllCookies)).toBool(); + + if (m_ignoreAllCookies) { + setAllCookies({}); + qApp->settings()->remove(GROUP(Cookies)); + } +} + bool CookieJar::updateCookie(const QNetworkCookie& cookie) { return updateCookieInternal(cookie, false); } diff --git a/src/librssguard/network-web/cookiejar.h b/src/librssguard/network-web/cookiejar.h index abfcc44d9..59f97e4ad 100644 --- a/src/librssguard/network-web/cookiejar.h +++ b/src/librssguard/network-web/cookiejar.h @@ -19,6 +19,8 @@ class CookieJar : public QNetworkCookieJar { virtual bool updateCookie(const QNetworkCookie& cookie); virtual bool deleteCookie(const QNetworkCookie& cookie); + void updateSettings(); + public: static QList extractCookiesFromUrl(const QString& url); @@ -32,8 +34,10 @@ class CookieJar : public QNetworkCookieJar { private: #if defined(USE_WEBENGINE) - QWebEngineCookieStore * m_webEngineCookies; + QWebEngineCookieStore* m_webEngineCookies; #endif + + bool m_ignoreAllCookies; }; #endif // COOKIEJAR_H