summaryrefslogtreecommitdiff
path: root/src/webtab/websslinfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/webtab/websslinfo.cpp')
-rw-r--r--src/webtab/websslinfo.cpp232
1 files changed, 232 insertions, 0 deletions
diff --git a/src/webtab/websslinfo.cpp b/src/webtab/websslinfo.cpp
new file mode 100644
index 00000000..adbf64f5
--- /dev/null
+++ b/src/webtab/websslinfo.cpp
@@ -0,0 +1,232 @@
+/* ============================================================
+*
+* This file is a part of the KDE project
+*
+* Copyright (C) 2009-2011 by Dawit Alemayehu <adawit@kde.org>
+*
+*
+* 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 "websslinfo.h"
+
+// Qt Includes
+#include <QtCore/QVariant>
+
+
+class WebSslInfo::WebSslInfoPrivate
+{
+public:
+ WebSslInfoPrivate()
+ : usedCipherBits(0), supportedCipherBits(0) {}
+
+ QUrl url;
+ QString ciphers;
+ QString protocol;
+ QString certErrors;
+ QHostAddress peerAddress;
+ QHostAddress parentAddress;
+ QList<QSslCertificate> certificateChain;
+
+ int usedCipherBits;
+ int supportedCipherBits;
+};
+
+WebSslInfo::WebSslInfo()
+ : d(new WebSslInfo::WebSslInfoPrivate)
+{
+}
+
+WebSslInfo::WebSslInfo(const WebSslInfo& other)
+ : d(new WebSslInfo::WebSslInfoPrivate)
+{
+ *this = other;
+}
+
+WebSslInfo::~WebSslInfo()
+{
+ delete d;
+ d = 0;
+}
+
+bool WebSslInfo::isValid() const
+{
+ return (d ? !d->peerAddress.isNull() : false);
+}
+
+QUrl WebSslInfo::url() const
+{
+ return (d ? d->url : QUrl());
+}
+
+QHostAddress WebSslInfo::parentAddress() const
+{
+ return (d ? d->parentAddress : QHostAddress());
+}
+
+QHostAddress WebSslInfo::peerAddress() const
+{
+ return (d ? d->peerAddress : QHostAddress());
+}
+
+QString WebSslInfo::protocol() const
+{
+ return (d ? d->protocol : QString());
+}
+
+QString WebSslInfo::ciphers() const
+{
+ return (d ? d->ciphers : QString());
+}
+
+QString WebSslInfo::certificateErrors() const
+{
+ return (d ? d->certErrors : QString());
+}
+
+int WebSslInfo::supportedChiperBits() const
+{
+ return (d ? d->supportedCipherBits : 0);
+}
+
+int WebSslInfo::usedChiperBits() const
+{
+ return (d ? d->usedCipherBits : 0);
+}
+
+QList<QSslCertificate> WebSslInfo::certificateChain() const
+{
+ return (d ? d->certificateChain : QList<QSslCertificate>());
+}
+
+WebSslInfo& WebSslInfo::operator=(const WebSslInfo & other)
+{
+ if (d)
+ {
+ d->ciphers = other.d->ciphers;
+ d->protocol = other.d->protocol;
+ d->certErrors = other.d->certErrors;
+ d->peerAddress = other.d->peerAddress;
+ d->parentAddress = other.d->parentAddress;
+ d->certificateChain = other.d->certificateChain;
+
+ d->usedCipherBits = other.d->usedCipherBits;
+ d->supportedCipherBits = other.d->supportedCipherBits;
+ d->url = other.d->url;
+ }
+
+ return *this;
+}
+
+bool WebSslInfo::saveTo(QMap<QString, QVariant>& data) const
+{
+ const bool ok = isValid();
+ if (ok)
+ {
+ data.insert("ssl_in_use", true);
+ data.insert("ssl_peer_ip", d->peerAddress.toString());
+ data.insert("ssl_parent_ip", d->parentAddress.toString());
+ data.insert("ssl_protocol_version", d->protocol);
+ data.insert("ssl_cipher", d->ciphers);
+ data.insert("ssl_cert_errors", d->certErrors);
+ data.insert("ssl_cipher_used_bits", d->usedCipherBits);
+ data.insert("ssl_cipher_bits", d->supportedCipherBits);
+ QByteArray certChain;
+ Q_FOREACH(const QSslCertificate & cert, d->certificateChain)
+ certChain += cert.toPem();
+ data.insert("ssl_peer_chain", certChain);
+ }
+
+ return ok;
+}
+
+void WebSslInfo::restoreFrom(const QVariant& value, const QUrl& url)
+{
+ if (value.isValid() && value.type() == QVariant::Map)
+ {
+ QMap<QString, QVariant> metaData = value.toMap();
+ if (metaData.value("ssl_in_use", false).toBool())
+ {
+ setCertificateChain(metaData.value("ssl_peer_chain").toByteArray());
+ setPeerAddress(metaData.value("ssl_peer_ip").toString());
+ setParentAddress(metaData.value("ssl_parent_ip").toString());
+ setProtocol(metaData.value("ssl_protocol_version").toString());
+ setCiphers(metaData.value("ssl_cipher").toString());
+ setCertificateErrors(metaData.value("ssl_cert_errors").toString());
+ setUsedCipherBits(metaData.value("ssl_cipher_used_bits").toString());
+ setSupportedCipherBits(metaData.value("ssl_cipher_bits").toString());
+ setUrl(url);
+ }
+ }
+}
+
+void WebSslInfo::setUrl(const QUrl &url)
+{
+ if (d)
+ d->url = url;
+}
+
+void WebSslInfo::setPeerAddress(const QString& address)
+{
+ if (d)
+ d->peerAddress = address;
+}
+
+void WebSslInfo::setParentAddress(const QString& address)
+{
+ if (d)
+ d->parentAddress = address;
+}
+
+void WebSslInfo::setProtocol(const QString& protocol)
+{
+ if (d)
+ d->protocol = protocol;
+}
+
+void WebSslInfo::setCertificateChain(const QByteArray& chain)
+{
+ if (d)
+ d->certificateChain = QSslCertificate::fromData(chain);
+}
+
+void WebSslInfo::setCiphers(const QString& ciphers)
+{
+ if (d)
+ d->ciphers = ciphers;
+}
+
+void WebSslInfo::setUsedCipherBits(const QString& bits)
+{
+ if (d)
+ d->usedCipherBits = bits.toInt();
+}
+
+void WebSslInfo::setSupportedCipherBits(const QString& bits)
+{
+ if (d)
+ d->supportedCipherBits = bits.toInt();
+}
+
+void WebSslInfo::setCertificateErrors(const QString& certErrors)
+{
+ if (d)
+ d->certErrors = certErrors;
+}