[sailfish] added a minSSLVersion option, regards #117

This commit is contained in:
Hauke Schade 2014-11-16 17:29:16 +01:00
parent 9366775b9f
commit ddc766e5cc
4 changed files with 115 additions and 1 deletions

View file

@ -71,9 +71,21 @@ QNetworkReply *MyNetworkAccessManager::createRequest( QNetworkAccessManager::Ope
QNetworkRequest request(req);
request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache);
QNetworkReply *reply = QNetworkAccessManager::createRequest(op, request, outgoingData);
if (Settings::instance()->ignoreSSLErrors()) {
QSslConfiguration sslConfig = request.sslConfiguration();
QSsl::SslProtocol protocol = sslConfig.protocol();
Settings* settings = Settings::instance();
if (settings->isMinSSlVersionGreaterThan(protocol)) {
sslConfig.setProtocol(settings->getMinSSLVersion());
qDebug() << "ssl protocol is now " << sslConfig.protocol();
}
request.setSslConfiguration(sslConfig);
if (settings->ignoreSSLErrors()) {
reply->ignoreSslErrors();
}
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onError(QNetworkReply::NetworkError)));
return reply;
}

View file

@ -74,6 +74,22 @@ Dialog {
checked: settings.useAllFeedsOnStartup
}
ComboBox {
id: minimumSSLVersionSetting
label: qsTr("Minimum Ssl Version")
currentIndex: settings.minSSLVersion
description: qsTr('Specify a minimum protocol version for your SSL connection. This might be neseccary when your server does not allow connections with older (insecure) protocols.')
menu: ContextMenu {
MenuItem { text: qsTr("Any") }
MenuItem { text: qsTr("SslV2") }
MenuItem { text: qsTr("SslV3") }
MenuItem { text: qsTr("TlsV1.0") }
MenuItem { text: qsTr("TlsV1.1") }
MenuItem { text: qsTr("TlsV1.2") }
}
}
// -- Feeds --
SectionHeader {
text: qsTr("Feeds")
@ -226,6 +242,7 @@ Dialog {
// Startup
settings.useAutologin = autoLoginSetting.checked
settings.useAllFeedsOnStartup = useAllFeedsOnStartupSetting.checked
settings.minSSLVersion = minimumSSLVersionSetting.currentIndex
// Feeds
settings.displayIcons = showIconsSetting.checked

View file

@ -81,6 +81,79 @@ void Settings::setIgnoreSSLErrors(bool ignoreSSLErrors) {
}
}
void Settings::setMinSSLVersion(int minSSLVersion) {
if (_minSSLVersion != minSSLVersion) {
_minSSLVersion = minSSLVersion;
m_settings->setValue("minSSLVersion", _minSSLVersion);
emit minSSLVersionChanged();
}
}
QSsl::SslProtocol Settings::getMinSSLVersion() const {
QSsl::SslProtocol minSSLVersionProtocol;
switch (_minSSLVersion) {
default:
case 0:
minSSLVersionProtocol = QSsl::AnyProtocol;
break;
case 1:
minSSLVersionProtocol = QSsl::SslV2;
break;
case 2:
minSSLVersionProtocol = QSsl::SslV3;
break;
case 3:
minSSLVersionProtocol = QSsl::TlsV1_0;
break;
case 4:
minSSLVersionProtocol = QSsl::TlsV1_1;
break;
case 5:
minSSLVersionProtocol = QSsl::TlsV1_2;
break;
}
return minSSLVersionProtocol;
}
bool Settings::isMinSSlVersionGreaterThan(QSsl::SslProtocol otherVersion) const {
QSsl::SslProtocol currentVersion = this->getMinSSLVersion();
bool result = false;
switch (otherVersion) {
case QSsl::SslV2:
result = currentVersion == QSsl::SslV3 ||
currentVersion == QSsl::TlsV1_0 ||
currentVersion == QSsl::TlsV1_1 ||
currentVersion == QSsl::TlsV1_2
;
break;
case QSsl::SslV3:
case QSsl::TlsV1SslV3:
case QSsl::SecureProtocols:
result = currentVersion == QSsl::TlsV1_0 ||
currentVersion == QSsl::TlsV1_1 ||
currentVersion == QSsl::TlsV1_2
;
break;
case QSsl::TlsV1_0:
result = currentVersion == QSsl::TlsV1_1 ||
currentVersion == QSsl::TlsV1_2
;
break;
case QSsl::TlsV1_1:
result = currentVersion == QSsl::TlsV1_2
;
break;
case QSsl::TlsV1_2:
case QSsl::UnknownProtocol:
result = false;
break;
case QSsl::AnyProtocol:
result = currentVersion != QSsl::AnyProtocol;
break;
}
return result;
}
// Startup
void Settings::setAutologin(bool autologin) {
if (_autologin != autologin) {
@ -239,6 +312,7 @@ Settings::Settings(QObject *parent) : QObject(parent), m_settings(new QSettings(
_httpauthuser = m_settings->value("httpauthusername", "").toString();
_httpauthpasswd = m_settings->value("httpauthpassword", "").toString();
_ignoreSSLErrors = m_settings->value("ignoreSSLErrors", false).toBool();
_minSSLVersion = m_settings->value("minSSLVersion", 0).toInt();
// Startup
_autologin = m_settings->value("autologin", false).toBool();

View file

@ -25,6 +25,7 @@
#include <QtCore/QObject>
#include <QtCore/QScopedPointer>
#include <QtCore/qstring.h>
#include <QtNetwork/QSsl>
class QSettings;
@ -39,6 +40,7 @@ class Settings : public QObject
Q_PROPERTY(QString httpauthusername READ httpauthUsername WRITE setHttpauthUsername NOTIFY httpauthUsernameChanged)
Q_PROPERTY(QString httpauthpassword READ httpauthPassword WRITE setHttpauthPassword NOTIFY httpauthPasswordChanged)
Q_PROPERTY(bool ignoreSSLErrors READ ignoreSSLErrors WRITE setIgnoreSSLErrors NOTIFY ignoreSSLErrorsChanged)
Q_PROPERTY(int minSSLVersion READ minSSLVersion WRITE setMinSSLVersion NOTIFY minSSLVersionChanged)
// Startup
Q_PROPERTY(bool autologin READ hasAutologin WRITE setAutologin NOTIFY autologinChanged)
@ -104,6 +106,13 @@ public:
}
void setIgnoreSSLErrors(bool ignoreSSLErrors);
int minSSLVersion() const {
return this->_minSSLVersion;
}
void setMinSSLVersion(int minSSLVersion);
QSsl::SslProtocol getMinSSLVersion() const;
bool isMinSSlVersionGreaterThan(QSsl::SslProtocol otherVersion) const;
// Startup
bool hasAutologin() const {
return this->_autologin;
@ -208,6 +217,7 @@ signals:
void httpauthUsernameChanged();
void httpauthPasswordChanged();
void ignoreSSLErrorsChanged();
void minSSLVersionChanged();
// Startup
void autologinChanged();
@ -254,6 +264,7 @@ private:
QString _httpauthuser;
QString _httpauthpasswd;
bool _ignoreSSLErrors;
int _minSSLVersion;
// Startup
bool _autologin;