Refactor: move the validation of certificates & key functions under Server class

Rename method
Add log messages
This commit is contained in:
Chocobo1 2017-04-10 20:04:02 +08:00 committed by sledgehammer999
parent 68f88f7907
commit 13f27c6d3b
No known key found for this signature in database
GPG key ID: 6E4A2D025B7CC9A2
3 changed files with 27 additions and 12 deletions

View file

@ -61,11 +61,27 @@ Server::~Server()
}
#ifndef QT_NO_OPENSSL
void Server::enableHttps(const QList<QSslCertificate> &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<QSslCertificate> 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()

View file

@ -55,7 +55,7 @@ namespace Http
~Server();
#ifndef QT_NO_OPENSSL
void enableHttps(const QList<QSslCertificate> &certificates, const QSslKey &key);
bool setupHttps(const QByteArray &certificates, const QByteArray &key);
void disableHttps();
#endif

View file

@ -74,14 +74,13 @@ void WebUI::init()
#ifndef QT_NO_OPENSSL
if (pref->isWebUiHttpsEnabled()) {
QList<QSslCertificate> certs = QSslCertificate::fromData(pref->getWebUiHttpsCertificate());
QSslKey key;
key = QSslKey(pref->getWebUiHttpsKey(), QSsl::Rsa);
bool certsIsNull = std::any_of(certs.begin(), certs.end(), [](QSslCertificate c) { return c.isNull(); });
if (!certsIsNull && !certs.empty() && !key.isNull())
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();