diff --git a/src/lib/network/networkmanager.cpp b/src/lib/network/networkmanager.cpp index ccc0a2f6f..a2e7026b3 100644 --- a/src/lib/network/networkmanager.cpp +++ b/src/lib/network/networkmanager.cpp @@ -78,8 +78,10 @@ bool NetworkManager::certificateError(const QWebEngineCertificateError &error, Q return false; } - if (m_ignoredSslErrors.contains(host) && m_ignoredSslErrors.value(host) == error.error()) + if ((m_ignoredSslErrors.contains(host) && m_ignoredSslErrors.value(host) == error.error()) + || m_ignoredSslHosts.contains(host)) { return true; + } QString title = tr("SSL Certificate Error!"); QString text1 = tr("The page you are trying to access has the following errors in the SSL certificate:"); @@ -93,7 +95,9 @@ bool NetworkManager::certificateError(const QWebEngineCertificateError &error, Q switch (dialog.result()) { case SslErrorDialog::Yes: - // TODO: Permanent exceptions + m_ignoredSslHosts.append(host); + return true; + case SslErrorDialog::OnlyForThisSession: m_ignoredSslErrors[host] = error.error(); return true; @@ -288,10 +292,19 @@ void NetworkManager::loadSettings() } m_urlInterceptor->loadSettings(); + + settings.beginGroup("Web-Browser-Settings"); + m_ignoredSslHosts = settings.value("IgnoredSslHosts", QStringList()).toStringList(); + settings.endGroup(); } void NetworkManager::shutdown() { + Settings settings; + settings.beginGroup("Web-Browser-Settings"); + settings.setValue("IgnoredSslHosts", m_ignoredSslHosts); + settings.endGroup(); + mApp->webProfile()->setUrlRequestInterceptor(nullptr); } diff --git a/src/lib/network/networkmanager.h b/src/lib/network/networkmanager.h index 668cecc05..db6f3d09f 100644 --- a/src/lib/network/networkmanager.h +++ b/src/lib/network/networkmanager.h @@ -58,6 +58,7 @@ private: ExtensionSchemeManager *m_extensionScheme; QHash m_ignoredSslErrors; QHash m_rejectedSslErrors; + QStringList m_ignoredSslHosts; }; #endif // NETWORKMANAGER_H diff --git a/src/lib/network/sslerrordialog.cpp b/src/lib/network/sslerrordialog.cpp index e6b63fcb2..2fbd6f366 100644 --- a/src/lib/network/sslerrordialog.cpp +++ b/src/lib/network/sslerrordialog.cpp @@ -28,8 +28,7 @@ SslErrorDialog::SslErrorDialog(QWidget* parent) { ui->setupUi(this); ui->icon->setPixmap(IconProvider::standardIcon(QStyle::SP_MessageBoxCritical).pixmap(52)); - // Disabled until there is reliable way to save certificate error - //ui->buttonBox->addButton(tr("Only for this session"), QDialogButtonBox::ApplyRole); + ui->buttonBox->addButton(tr("Only for this session"), QDialogButtonBox::ApplyRole); ui->buttonBox->button(QDialogButtonBox::No)->setFocus(); connect(ui->buttonBox, &QDialogButtonBox::clicked, this, &SslErrorDialog::buttonClicked);