Handle SSL errors.
authorgregor herrmann <gregoa@debian.org>
Mon, 23 Jan 2017 17:59:07 +0000 (18:59 +0100)
committergregor herrmann <gregoa@debian.org>
Mon, 23 Jan 2017 17:59:07 +0000 (18:59 +0100)
Show warning with error messages, offer to ignore them or abort download.

src/gui/mainwindow.cpp
src/gui/mainwindow.h

index a2e28d1..9f04963 100644 (file)
@@ -131,6 +131,7 @@ MainWindow::MainWindow(QWidget* parent): QMainWindow(parent) {
         clearTabs();
     }
 
+    connect(mNetworkAccessManager, SIGNAL(sslErrors(QNetworkReply*, QList<QSslError>)), SLOT(sslErrors(QNetworkReply*, QList<QSslError>)));
     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<QSslError> &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());
index b544d16..537d81e 100644 (file)
@@ -21,6 +21,7 @@
 #define MAINWINDOW_H
 
 #include <QtGui/QMainWindow>
+#include <QSslError>
 
 #include "ui_mainwindow.h"
 
@@ -51,6 +52,7 @@ private slots:
     void onEventChanged(int aEventId, bool favouriteChanged);
     void onSearchResultChanged();
 
+    void sslErrors(QNetworkReply*,const QList<QSslError> &errors);
     void networkQueryFinished(QNetworkReply*);
     void importFromNetwork(const QString&, int conferenceId);
     void importFromFile(const QString&, int conferenceId);