From 7f346b49a72dd623e04db3a116057515d4558bfa Mon Sep 17 00:00:00 2001 From: Chocobo1 Date: Mon, 10 Apr 2017 20:04:02 +0800 Subject: [PATCH] Refactor: move the validation of certificates & key functions under Server class Rename method Add log messages --- src/base/http/server.cpp | 24 ++++++++++++++++++++---- src/base/http/server.h | 2 +- src/webui/webui.cpp | 17 ++++++----------- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/base/http/server.cpp b/src/base/http/server.cpp index be1877d38..5b144e308 100644 --- a/src/base/http/server.cpp +++ b/src/base/http/server.cpp @@ -61,11 +61,27 @@ Server::~Server() } #ifndef QT_NO_OPENSSL -void Server::enableHttps(const QList &certificates, const QSslKey &key) +bool Server::setupHttps(const QByteArray &certificates, const QByteArray &key) { - m_certificates = certificates; - m_key = key; - m_https = true; + QSslKey sslKey(key, QSsl::Rsa); + if (sslKey.isNull()) + sslKey = QSslKey(key, QSsl::Ec); + + const QList certs = QSslCertificate::fromData(certificates); + const bool areCertsValid = !certs.empty() && std::all_of(certs.begin(), certs.end(), [](const QSslCertificate &c) { return !c.isNull(); }); + + if (!sslKey.isNull() && areCertsValid) + { + m_key = sslKey; + m_certificates = certs; + m_https = true; + return true; + } + else + { + disableHttps(); + return false; + } } void Server::disableHttps() diff --git a/src/base/http/server.h b/src/base/http/server.h index 7f8f3af7c..3ffb329cd 100644 --- a/src/base/http/server.h +++ b/src/base/http/server.h @@ -55,7 +55,7 @@ namespace Http ~Server(); #ifndef QT_NO_OPENSSL - void enableHttps(const QList &certificates, const QSslKey &key); + bool setupHttps(const QByteArray &certificates, const QByteArray &key); void disableHttps(); #endif diff --git a/src/webui/webui.cpp b/src/webui/webui.cpp index 927a5d9cc..6b03ef04d 100644 --- a/src/webui/webui.cpp +++ b/src/webui/webui.cpp @@ -75,18 +75,13 @@ void WebUI::init() #ifndef QT_NO_OPENSSL if (pref->isWebUiHttpsEnabled()) { - const QByteArray keyRaw = pref->getWebUiHttpsKey(); - QSslKey key(keyRaw, QSsl::Rsa); - if (key.isNull()) - key = QSslKey(keyRaw, QSsl::Ec); - - const QList certs = QSslCertificate::fromData(pref->getWebUiHttpsCertificate()); - const bool areCertsValid = !certs.empty() && std::all_of(certs.begin(), certs.end(), [](QSslCertificate c) { return !c.isNull(); }); - - if (!key.isNull() && areCertsValid) - m_httpServer->enableHttps(certs, key); + const QByteArray certs = pref->getWebUiHttpsCertificate(); + const QByteArray key = pref->getWebUiHttpsKey(); + bool success = m_httpServer->setupHttps(certs, key); + if (success) + logger->addMessage(tr("Web UI: https setup successful")); else - m_httpServer->disableHttps(); + logger->addMessage(tr("Web UI: https setup failed, fallback to http"), Log::CRITICAL); } else { m_httpServer->disableHttps();