summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrea Diamantini <adjam7@gmail.com>2011-07-09 17:54:28 +0200
committerAndrea Diamantini <adjam7@gmail.com>2011-07-18 11:32:51 +0200
commitacad08fb9884541431030a851d587c25d7e9acf0 (patch)
treec6744e7733ee0c7a10eafda37c08383d688f30dd
parentNew SSL Widget implementation (diff)
downloadrekonq-acad08fb9884541431030a851d587c25d7e9acf0.tar.xz
Improving SSL Widget and Dialog
While the widget "copies" and "rethink" Google Chrome actual one, the dialog has been implemented starting from the comparison between the ones we have in KDE, Google Chrome's and Firefox's. I have to start from somewhere...
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/sslinfo.ui283
-rw-r--r--src/sslinfodialog.cpp122
-rw-r--r--src/sslinfodialog.h71
-rw-r--r--src/sslinfodialog_p.h107
-rw-r--r--src/urlbar/sslwidget.cpp40
-rw-r--r--src/urlbar/sslwidget.h5
7 files changed, 520 insertions, 110 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 10d5b92b..fd946168 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -23,6 +23,7 @@ SET( rekonq_KDEINIT_SRCS
previewselectorbar.cpp
protocolhandler.cpp
sessionmanager.cpp
+ sslinfodialog.cpp
tabpreviewpopup.cpp
tabbar.cpp
tabhighlighteffect.cpp
@@ -99,6 +100,7 @@ KDE4_ADD_UI_FILES( rekonq_KDEINIT_SRCS
settings/settings_webkit.ui
settings/settings_adblock.ui
cleardata.ui
+ sslinfo.ui
useragent/useragentsettings.ui
)
diff --git a/src/sslinfo.ui b/src/sslinfo.ui
new file mode 100644
index 00000000..97ca69d0
--- /dev/null
+++ b/src/sslinfo.ui
@@ -0,0 +1,283 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>SslInfo</class>
+ <widget class="QWidget" name="Form">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>460</width>
+ <height>432</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&lt;h2&gt;Certificate Information&lt;/h2&gt;</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QComboBox" name="comboBox"/>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string/>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QLabel" name="label_20">
+ <property name="text">
+ <string>&lt;h4&gt;Issued To:&lt;/h4&gt;</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_6">
+ <property name="text">
+ <string>Common Name (CN):</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="subjectCN">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_8">
+ <property name="text">
+ <string>Organization (O):</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLabel" name="subjectO">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Organizational Unit (OU):</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLabel" name="subjectOU">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Serial Number:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QLabel" name="subjectSN">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <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="label_21">
+ <property name="text">
+ <string>&lt;h4&gt;Issued By:&lt;/h4&gt;</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_10">
+ <property name="text">
+ <string>Common Name (CN):</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="issuerCN">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_12">
+ <property name="text">
+ <string>Organization (O):</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_16">
+ <property name="text">
+ <string>Organizational Unit (OU):</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLabel" name="issuerOU">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLabel" name="issuerO">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="verticalSpacer_2">
+ <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="label_22">
+ <property name="text">
+ <string>&lt;h4&gt;Validity Period:&lt;/h4&gt;</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QGridLayout" name="gridLayout_3">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_14">
+ <property name="text">
+ <string>Issued on:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="issuedOn">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_18">
+ <property name="text">
+ <string>Expires on:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLabel" name="expiresOn">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="verticalSpacer_3">
+ <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="label_23">
+ <property name="text">
+ <string>&lt;h4&gt;FingerPrints:&lt;/h4&gt;</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QGridLayout" name="gridLayout_5">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_36">
+ <property name="text">
+ <string>SHA-256 FingerPrints:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="sha256">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_38">
+ <property name="text">
+ <string>SHA-1 FingerPrints:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLabel" name="sha1">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/sslinfodialog.cpp b/src/sslinfodialog.cpp
new file mode 100644
index 00000000..67fc753d
--- /dev/null
+++ b/src/sslinfodialog.cpp
@@ -0,0 +1,122 @@
+/* ============================================================
+*
+* This file is a part of the rekonq project
+*
+* Copyright (C) 2011 by Andrea Diamantini <adjam7 at gmail dot com>
+*
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License as
+* published by the Free Software Foundation; either version 2 of
+* the License or (at your option) version 3 or any later version
+* accepted by the membership of KDE e.V. (or its successor approved
+* by the membership of KDE e.V.), which shall act as a proxy
+* defined in Section 14 of version 3 of the license.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+* ============================================================ */
+
+
+// Self Includes
+#include "sslinfodialog.h"
+#include "sslinfodialog.moc"
+
+#include <KFileDialog>
+
+#include <QtGui/QFrame>
+#include <QtCore/QDate>
+#include <QtCore/QFile>
+#include <QtGui/QLabel>
+#include <QtGui/QLayout>
+#include <QtCore/Q_PID>
+#include <QtNetwork/QSslCertificate>
+
+#include <QFormLayout>
+
+#include <kglobal.h>
+#include <klocale.h>
+
+
+SslInfoDialog::SslInfoDialog(const QString &host, const WebSslInfo &info, QWidget *parent)
+ : KDialog(parent)
+ , m_host(host)
+ , m_info(info)
+{
+ setCaption(i18n("Rekonq SSL Information"));
+ setAttribute(Qt::WA_DeleteOnClose);
+
+ setMinimumWidth(300);
+
+ setButtons(KDialog::User1 | KDialog::Close);
+
+ setButtonGuiItem(User1, KGuiItem(i18n("Export"), "view-certificate-export") );
+ connect(this, SIGNAL(user1Clicked()), this, SLOT(exportCert()));
+
+ ui.setupUi(mainWidget());
+
+ // ------------------------------------------------
+ QList<QSslCertificate> caList = m_info.certificateChain();
+
+ Q_FOREACH(const QSslCertificate &cert, caList)
+ {
+ ui.comboBox->addItem( cert.subjectInfo(QSslCertificate::CommonName) );
+ }
+ connect(ui.comboBox, SIGNAL(activated(int)), this, SLOT(displayFromChain(int)));
+
+ QSslCertificate subjectCert = caList.first();
+
+ showCertificateInfo(subjectCert);
+}
+
+
+void SslInfoDialog::showCertificateInfo(QSslCertificate subjectCert)
+{
+ ui.subjectCN->setText( subjectCert.subjectInfo(QSslCertificate::CommonName) );
+ ui.subjectO->setText( subjectCert.subjectInfo(QSslCertificate::Organization) );
+ ui.subjectOU->setText( subjectCert.subjectInfo(QSslCertificate::OrganizationalUnitName) );
+ ui.subjectSN->setText( subjectCert.serialNumber().toHex() );
+
+ ui.issuerCN->setText( subjectCert.issuerInfo(QSslCertificate::CommonName) );
+ ui.issuerO->setText( subjectCert.issuerInfo(QSslCertificate::Organization) );
+ ui.issuerOU->setText( subjectCert.issuerInfo(QSslCertificate::OrganizationalUnitName) );
+
+ ui.issuedOn->setText( subjectCert.effectiveDate().date().toString(Qt::SystemLocaleShortDate) );
+ ui.expiresOn->setText( subjectCert.expiryDate().date().toString(Qt::SystemLocaleShortDate) );
+ ui.sha256->setText( subjectCert.digest(QCryptographicHash::Md5).toHex() );
+ ui.sha1->setText( subjectCert.digest(QCryptographicHash::Sha1).toHex() );
+
+}
+
+
+void SslInfoDialog::displayFromChain(int i)
+{
+ QList<QSslCertificate> caList = m_info.certificateChain();
+ QSslCertificate cert = caList.at(i);
+ showCertificateInfo(cert);
+}
+
+
+void SslInfoDialog::exportCert()
+{
+ QSslCertificate cert = m_info.certificateChain().at( ui.comboBox->currentIndex() );
+
+ QString name = cert.subjectInfo(QSslCertificate::CommonName) + QL1S(".pem");
+
+ QString certPath = KFileDialog::getSaveFileName(name, QString(), this);
+
+ kDebug() << certPath;
+
+ QFile file(certPath);
+ if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
+ return;
+
+ QTextStream out(&file);
+ out << cert.toPem();
+}
diff --git a/src/sslinfodialog.h b/src/sslinfodialog.h
new file mode 100644
index 00000000..c9b4c106
--- /dev/null
+++ b/src/sslinfodialog.h
@@ -0,0 +1,71 @@
+/* ============================================================
+*
+* This file is a part of the rekonq project
+*
+* Copyright (C) 2011 by Andrea Diamantini <adjam7 at gmail dot com>
+*
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License as
+* published by the Free Software Foundation; either version 2 of
+* the License or (at your option) version 3 or any later version
+* accepted by the membership of KDE e.V. (or its successor approved
+* by the membership of KDE e.V.), which shall act as a proxy
+* defined in Section 14 of version 3 of the license.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*
+* ============================================================ */
+
+
+#ifndef SSL_INFO_DIALOG_H
+#define SSL_INFO_DIALOG_H
+
+#include "rekonq_defines.h"
+
+#include "websslinfo.h"
+
+// Ui Includes
+#include "ui_sslinfo.h"
+
+#include <KDE/KDialog>
+
+#include <QList>
+
+class QSslCertificate;
+class QString;
+
+/**
+ * Rekonq SSL Information Dialog
+ *
+ * This class creates a dialog that can be used to display information about
+ * an SSL session.
+ *
+ */
+class SslInfoDialog : public KDialog
+{
+ Q_OBJECT
+
+public:
+ explicit SslInfoDialog(const QString &host, const WebSslInfo &info, QWidget *parent = 0);
+
+private Q_SLOTS:
+ void displayFromChain(int);
+ void exportCert();
+
+private:
+ void showCertificateInfo(QSslCertificate);
+
+ QString m_host;
+ WebSslInfo m_info;
+
+ Ui::SslInfo ui;
+};
+
+#endif // SSL_INFO_DIALOG_H
diff --git a/src/sslinfodialog_p.h b/src/sslinfodialog_p.h
deleted file mode 100644
index 72f16791..00000000
--- a/src/sslinfodialog_p.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/* This file is part of the KDE project
- *
- * Copyright (C) 2000-2003 George Staikos <staikos@kde.org>
- * Copyright (C) 2000 Malte Starostik <malte@kde.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-
-#ifndef SSLINFODIALOG_P_H
-#define SSLINFODIALOG_P_H
-
-#include <kdemacros.h>
-
-#include <KDE/KDialog>
-#include <ktcpsocket.h>
-
-// NOTE: We need a copy of this header file is needed here because it
-// is never installed by default by KIO.
-
-/**
- * KDE SSL Information Dialog
- *
- * This class creates a dialog that can be used to display information about
- * an SSL session.
- *
- * There are NO GUARANTEES that KSslInfoDialog will remain binary compatible/
- * Contact staikos@kde.org for details if needed.
- *
- * @author George Staikos <staikos@kde.org>
- * @see KSSL
- * @short KDE SSL Information Dialog
- */
-class KDE_EXPORT KSslInfoDialog : public KDialog
-{
- Q_OBJECT
-
-public:
- /**
- * Construct a KSSL Information Dialog
- *
- * @param parent the parent widget
- */
- explicit KSslInfoDialog(QWidget *parent = 0);
-
- /**
- * Destroy this dialog
- */
- virtual ~KSslInfoDialog();
-
- /**
- * Tell the dialog if the connection has portions that may not be
- * secure (ie. a mixture of secure and insecure frames)
- *
- * @param isIt true if security is in question
- */
- void setSecurityInQuestion(bool isIt);
-
- /**
- * Set information to display about the SSL connection.
- *
- * @param certificateChain the certificate chain leading from the certificate
- * authority to the peer.
- * @param ip the ip of the remote host
- * @param host the remote hostname
- * @param sslProtocol the version of SSL in use (SSLv2, SSLv3, TLSv1)
- * @param cipher the cipher in use
- * @param usedBits the used bits of the key
- * @param bits the key size of the cipher in use
- * @param validationErrors errors validating the certificates, if any
- */
- void setSslInfo(const QList<QSslCertificate> &certificateChain,
- const QString &ip, const QString &host,
- const QString &sslProtocol, const QString &cipher,
- int usedBits, int bits,
- const QList<QList<KSslError::Error> > &validationErrors);
-
- void setMainPartEncrypted(bool);
- void setAuxiliaryPartsEncrypted(bool);
-
- static QList<QList<KSslError::Error> > errorsFromString(const QString &s);
-
-private Q_SLOTS:
- void launchConfig();
- void displayFromChain(int);
-
-private:
- void updateWhichPartsEncrypted();
-
- class KSslInfoDialogPrivate;
- KSslInfoDialogPrivate* const d;
-};
-
-#endif // SSLINFODIALOG_P_H
diff --git a/src/urlbar/sslwidget.cpp b/src/urlbar/sslwidget.cpp
index 79194c6f..40532cb3 100644
--- a/src/urlbar/sslwidget.cpp
+++ b/src/urlbar/sslwidget.cpp
@@ -31,6 +31,7 @@
// Local includes
#include "application.h"
#include "historymanager.h"
+#include "sslinfodialog.h"
// KDE Includes
@@ -43,6 +44,8 @@
SSLWidget::SSLWidget(const QUrl &url, const WebSslInfo &info, QWidget *parent)
: QMenu(parent)
+ , m_url(url)
+ , m_info(info)
{
setAttribute(Qt::WA_DeleteOnClose);
setMinimumWidth(400);
@@ -54,8 +57,9 @@ SSLWidget::SSLWidget(const QUrl &url, const WebSslInfo &info, QWidget *parent)
QLabel *label;
+ // ------------------------------------------------------------------------------------------------------------------
label = new QLabel(this);
- label->setText( QL1S("<h4>") + url.host() + QL1S("</h4>") );
+ label->setText( i18n("<h4>Identity</h4>") );
layout->addRow(label);
if (firstCA.isNull())
@@ -81,7 +85,13 @@ SSLWidget::SSLWidget(const QUrl &url, const WebSslInfo &info, QWidget *parent)
}
label = new QLabel(this);
- label->setText( QL1S("<hr /><h4>") + i18n("Issued to") + QL1S("</h4>") ); // ----------------------------------------------- //
+ label->setText("<a href=\"moresslinfos\">Certificate Information</a>");
+ connect(label, SIGNAL(linkActivated(const QString &)), this, SLOT(showMoreSslInfos(const QString &)));
+ layout->addRow(label);
+
+ // ------------------------------------------------------------------------------------------------------------------
+ label = new QLabel(this);
+ label->setText( QL1S("<hr /><h4>Encryption</h4>") ); // ----------------------------------------------- //
layout->addRow(label);
label = new QLabel(this);
@@ -145,7 +155,7 @@ SSLWidget::SSLWidget(const QUrl &url, const WebSslInfo &info, QWidget *parent)
// ------------------------------------------------------------------------------------------------------------------
label = new QLabel(this);
- label->setText( QL1S("<hr /><h4>") + i18n("Site Information") + QL1S("</h4>") );
+ label->setText( i18n("<hr /><h4>Site Information</h4>") );
layout->addRow(label);
label = new QLabel(this);
@@ -180,3 +190,27 @@ void SSLWidget::accept()
close();
}
+
+
+void SSLWidget::showMoreSslInfos(const QString &)
+{
+ // FIXME: show it every time???
+ if (m_info.isValid())
+ {
+ QPointer<SslInfoDialog> dlg = new SslInfoDialog(m_url.host(), m_info, this);
+// dlg->setSslInfo(m_info.certificateChain(),
+// m_info.peerAddress().toString(),
+// m_host,
+// m_info.protocol(),
+// m_info.ciphers(),
+// m_info.usedChiperBits(),
+// m_info.supportedChiperBits()
+// );
+
+ dlg->exec();
+ delete dlg;
+
+ return;
+ }
+
+}
diff --git a/src/urlbar/sslwidget.h b/src/urlbar/sslwidget.h
index 4e36d364..00478f59 100644
--- a/src/urlbar/sslwidget.h
+++ b/src/urlbar/sslwidget.h
@@ -46,7 +46,12 @@ public:
void showAt(const QPoint &pos);
private Q_SLOTS:
+ void showMoreSslInfos(const QString &);
void accept();
+
+private:
+ QUrl m_url;
+ WebSslInfo m_info;
};
#endif // SSL_WIDGET_H