From f94ab1dca83ba38a70a9b0cfdc04b20d15e9d015 Mon Sep 17 00:00:00 2001 From: gregor herrmann Date: Mon, 23 Jan 2017 18:59:07 +0100 Subject: [PATCH] Handle SSL errors. Show warning with error messages, offer to ignore them or abort download. --- src/gui/mainwindow.cpp | 21 +++++++++++++++++++++ src/gui/mainwindow.h | 2 ++ 2 files changed, 23 insertions(+) diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index a2e28d1..9f04963 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -131,6 +131,7 @@ MainWindow::MainWindow(QWidget* parent): QMainWindow(parent) { clearTabs(); } + connect(mNetworkAccessManager, SIGNAL(sslErrors(QNetworkReply*, QList)), SLOT(sslErrors(QNetworkReply*, QList))); connect(mNetworkAccessManager, SIGNAL(finished(QNetworkReply*)), SLOT(networkQueryFinished(QNetworkReply*))); connect(mXmlParser, SIGNAL(parsingScheduleBegin()), conferenceModel, SLOT(newConferenceBegin())); connect(mXmlParser, SIGNAL(parsingScheduleEnd(int)), conferenceModel, SLOT(newConferenceEnd(int))); @@ -409,6 +410,26 @@ void MainWindow::on_conferencesAction_triggered() } } +void MainWindow::sslErrors(QNetworkReply *aReply, const QList &errors) { + QString errorString; + foreach (const QSslError &error, errors) { + if (!errorString.isEmpty()) { + errorString += ", "; + } + errorString += error.errorString(); + } + + if (QMessageBox::warning( + this, + QString("SSL errors"), + QString("One or more SSL errors have occurred: ") + errorString, + QMessageBox::Ignore | QMessageBox::Cancel) == QMessageBox::Ignore) { + aReply->ignoreSslErrors(); + } else { + aReply->abort(); + } +} + void MainWindow::networkQueryFinished(QNetworkReply *aReply) { if (aReply->error() != QNetworkReply::NoError) { error_message(QString("Error occurred during download: ") + aReply->errorString()); diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index b544d16..537d81e 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -21,6 +21,7 @@ #define MAINWINDOW_H #include +#include #include "ui_mainwindow.h" @@ -51,6 +52,7 @@ private slots: void onEventChanged(int aEventId, bool favouriteChanged); void onSearchResultChanged(); + void sslErrors(QNetworkReply*,const QList &errors); void networkQueryFinished(QNetworkReply*); void importFromNetwork(const QString&, int conferenceId); void importFromFile(const QString&, int conferenceId); -- 2.39.5