diff options
Diffstat (limited to 'utils/rbutilqt/base/httpget.cpp')
-rw-r--r-- | utils/rbutilqt/base/httpget.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/utils/rbutilqt/base/httpget.cpp b/utils/rbutilqt/base/httpget.cpp index fb74514e73..0cd9236209 100644 --- a/utils/rbutilqt/base/httpget.cpp +++ b/utils/rbutilqt/base/httpget.cpp | |||
@@ -20,6 +20,7 @@ | |||
20 | 20 | ||
21 | #include <QNetworkAccessManager> | 21 | #include <QNetworkAccessManager> |
22 | #include <QNetworkRequest> | 22 | #include <QNetworkRequest> |
23 | #include <QSslConfiguration> | ||
23 | 24 | ||
24 | #include "httpget.h" | 25 | #include "httpget.h" |
25 | #include "Logger.h" | 26 | #include "Logger.h" |
@@ -27,6 +28,7 @@ | |||
27 | QString HttpGet::m_globalUserAgent; //< globally set user agent for requests | 28 | QString HttpGet::m_globalUserAgent; //< globally set user agent for requests |
28 | QDir HttpGet::m_globalCache; //< global cach path value for new objects | 29 | QDir HttpGet::m_globalCache; //< global cach path value for new objects |
29 | QNetworkProxy HttpGet::m_globalProxy; | 30 | QNetworkProxy HttpGet::m_globalProxy; |
31 | QList<QSslCertificate> HttpGet::m_acceptedClientCerts; | ||
30 | 32 | ||
31 | HttpGet::HttpGet(QObject *parent) | 33 | HttpGet::HttpGet(QObject *parent) |
32 | : QObject(parent), | 34 | : QObject(parent), |
@@ -211,9 +213,30 @@ void HttpGet::startRequest(QUrl url) | |||
211 | connect(m_reply, &QNetworkReply::errorOccurred, this, &HttpGet::networkError); | 213 | connect(m_reply, &QNetworkReply::errorOccurred, this, &HttpGet::networkError); |
212 | #endif | 214 | #endif |
213 | connect(m_reply, &QNetworkReply::downloadProgress, this, &HttpGet::downloadProgress); | 215 | connect(m_reply, &QNetworkReply::downloadProgress, this, &HttpGet::downloadProgress); |
216 | connect(m_reply, &QNetworkReply::sslErrors, this, &HttpGet::gotSslError); | ||
214 | } | 217 | } |
215 | 218 | ||
216 | 219 | ||
220 | void HttpGet::gotSslError(const QList<QSslError> &errors) | ||
221 | { | ||
222 | LOG_WARNING() << "Got SSL error" << errors; | ||
223 | |||
224 | // if this is a cert error, and only if we already accepted a remote cert | ||
225 | // ignore the error. | ||
226 | // This will make QNAM continue the request and finish it. | ||
227 | if (errors.size() == 1 | ||
228 | && errors.at(0).error() == QSslError::UnableToGetLocalIssuerCertificate | ||
229 | && m_acceptedClientCerts.contains(m_reply->sslConfiguration().peerCertificate())) { | ||
230 | LOG_INFO() << "client cert temporarily trusted by user."; | ||
231 | m_reply->ignoreSslErrors(); | ||
232 | } | ||
233 | else { | ||
234 | LOG_ERROR() << m_reply->sslConfiguration().peerCertificate().toText(); | ||
235 | emit sslError(errors.at(0), m_reply->sslConfiguration().peerCertificate()); | ||
236 | } | ||
237 | |||
238 | } | ||
239 | |||
217 | void HttpGet::networkError(QNetworkReply::NetworkError error) | 240 | void HttpGet::networkError(QNetworkReply::NetworkError error) |
218 | { | 241 | { |
219 | LOG_ERROR() << "NetworkError occured:" << error << m_reply->errorString(); | 242 | LOG_ERROR() << "NetworkError occured:" << error << m_reply->errorString(); |