From 9b232af3abc5c07f98863d5307fed84f495775f5 Mon Sep 17 00:00:00 2001 From: nowrep Date: Fri, 4 Mar 2011 15:15:21 +0100 Subject: [PATCH] Introducing SSL Exceptions Manager + option to ignore all ssl warnings --- src/network/networkmanager.cpp | 6 ++++ src/network/networkmanager.h | 1 + src/preferences/sslmanager.cpp | 64 +++++++++++++++++++++++++++++++--- src/preferences/sslmanager.h | 13 +++++-- 4 files changed, 78 insertions(+), 6 deletions(-) diff --git a/src/network/networkmanager.cpp b/src/network/networkmanager.cpp index d82c261aa..132322806 100644 --- a/src/network/networkmanager.cpp +++ b/src/network/networkmanager.cpp @@ -24,6 +24,7 @@ NetworkManager::NetworkManager(QupZilla* mainClass, QObject *parent) : NetworkManagerProxy(mainClass, parent) ,p_QupZilla(mainClass) + ,m_ignoreAllWarnings(false) { connect(this, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), this, SLOT(authentication(QNetworkReply*, QAuthenticator* ))); connect(this, SIGNAL(sslErrors(QNetworkReply*,QList)), this, SLOT(sslError(QNetworkReply*,QList))); @@ -42,11 +43,16 @@ void NetworkManager::loadSettings() m_diskCache->setMaximumCacheSize(settings.value("MaximumCacheSize",50).toInt() * 1024*1024); //MegaBytes setCache(m_diskCache); } + m_ignoreAllWarnings = settings.value("IgnoreAllSSLWarnings", false).toBool(); settings.endGroup(); } void NetworkManager::sslError(QNetworkReply *reply, QList errors) { + if (m_ignoreAllWarnings) { + reply->ignoreSslErrors(errors); + return; + } QString title = tr("SSL Certificate Error!"); QString text1 = tr("The page you trying to access has following errors in SSL Certificate:"); diff --git a/src/network/networkmanager.h b/src/network/networkmanager.h index 3dad377d6..930e674d1 100644 --- a/src/network/networkmanager.h +++ b/src/network/networkmanager.h @@ -63,6 +63,7 @@ private: QList m_certExceptions; QNetworkDiskCache* m_diskCache; + bool m_ignoreAllWarnings; }; #endif // NETWORKMANAGER_H diff --git a/src/preferences/sslmanager.cpp b/src/preferences/sslmanager.cpp index 01320b6c2..f226db523 100644 --- a/src/preferences/sslmanager.cpp +++ b/src/preferences/sslmanager.cpp @@ -26,13 +26,69 @@ SSLManager::SSLManager(QWidget *parent) : { setAttribute(Qt::WA_DeleteOnClose); ui->setupUi(this); - QList certs = mApp->networkManager()->getCertExceptions(); - foreach (QSslCertificate cert, certs) { + m_certs = mApp->networkManager()->getCertExceptions(); + foreach (QSslCertificate cert, m_certs) { QListWidgetItem* item = new QListWidgetItem(ui->list); - item->setText(cert.serialNumber()); - item->setData(0, certs.indexOf(cert)); + item->setText( cert.subjectInfo(QSslCertificate::Organization) + " " + cert.subjectInfo(QSslCertificate::CommonName) ); + item->setWhatsThis(QString::number(m_certs.indexOf(cert))); ui->list->addItem(item); } + + connect(ui->list, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(showCertificateInfo())); + connect(ui->infoButton, SIGNAL(clicked()), this, SLOT(showCertificateInfo())); + connect(ui->deleteButton, SIGNAL(clicked()), this, SLOT(deleteCertificate())); + connect(ui->ignoreAll, SIGNAL(clicked(bool)), this, SLOT(ignoreAll(bool))); + + QSettings settings(mApp->getActiveProfil()+"settings.ini", QSettings::IniFormat); + settings.beginGroup("Web-Browser-Settings"); + ui->ignoreAll->setChecked( settings.value("IgnoreAllSSLWarnings", false).toBool() ); + settings.endGroup(); +} + +void SSLManager::showCertificateInfo() +{ + QListWidgetItem* item = ui->list->currentItem(); + if (!item) + return; + + QSslCertificate cert = m_certs.at(item->whatsThis().toInt()); + QStringList actions; + actions.append(tr("Organization: ") + cert.subjectInfo(QSslCertificate::Organization)); + actions.append(tr("Domain Name: ") + cert.subjectInfo(QSslCertificate::CommonName)); + actions.append(tr("Locality Name: ") + cert.subjectInfo(QSslCertificate::LocalityName)); + actions.append(tr("Country Name: ") + cert.subjectInfo(QSslCertificate::CountryName)); + actions.append(tr("Verified by: ") + cert.subjectInfo(QSslCertificate::OrganizationalUnitName)); + actions.append(tr("Expiration Date: ") + cert.expiryDate().toString("hh:mm:ss dddd d. MMMM yyyy")); + + QString message = QString(QLatin1String("
  • %3
")).arg(actions.join(QLatin1String("
  • "))); + + QMessageBox mes; + mes.setIcon(QMessageBox::Information); + mes.setWindowTitle(tr("SSL Certificate Informations")); + mes.setText(message); + mes.setDetailedText(cert.toPem()); + mes.exec(); +} + +void SSLManager::deleteCertificate() +{ + QListWidgetItem* item = ui->list->currentItem(); + if (!item) + return; + + QSslCertificate cert = m_certs.at(item->whatsThis().toInt()); + m_certs.removeOne(cert); + mApp->networkManager()->setCertExceptions(m_certs); + delete item; +} + +void SSLManager::ignoreAll(bool state) +{ + QSettings settings(mApp->getActiveProfil()+"settings.ini", QSettings::IniFormat); + settings.beginGroup("Web-Browser-Settings"); + settings.setValue("IgnoreAllSSLWarnings", state); + settings.endGroup(); + mApp->networkManager()->loadSettings(); } SSLManager::~SSLManager() diff --git a/src/preferences/sslmanager.h b/src/preferences/sslmanager.h index 1527eb487..8d780a61d 100644 --- a/src/preferences/sslmanager.h +++ b/src/preferences/sslmanager.h @@ -15,12 +15,15 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . * ============================================================ */ - - #ifndef SSLMANAGER_H #define SSLMANAGER_H #include +#include +#include +#include +#include +#include namespace Ui { class SSLManager; @@ -34,8 +37,14 @@ public: explicit SSLManager(QWidget *parent = 0); ~SSLManager(); +private slots: + void showCertificateInfo(); + void deleteCertificate(); + void ignoreAll(bool state); + private: Ui::SSLManager *ui; + QList m_certs; }; #endif // SSLMANAGER_H