summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonatan Pålsson <jonatan.palsson@pelagicore.com>2014-02-20 09:56:47 +0100
committerJonatan Pålsson <jonatan.palsson@pelagicore.com>2014-02-20 09:56:47 +0100
commitcaca10e1bed3c73b57a764ffb91117e782d9e1a9 (patch)
tree79ab3c22a69d8ed2d76e6a4148c2949662cb13eb
parent3d93fb9e19e3c9a8b66a0d426fea3244c61effa3 (diff)
downloadbrowser-poc-caca10e1bed3c73b57a764ffb91117e782d9e1a9.tar.gz
Added conversion from QSslError to conn::brw::SslError
-rw-r--r--browser/networkmanager.cpp95
-rw-r--r--browser/unit-tests/browserdbus/testbrowserdbus.cpp2
2 files changed, 83 insertions, 14 deletions
diff --git a/browser/networkmanager.cpp b/browser/networkmanager.cpp
index dbe14ca..b154b81 100644
--- a/browser/networkmanager.cpp
+++ b/browser/networkmanager.cpp
@@ -17,6 +17,71 @@
#include <QAuthenticator>
#include <QEventLoop>
#include <QNetworkReply>
+#include <QSslError>
+
+conn::brw::SslError convertError(QSslError err, const QNetworkReply *rep)
+{
+ conn::brw::SslError data;
+ data.strUrl = rep->url().toString();
+ data.strErrorMessage = err.errorString();
+
+ switch (err.error()) {
+ case(QSslError::NoError):
+ {data.sslError = conn::brw::NoError; break;}
+ case(QSslError::UnableToGetIssuerCertificate):
+ {data.sslError = conn::brw::UnableToGetIssuerCertificate; break;}
+ case(QSslError::UnableToDecryptCertificateSignature):
+ {data.sslError = conn::brw::UnableToDecryptCertificateSignature; break;}
+ case(QSslError::UnableToDecodeIssuerPublicKey):
+ {data.sslError = conn::brw::UnableToDecodeIssuerPublicKey; break;}
+ case(QSslError::CertificateSignatureFailed):
+ {data.sslError = conn::brw::CertificateSignatureFailed; break;}
+ case(QSslError::CertificateNotYetValid):
+ {data.sslError = conn::brw::CertificateNotYetValid; break;}
+ case(QSslError::CertificateExpired):
+ {data.sslError = conn::brw::CertificateExpired; break;}
+ case(QSslError::InvalidNotBeforeField):
+ {data.sslError = conn::brw::InvalidNotBeforeField; break;}
+ case(QSslError::InvalidNotAfterField):
+ {data.sslError = conn::brw::InvalidNotAfterField; break;}
+ case(QSslError::SelfSignedCertificate):
+ {data.sslError = conn::brw::SelfSignedCertificate; break;}
+ case(QSslError::SelfSignedCertificateInChain):
+ {data.sslError = conn::brw::SelfSignedCertificateInChain; break;}
+ case(QSslError::UnableToGetLocalIssuerCertificate):
+ {data.sslError = conn::brw::UnableToGetLocalIssuerCertificate; break;}
+ case(QSslError::UnableToVerifyFirstCertificate):
+ {data.sslError = conn::brw::UnableToVerifyFirstCertificate; break;}
+ case(QSslError::CertificateRevoked):
+ {data.sslError = conn::brw::CertificateRevoked; break;}
+ case(QSslError::InvalidCaCertificate):
+ {data.sslError = conn::brw::InvalidCaCertificate; break;}
+ case(QSslError::PathLengthExceeded):
+ {data.sslError = conn::brw::PathLengthExceeded; break;}
+ case(QSslError::InvalidPurpose):
+ {data.sslError = conn::brw::InvalidPurpose; break;}
+ case(QSslError::CertificateUntrusted):
+ {data.sslError = conn::brw::CertificateUntrusted; break;}
+ case(QSslError::CertificateRejected):
+ {data.sslError = conn::brw::CertificateRejected; break;}
+ case(QSslError::SubjectIssuerMismatch):
+ {data.sslError = conn::brw::SubjectIssuerMismatch; break;}
+ case(QSslError::AuthorityIssuerSerialNumberMismatch):
+ {data.sslError = conn::brw::AuthorityIssuerSerialNumberMismatch; break;}
+ case(QSslError::NoPeerCertificate):
+ {data.sslError = conn::brw::NoPeerCertificate; break;}
+ case(QSslError::HostNameMismatch):
+ {data.sslError = conn::brw::HostNameMismatch; break;}
+ case(QSslError::UnspecifiedError):
+ {data.sslError = conn::brw::UnspecifiedError; break;}
+ case(QSslError::NoSslSupport):
+ {data.sslError = conn::brw::NoSslSupport; break;}
+ case(QSslError::CertificateBlacklisted):
+ {data.sslError = conn::brw::CertificateBlacklisted; break;}
+ }
+
+ return data;
+}
networkmanager::networkmanager(QNetworkAccessManager *nam, QObject *parent) :
QObject(parent), m_nam (nam)
@@ -61,20 +126,22 @@ void networkmanager::onAuthenticationRequired(QNetworkReply *reply, QAuthenticat
void networkmanager::onSslErrors(QNetworkReply *reply, const QList<QSslError> & errors)
{
- conn::brw::SslError data;
- data.sslError = conn::brw::UnableToGetIssuerCertificate;
- emit onSslErrorDialog(data);
- qDebug() << "SSL error; action required";
- QEventLoop loop;
- connect (this, SIGNAL(doCloseSslErrorDialog(bool, bool)), this, SLOT(closeSsl(bool, bool)));
- connect (this, SIGNAL(doCloseSslErrorDialog(bool, bool)), &loop, SLOT(quit()));
- loop.exec();
- qDebug() << "SSL error action provided: isOK" << m_isSslOk << "save cert:" << m_sslSaveCert;
+ for (int i = 0; i < errors.size(); i++) {
+ conn::brw::SslError data = convertError (errors.at(i), reply);
+ emit onSslErrorDialog(data);
+ qDebug() << "SSL error; action required";
+ QEventLoop loop;
+ connect (this, SIGNAL(doCloseSslErrorDialog(bool, bool)), this, SLOT(closeSsl(bool, bool)));
+ connect (this, SIGNAL(doCloseSslErrorDialog(bool, bool)), &loop, SLOT(quit()));
+ loop.exec();
+ qDebug() << "SSL error action provided: isOK" << m_isSslOk << "save cert:" << m_sslSaveCert;
- if (m_isSslOk) {
- reply->ignoreSslErrors();
- qDebug() << "Ignoring error";
- } else {
- qDebug() << "Halting on error";
+ if (m_isSslOk) {
+ reply->ignoreSslErrors();
+ qDebug() << "Ignoring error";
+ } else {
+ qDebug() << "Halting on error";
+ }
}
}
+
diff --git a/browser/unit-tests/browserdbus/testbrowserdbus.cpp b/browser/unit-tests/browserdbus/testbrowserdbus.cpp
index 355589d..4ff3e0b 100644
--- a/browser/unit-tests/browserdbus/testbrowserdbus.cpp
+++ b/browser/unit-tests/browserdbus/testbrowserdbus.cpp
@@ -364,6 +364,8 @@ void TestBrowserDBus::testCanCloseSslDialog() {
m_bdb->createPageWindow(1,0,0,800,600);
m_bdb->loadurl("https://tv.eurosport.com/");
QVERIFY(spy.wait(1000));
+ conn::brw::SslError error = spy.takeFirst().at(0).value<conn::brw::SslError>();
+ qDebug() << "SSL error is:" << error.strErrorMessage << ". code:" << error.sslError;
m_bdb->closeSslErrorDialog(conn::brw::DR_OK, true);
}