From 133b8a7106b716937e24c7b47306ff8ac02efd6b Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Tue, 5 Jul 2011 00:35:41 +0200 Subject: Added SSL Widget, first version --- src/CMakeLists.txt | 1 + src/urlbar/sslwidget.cpp | 137 +++++++++++++++++++++++++++++++++++++++++++++++ src/urlbar/sslwidget.h | 52 ++++++++++++++++++ src/webpage.cpp | 45 ++++++++++++---- 4 files changed, 226 insertions(+), 9 deletions(-) create mode 100644 src/urlbar/sslwidget.cpp create mode 100644 src/urlbar/sslwidget.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index eae0f89c..10d5b92b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -73,6 +73,7 @@ SET( rekonq_KDEINIT_SRCS urlbar/urlresolver.cpp urlbar/listitem.cpp urlbar/rsswidget.cpp + urlbar/sslwidget.cpp urlbar/bookmarkwidget.cpp urlbar/webshortcutwidget.cpp #---------------------------------------- diff --git a/src/urlbar/sslwidget.cpp b/src/urlbar/sslwidget.cpp new file mode 100644 index 00000000..99e778c3 --- /dev/null +++ b/src/urlbar/sslwidget.cpp @@ -0,0 +1,137 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2011 by Andrea Diamantini +* +* +* 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 . +* +* ============================================================ */ + + +// Auto Includes +#include "sslwidget.h" +#include "sslwidget.moc" + +// Local includes +#include "application.h" +#include "iconmanager.h" +#include "mainwindow.h" +#include "webtab.h" + +// KDE Includes + +// Qt Includes +#include +#include +#include +#include + + +SSLWidget::SSLWidget(const QUrl &url, const WebSslInfo &info, QWidget *parent) + : QMenu(parent) +{ + setAttribute(Qt::WA_DeleteOnClose); + setMinimumWidth(500); + + QFormLayout *layout = new QFormLayout(this); + + QLabel *l; + + // Title + QLabel *title = new QLabel(this); + title->setText( QL1S("

") + url.toString() + QL1S("

") ); + title->setAlignment(Qt::AlignCenter); + layout->addRow(title); + + QLabel *u = new QLabel(this); + u->setText( info.url().toString() ); + layout->addRow(u); + + QLabel *hAdd = new QLabel(this); + hAdd->setText( QL1S("Peer Address: ") + info.peerAddress().toString() ); + layout->addRow(hAdd); + + QLabel *pAdd = new QLabel(this); + pAdd->setText( QL1S("Parent Address: ") + info.parentAddress().toString() ); + layout->addRow(pAdd); + + QLabel *cip = new QLabel(this); + cip->setText( QL1S("Cipher: ") + info.ciphers() ); + layout->addRow(cip); + + QLabel *pr = new QLabel(this); + pr->setText( QL1S("Protocol: ") + info.protocol() ); + layout->addRow(pr); + + QLabel *epr = new QLabel(this); + epr->setText( QL1S("CA errors: ") + info.certificateErrors() ); + layout->addRow(epr); + + QList caList = info.certificateChain(); + Q_FOREACH(const QSslCertificate &cert, caList) + { + QLabel *a = new QLabel(this); + a->setText( QL1S("ORGANIZATION: ") + cert.issuerInfo(QSslCertificate::Organization) ); + layout->addRow(a); + + QLabel *b = new QLabel(this); + b->setText( QL1S("CN: ") + cert.issuerInfo(QSslCertificate::CommonName) ); + layout->addRow(b); + + QLabel *c = new QLabel(this); + c->setText( QL1S("LOCALITY NAME: ") + cert.issuerInfo(QSslCertificate::LocalityName) ); + layout->addRow(c); + + QLabel *d = new QLabel(this); + d->setText( QL1S("ORGANIZATION UNIT NAME: ") + cert.issuerInfo(QSslCertificate::OrganizationalUnitName) ); + layout->addRow(d); + + QLabel *e = new QLabel(this); + e->setText( QL1S("COUNTRY NAME: ") + cert.issuerInfo(QSslCertificate::CountryName) ); + layout->addRow(e); + + QLabel *f = new QLabel(this); + f->setText( QL1S("STATE OR PROVINCE NAME: ") + cert.issuerInfo(QSslCertificate::StateOrProvinceName) ); + layout->addRow(f); + } + +// ---------------------------------------------------------------- + l = new QLabel(this); + l->setText( QL1S("

") + i18n("Site Information") + QL1S("

") ); + layout->addRow(l); + + setLayout(layout); +} + + +void SSLWidget::showAt(const QPoint &pos) +{ + adjustSize(); + + QPoint p(pos.x() - width(), pos.y() + 10); + move(p); + show(); +} + + +void SSLWidget::accept() +{ + + close(); +} diff --git a/src/urlbar/sslwidget.h b/src/urlbar/sslwidget.h new file mode 100644 index 00000000..4e36d364 --- /dev/null +++ b/src/urlbar/sslwidget.h @@ -0,0 +1,52 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2011 by Andrea Diamantini +* +* +* 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 . +* +* ============================================================ */ + + +#ifndef SSL_WIDGET_H +#define SSL_WIDGET_H + + +// Local Includes +#include "websslinfo.h" + +// Qt Includes +#include +#include + + +class SSLWidget : public QMenu +{ + Q_OBJECT + +public: + SSLWidget(const QUrl &url, const WebSslInfo &info, QWidget *parent = 0); + + void showAt(const QPoint &pos); + +private Q_SLOTS: + void accept(); +}; + +#endif // SSL_WIDGET_H diff --git a/src/webpage.cpp b/src/webpage.cpp index 328a4397..45c625e4 100644 --- a/src/webpage.cpp +++ b/src/webpage.cpp @@ -49,8 +49,7 @@ #include "urlbar.h" #include "webpluginfactory.h" #include "webtab.h" - -#include "sslinfodialog_p.h" +#include "sslwidget.h" // KDE Includes #include @@ -553,8 +552,13 @@ void WebPage::manageNetworkErrors(QNetworkReply *reply) QWebFrame* frame = qobject_cast(reply->request().originatingObject()); const bool isMainFrameRequest = (frame == mainFrame()); - - if(isMainFrameRequest + const bool isUrlFrameLoading = (_loadingUrl == frame->url()); + kDebug() << "FRAME URL : " << frame->url(); + kDebug() << "IS MAIN FRAME? " << isMainFrameRequest; + kDebug() << "LOADING URL: " << _loadingUrl; + kDebug() << "IS URL FRAME LOADING " << isUrlFrameLoading; + + if (isMainFrameRequest && _sslInfo.isValid() && !domainSchemeMatch(reply->url(), _sslInfo.url()) ) @@ -571,6 +575,8 @@ void WebPage::manageNetworkErrors(QNetworkReply *reply) case QNetworkReply::NoError: // no error. Simple :) if(isMainFrameRequest && !_sslInfo.isValid()) { + kDebug() << " ---------------------------- "; + kDebug() << "Setting SSL INFOS per URL = " << reply->url(); // Obtain and set the SSL information if any... _sslInfo.restoreFrom(reply->attribute(static_cast(KIO::AccessManager::MetaData)), reply->url()); _sslInfo.setUrl(reply->url()); @@ -723,8 +729,9 @@ void WebPage::downloadAllContentsWithKGet(QPoint) } -void WebPage::showSSLInfo(QPoint) +void WebPage::showSSLInfo(QPoint pos) { +<<<<<<< HEAD if(_sslInfo.isValid()) { QPointer dlg = new KSslInfoDialog(view()); @@ -745,11 +752,31 @@ void WebPage::showSSLInfo(QPoint) } if(mainFrame()->url().scheme() == QL1S("https")) +======= +// if (_sslInfo.isValid()) +// { +// QPointer dlg = new KSslInfoDialog(view()); +// dlg->setSslInfo(_sslInfo.certificateChain(), +// _sslInfo.peerAddress().toString(), +// mainFrame()->url().host(), +// _sslInfo.protocol(), +// _sslInfo.ciphers(), +// _sslInfo.usedChiperBits(), +// _sslInfo.supportedChiperBits(), +// KSslInfoDialog::errorsFromString(_sslInfo.certificateErrors()) +// ); +// +// dlg->exec(); +// delete dlg; +// +// return; +// } +// + if (mainFrame()->url().scheme() == QL1S("https")) +>>>>>>> Added SSL Widget, first version { - KMessageBox::error(view(), - i18n("The SSL information for this site appears to be corrupt."), - i18nc("Secure Sockets Layer", "SSL") - ); + SSLWidget *widget = new SSLWidget(mainFrame()->url(), _sslInfo, view()); + widget->showAt(pos); } else { -- cgit v1.2.1