summaryrefslogtreecommitdiff
path: root/src/urlbar/sslwidget.cpp
diff options
context:
space:
mode:
authorAndrea Diamantini <adjam7@gmail.com>2012-08-01 17:46:50 +0200
committerAndrea Diamantini <adjam7@gmail.com>2012-12-10 02:48:04 +0100
commitd2fdce46263a6cee66c4adee9ea7366d085a1729 (patch)
treec50747e1d05bc43dddd1fef2b651a6f1a37cd81a /src/urlbar/sslwidget.cpp
parentRemove a lot of application calls by refactoring code (diff)
downloadrekonq-d2fdce46263a6cee66c4adee9ea7366d085a1729.tar.xz
Urlbar, first code ported to the new API
Diffstat (limited to 'src/urlbar/sslwidget.cpp')
-rw-r--r--src/urlbar/sslwidget.cpp251
1 files changed, 251 insertions, 0 deletions
diff --git a/src/urlbar/sslwidget.cpp b/src/urlbar/sslwidget.cpp
new file mode 100644
index 00000000..a9d3e9b6
--- /dev/null
+++ b/src/urlbar/sslwidget.cpp
@@ -0,0 +1,251 @@
+/* ============================================================
+*
+* This file is a part of the rekonq project
+*
+* Copyright (C) 2011-2012 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/>.
+*
+* ============================================================ */
+
+
+// Auto Includes
+#include "sslwidget.h"
+#include "sslwidget.moc"
+
+// Local includes
+#include "historymanager.h"
+#include "sslinfodialog.h"
+
+// Qt Includes
+#include <QPointer>
+
+#include <QDialogButtonBox>
+#include <QGridLayout>
+#include <QLabel>
+#include <QPushButton>
+#include <QTextDocument>
+
+
+SSLWidget::SSLWidget(const QUrl &url, const WebSslInfo &info, QWidget *parent)
+ : QMenu(parent)
+ , m_url(url)
+ , m_info(info)
+{
+ setAttribute(Qt::WA_DeleteOnClose);
+ setMinimumWidth(400);
+
+ QList<QSslCertificate> certList = m_info.certificateChain();
+ QSslCertificate cert;
+ if (!certList.isEmpty())
+ cert = certList.first();
+
+ QList<QStringList> certErrorList = SslInfoDialog::errorsFromString(m_info.certificateErrors());
+ QStringList firstCertErrorList;
+ if (!certErrorList.isEmpty())
+ firstCertErrorList = certErrorList.first();
+
+ QGridLayout *layout = new QGridLayout(this);
+
+ QLabel *label;
+ QLabel *imageLabel;
+
+ int rows = 0;
+ // ------------------------------------------------------------------------------------------------------
+ imageLabel = new QLabel(this);
+ layout->addWidget(imageLabel, rows , 0, Qt::AlignCenter);
+
+ label = new QLabel(this);
+ label->setWordWrap(true);
+ label->setText(i18n("Identity"));
+ QFont f1 = label->font();
+ f1.setBold(true);
+ label->setFont(f1);
+ layout->addWidget(label, rows++, 1);
+
+ label = new QLabel(this);
+ label->setWordWrap(true);
+ if (cert.isNull())
+ {
+ label->setText(i18n("Warning: this site is NOT carrying a certificate."));
+ imageLabel->setPixmap(KIcon("security-low").pixmap(32));
+ layout->addWidget(label, rows++, 1);
+ }
+ else
+ {
+ if (cert.isValid() && firstCertErrorList.isEmpty())
+ {
+ label->setText(i18n("The certificate for this site is valid and has been verified by:\n%1.",
+ Qt::escape(cert.issuerInfo(QSslCertificate::CommonName))));
+
+ imageLabel->setPixmap(KIcon("security-high").pixmap(32));
+ }
+ else
+ {
+ QString c = QL1S("<ul>");
+ Q_FOREACH(const QString & s, firstCertErrorList)
+ {
+ 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));
+ }
+
+ layout->addWidget(label, rows++, 1);
+
+ label = new QLabel(this);
+ label->setWordWrap(true);
+ label->setText(QL1S("<a href=\"moresslinfos\">") + i18n("Certificate Information") + QL1S("</a>"));
+ connect(label, SIGNAL(linkActivated(QString)), this, SLOT(showMoreSslInfos(QString)));
+ layout->addWidget(label, rows++, 1);
+ }
+
+ // -------------------------------------------------------------------------------------------------------------
+ label = new QLabel(this);
+ label->setWordWrap(true);
+ label->setText(i18n("Encryption"));
+ QFont f2 = label->font();
+ f2.setBold(true);
+ label->setFont(f2);
+ layout->addWidget(label, rows, 1);
+
+ imageLabel = new QLabel(this);
+ layout->addWidget(imageLabel, rows++ , 0, Qt::AlignCenter);
+
+ QString ciph = m_info.ciphers();
+ if (ciph.isEmpty()) // NOTE: Can I verify encryption in another (better?) way?
+ {
+ label = new QLabel(this);
+ label->setWordWrap(true);
+ label->setText(i18n("Your connection to %1 is NOT encrypted.\n", m_url.host()));
+ layout->addWidget(label, rows++ , 1);
+
+ imageLabel->setPixmap(KIcon("security-low").pixmap(32));
+ }
+ else
+ {
+ label = new QLabel(this);
+ label->setWordWrap(true);
+ label->setText(i18n("Your connection to \"%1\" is encrypted.\n", m_url.host()));
+ layout->addWidget(label, rows++, 1);
+
+ QString vers = m_info.protocol();
+ QString sslVersion;
+ if (vers == QL1S("SSLv3"))
+ {
+ sslVersion = QL1S("SSL 3.0");
+ imageLabel->setPixmap(KIcon("security-high").pixmap(32));
+ }
+ else if (vers == QL1S("SSLv2"))
+ {
+ sslVersion = QL1S("SSL 2.0");
+ imageLabel->setPixmap(KIcon("security-low").pixmap(32));
+ }
+ else if (vers == QL1S("TLSv1"))
+ {
+ sslVersion = QL1S("TLS 1.0");
+ imageLabel->setPixmap(KIcon("security-high").pixmap(32));
+ }
+ else
+ {
+ sslVersion = i18n("Unknown");
+ imageLabel->setPixmap(KIcon("security-low").pixmap(32));
+ }
+
+ label = new QLabel(this);
+ label->setWordWrap(true);
+ label->setText(i18n("It uses protocol: %1.\n", sslVersion));
+ layout->addWidget(label, rows++, 1);
+
+ const QStringList cipherInfo = m_info.ciphers().split('\n', QString::SkipEmptyParts);
+ label = new QLabel(this);
+ label->setWordWrap(true);
+ label->setText(
+ i18n("It is encrypted using %1 at %2 bits, with %3 for message authentication and %4 with Auth %5 as key exchange mechanism.\n\n",
+ cipherInfo[0],
+ m_info.usedChiperBits(),
+ cipherInfo[3],
+ cipherInfo[2],
+ cipherInfo[1])
+ );
+ layout->addWidget(label, rows++, 1);
+
+ }
+
+ // ------------------------------------------------------------------------------------------------------------------
+ imageLabel = new QLabel(this);
+ layout->addWidget(imageLabel, rows , 0, Qt::AlignCenter);
+
+ label = new QLabel(this);
+ label->setWordWrap(true);
+ label->setText(i18n("Site Information"));
+ QFont f3 = label->font();
+ f3.setBold(true);
+ label->setFont(f3);
+ layout->addWidget(label, rows++, 1);
+
+ label = new QLabel(this);
+ label->setWordWrap(true);
+
+ QList<HistoryItem> hList = HistoryManager::self()->find(url.toString());
+ HistoryItem firstVisit = hList.isEmpty() ?
+ HistoryItem() :
+ hList.first() ;
+
+ if (firstVisit.visitCount == 1)
+ {
+ label->setText(i18n("It is your first time visiting this site."));
+ imageLabel->setPixmap(KIcon("security-medium").pixmap(32));
+ }
+ else
+ {
+ label->setText(i18n("You just visited this site.\nYour first visit was on %1.\n", firstVisit.firstDateTimeVisit.toString()));
+ imageLabel->setPixmap(KIcon("security-high").pixmap(32));
+ }
+ layout->addWidget(label, rows++, 1);
+
+}
+
+
+void SSLWidget::showAt(const QPoint &pos)
+{
+ adjustSize();
+
+ QPoint p(pos.x() - width(), pos.y() + 10);
+ move(p);
+ show();
+}
+
+
+void SSLWidget::accept()
+{
+ close();
+}
+
+
+void SSLWidget::showMoreSslInfos(const QString &)
+{
+ QPointer<SslInfoDialog> dlg = new SslInfoDialog(m_url.host(), m_info, this);
+ dlg->exec();
+ delete dlg;
+
+ return;
+}