diff options
author | Jonatan Pålsson <jonatan.palsson@pelagicore.com> | 2014-02-20 09:56:47 +0100 |
---|---|---|
committer | Jonatan Pålsson <jonatan.palsson@pelagicore.com> | 2014-02-20 09:56:47 +0100 |
commit | caca10e1bed3c73b57a764ffb91117e782d9e1a9 (patch) | |
tree | 79ab3c22a69d8ed2d76e6a4148c2949662cb13eb | |
parent | 3d93fb9e19e3c9a8b66a0d426fea3244c61effa3 (diff) | |
download | browser-poc-caca10e1bed3c73b57a764ffb91117e782d9e1a9.tar.gz |
Added conversion from QSslError to conn::brw::SslError
-rw-r--r-- | browser/networkmanager.cpp | 95 | ||||
-rw-r--r-- | browser/unit-tests/browserdbus/testbrowserdbus.cpp | 2 |
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); } |