diff options
-rw-r--r-- | src/sslinfo.ui | 69 | ||||
-rw-r--r-- | src/sslinfodialog.cpp | 74 | ||||
-rw-r--r-- | src/sslinfodialog.h | 6 | ||||
-rw-r--r-- | src/urlbar/sslwidget.cpp | 34 |
4 files changed, 137 insertions, 46 deletions
diff --git a/src/sslinfo.ui b/src/sslinfo.ui index e31216b0..84d3f4b2 100644 --- a/src/sslinfo.ui +++ b/src/sslinfo.ui @@ -6,8 +6,8 @@ <rect> <x>0</x> <y>0</y> - <width>460</width> - <height>432</height> + <width>427</width> + <height>481</height> </rect> </property> <property name="windowTitle"> @@ -28,7 +28,51 @@ </widget> </item> <item> - <widget class="QComboBox" name="comboBox"/> + <spacer name="verticalSpacer_6"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QLabel" name="label_4"> + <property name="text"> + <string>Certificate Chain:</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="comboBox"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + </layout> + </item> + <item> + <spacer name="verticalSpacer_4"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> </item> <item> <widget class="QLabel" name="certInfoLabel"> @@ -38,6 +82,19 @@ </widget> </item> <item> + <spacer name="verticalSpacer_5"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + <item> <widget class="QGroupBox" name="groupBox"> <property name="title"> <string/> @@ -118,7 +175,7 @@ <property name="sizeHint" stdset="0"> <size> <width>20</width> - <height>40</height> + <height>20</height> </size> </property> </spacer> @@ -184,7 +241,7 @@ <property name="sizeHint" stdset="0"> <size> <width>20</width> - <height>40</height> + <height>20</height> </size> </property> </spacer> @@ -236,7 +293,7 @@ <property name="sizeHint" stdset="0"> <size> <width>20</width> - <height>40</height> + <height>20</height> </size> </property> </spacer> diff --git a/src/sslinfodialog.cpp b/src/sslinfodialog.cpp index 376480af..dc55e95a 100644 --- a/src/sslinfodialog.cpp +++ b/src/sslinfodialog.cpp @@ -70,32 +70,22 @@ SslInfoDialog::SslInfoDialog(const QString &host, const WebSslInfo &info, QWidge ui.comboBox->addItem( cert.subjectInfo(QSslCertificate::CommonName) ); } connect(ui.comboBox, SIGNAL(activated(int)), this, SLOT(displayFromChain(int))); - - QSslCertificate subjectCert = caList.first(); - - if (subjectCert.isValid()) - showCertificateInfo(subjectCert, i18n("The Certificate is Valid!") ); - else - { - QString errors; - QStringList sl = info.certificateErrors().split("\t", QString::SkipEmptyParts); - Q_FOREACH(const QString &s, sl) - { - bool didConvert; - QSslError::SslError error = static_cast<QSslError::SslError>(s.trimmed().toInt(&didConvert)); - if (didConvert) - { - errors += QSslError(error).errorString() + QL1S("\n"); - } - } - showCertificateInfo(subjectCert, i18n("The certificate for this site is NOT valid for the following reasons:\n%1", errors) ); - } + + displayFromChain(0); } -void SslInfoDialog::showCertificateInfo(QSslCertificate subjectCert, const QString &certErrors) +void SslInfoDialog::showCertificateInfo(QSslCertificate subjectCert, const QStringList &certErrors) { - ui.certInfoLabel->setText(certErrors); + QStringList sl = certErrors; + QString c = sl.takeFirst(); + c += QL1S("<ul>"); + Q_FOREACH(const QString &s, sl) + { + c += QL1S("<li>") + s + QL1S("</li>"); + } + c += QL1S("</ul>"); + ui.certInfoLabel->setText(c); ui.subjectCN->setText( subjectCert.subjectInfo(QSslCertificate::CommonName) ); ui.subjectO->setText( subjectCert.subjectInfo(QSslCertificate::Organization) ); @@ -118,7 +108,19 @@ void SslInfoDialog::displayFromChain(int i) { QList<QSslCertificate> caList = m_info.certificateChain(); QSslCertificate cert = caList.at(i); - showCertificateInfo(cert, QString()); + + if (cert.isValid()) + { + QStringList certInfo; + certInfo << i18n("The Certificate is Valid!"); + showCertificateInfo(cert, certInfo ); + } + else + { + QStringList errors = SslInfoDialog::errorsFromString(m_info.certificateErrors()).at(i); + errors.prepend( i18n("The certificate for this site is NOT valid for the following reasons:") ); + showCertificateInfo(cert, errors ); + } } @@ -139,3 +141,29 @@ void SslInfoDialog::exportCert() QTextStream out(&file); out << cert.toPem(); } + + +// static ------------------------------------------------------------------------------------------- +QList<QStringList> SslInfoDialog::errorsFromString(const QString &s) +{ + QList<QStringList> resultList; + + QStringList sl1 = s.split('\n', QString::KeepEmptyParts); + + Q_FOREACH(const QString &certErrors, sl1) + { + QStringList errors; + QStringList sl = certErrors.split("\t", QString::SkipEmptyParts); + Q_FOREACH(const QString &s, sl) + { + bool didConvert; + QSslError::SslError error = static_cast<QSslError::SslError>(s.trimmed().toInt(&didConvert)); + if (didConvert) + { + errors << QSslError(error).errorString(); + } + } + resultList << errors; + } + return resultList; +} diff --git a/src/sslinfodialog.h b/src/sslinfodialog.h index bed5a8b7..c993e134 100644 --- a/src/sslinfodialog.h +++ b/src/sslinfodialog.h @@ -55,12 +55,14 @@ class SslInfoDialog : public KDialog public: explicit SslInfoDialog(const QString &host, const WebSslInfo &info, QWidget *parent = 0); + static QList<QStringList> errorsFromString(const QString &s); + private Q_SLOTS: void displayFromChain(int); void exportCert(); - + private: - void showCertificateInfo(QSslCertificate, const QString &certErrors); + void showCertificateInfo(QSslCertificate, const QStringList &certErrors); QString m_host; WebSslInfo m_info; diff --git a/src/urlbar/sslwidget.cpp b/src/urlbar/sslwidget.cpp index 8507aa61..b1819700 100644 --- a/src/urlbar/sslwidget.cpp +++ b/src/urlbar/sslwidget.cpp @@ -33,9 +33,6 @@ #include "historymanager.h" #include "sslinfodialog.h" -// KDE Includes -#include <QSslError> - // Qt Includes #include <QtGui/QDialogButtonBox> #include <QtGui/QGridLayout> @@ -90,22 +87,29 @@ SSLWidget::SSLWidget(const QUrl &url, const WebSslInfo &info, QWidget *parent) } else { - QString errors; - QStringList sl = m_info.certificateErrors().split("\t", QString::SkipEmptyParts); - Q_FOREACH(const QString &s, sl) + label = new QLabel(this); + label->setWordWrap(true); + + QList<QStringList> errorList = SslInfoDialog::errorsFromString(m_info.certificateErrors()); + if (errorList.at(0).isEmpty()) + { + label->setText( i18n("The certificate for this site is valid, but some on the certificate chain are not!") ); + imageLabel->setPixmap(KIcon("security-medium").pixmap(32)); + } + else { - bool didConvert; - QSslError::SslError error = static_cast<QSslError::SslError>(s.trimmed().toInt(&didConvert)); - if (didConvert) + QStringList sl = errorList.at(0); + QString c = QL1S("<ul>"); + Q_FOREACH(const QString &s, sl) { - errors += QSslError(error).errorString() + QL1S("\n"); + c += QL1S("<li>") + s + QL1S("</li>"); } + c += QL1S("</ul>"); + + label->setText( i18n("The certificate for this site is NOT valid, for the following reasons:\n%1", c) ); + label->setTextFormat(Qt::RichText); + imageLabel->setPixmap(KIcon("security-low").pixmap(32)); } - label = new QLabel(this); - label->setWordWrap(true); - label->setText( i18n("The certificate for this site is NOT valid for the following reasons:\n%1", errors) ); - - imageLabel->setPixmap(KIcon("security-medium").pixmap(32)); } } |