refactor: TlsUtility::generateCertificate() handle all the steps internally and make method static
This commit is contained in:
parent
0d5d66b880
commit
c13421c20a
6 changed files with 21 additions and 22 deletions
|
|
@ -24,6 +24,7 @@
|
||||||
#include "gui/Messages.h"
|
#include "gui/Messages.h"
|
||||||
#include "gui/core/CoreProcess.h"
|
#include "gui/core/CoreProcess.h"
|
||||||
#include "gui/ipc/DaemonIpcClient.h"
|
#include "gui/ipc/DaemonIpcClient.h"
|
||||||
|
#include "gui/tls/TlsUtility.h"
|
||||||
#include "gui/widgets/LogDock.h"
|
#include "gui/widgets/LogDock.h"
|
||||||
#include "net/FingerprintDatabase.h"
|
#include "net/FingerprintDatabase.h"
|
||||||
|
|
||||||
|
|
@ -63,7 +64,6 @@ MainWindow::MainWindow()
|
||||||
m_coreProcess(m_serverConfig),
|
m_coreProcess(m_serverConfig),
|
||||||
m_serverConnection(this, m_serverConfig),
|
m_serverConnection(this, m_serverConfig),
|
||||||
m_clientConnection(this),
|
m_clientConnection(this),
|
||||||
m_tlsUtility(this),
|
|
||||||
m_trayIcon{new QSystemTrayIcon(this)},
|
m_trayIcon{new QSystemTrayIcon(this)},
|
||||||
m_guiDupeChecker{new QLocalServer(this)},
|
m_guiDupeChecker{new QLocalServer(this)},
|
||||||
m_daemonIpcClient{new ipc::DaemonIpcClient(this)},
|
m_daemonIpcClient{new ipc::DaemonIpcClient(this)},
|
||||||
|
|
@ -367,7 +367,7 @@ void MainWindow::settingsChanged(const QString &key)
|
||||||
(key == Settings::Security::TlsEnabled) || (key == Settings::Security::CheckPeers)) {
|
(key == Settings::Security::TlsEnabled) || (key == Settings::Security::CheckPeers)) {
|
||||||
if (TlsUtility::isEnabled() && !TlsUtility::isCertValid()) {
|
if (TlsUtility::isEnabled() && !TlsUtility::isCertValid()) {
|
||||||
qWarning() << tr("invalid certificate, generating a new one");
|
qWarning() << tr("invalid certificate, generating a new one");
|
||||||
m_tlsUtility.generateCertificate();
|
TlsUtility::generateCertificate();
|
||||||
}
|
}
|
||||||
updateSecurityIcon(m_lblSecurityStatus->isVisible());
|
updateSecurityIcon(m_lblSecurityStatus->isVisible());
|
||||||
return;
|
return;
|
||||||
|
|
@ -1173,7 +1173,7 @@ QString MainWindow::trustedFingerprintDatabase() const
|
||||||
bool MainWindow::generateCertificate()
|
bool MainWindow::generateCertificate()
|
||||||
{
|
{
|
||||||
const auto certificate = Settings::value(Settings::Security::Certificate).toString();
|
const auto certificate = Settings::value(Settings::Security::Certificate).toString();
|
||||||
if (!QFile::exists(certificate) && !m_tlsUtility.generateCertificate()) {
|
if (!QFile::exists(certificate) && !TlsUtility::generateCertificate()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@
|
||||||
#include "gui/core/CoreProcess.h"
|
#include "gui/core/CoreProcess.h"
|
||||||
#include "gui/core/ServerConnection.h"
|
#include "gui/core/ServerConnection.h"
|
||||||
#include "gui/core/WaylandWarnings.h"
|
#include "gui/core/WaylandWarnings.h"
|
||||||
#include "gui/tls/TlsUtility.h"
|
|
||||||
#include "net/Fingerprint.h"
|
#include "net/Fingerprint.h"
|
||||||
|
|
||||||
#ifdef Q_OS_MACOS
|
#ifdef Q_OS_MACOS
|
||||||
|
|
@ -180,7 +179,6 @@ private:
|
||||||
deskflow::gui::CoreProcess m_coreProcess;
|
deskflow::gui::CoreProcess m_coreProcess;
|
||||||
deskflow::gui::ServerConnection m_serverConnection;
|
deskflow::gui::ServerConnection m_serverConnection;
|
||||||
deskflow::gui::ClientConnection m_clientConnection;
|
deskflow::gui::ClientConnection m_clientConnection;
|
||||||
deskflow::gui::TlsUtility m_tlsUtility;
|
|
||||||
QSize m_expandedSize = QSize();
|
QSize m_expandedSize = QSize();
|
||||||
QStringList m_checkedClients;
|
QStringList m_checkedClients;
|
||||||
QStringList m_checkedServers;
|
QStringList m_checkedServers;
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@
|
||||||
#include "common/I18N.h"
|
#include "common/I18N.h"
|
||||||
#include "common/Settings.h"
|
#include "common/Settings.h"
|
||||||
#include "gui/Messages.h"
|
#include "gui/Messages.h"
|
||||||
#include "gui/tls/TlsCertificate.h"
|
|
||||||
#include "gui/tls/TlsUtility.h"
|
#include "gui/tls/TlsUtility.h"
|
||||||
|
|
||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
|
|
@ -27,8 +26,7 @@ SettingsDialog::SettingsDialog(QWidget *parent, const IServerConfig &serverConfi
|
||||||
: QDialog(parent),
|
: QDialog(parent),
|
||||||
ui{std::make_unique<Ui::SettingsDialog>()},
|
ui{std::make_unique<Ui::SettingsDialog>()},
|
||||||
m_serverConfig(serverConfig),
|
m_serverConfig(serverConfig),
|
||||||
m_coreProcess(coreProcess),
|
m_coreProcess(coreProcess)
|
||||||
m_tlsUtility(this)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
@ -90,7 +88,7 @@ void SettingsDialog::initConnections() const
|
||||||
|
|
||||||
void SettingsDialog::regenCertificates()
|
void SettingsDialog::regenCertificates()
|
||||||
{
|
{
|
||||||
if (m_tlsUtility.generateCertificate()) {
|
if (TlsUtility::generateCertificate()) {
|
||||||
QMessageBox::information(this, tr("TLS Certificate Regenerated"), tr("TLS certificate regenerated successfully."));
|
QMessageBox::information(this, tr("TLS Certificate Regenerated"), tr("TLS certificate regenerated successfully."));
|
||||||
const auto certificate = Settings::value(Settings::Security::Certificate).toString();
|
const auto certificate = Settings::value(Settings::Security::Certificate).toString();
|
||||||
updateKeyLengthOnFile(certificate);
|
updateKeyLengthOnFile(certificate);
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,6 @@
|
||||||
|
|
||||||
#include "gui/config/IServerConfig.h"
|
#include "gui/config/IServerConfig.h"
|
||||||
#include "gui/core/CoreProcess.h"
|
#include "gui/core/CoreProcess.h"
|
||||||
#include "gui/tls/TlsUtility.h"
|
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
class SettingsDialog;
|
class SettingsDialog;
|
||||||
|
|
@ -67,5 +66,4 @@ private:
|
||||||
std::unique_ptr<Ui::SettingsDialog> ui;
|
std::unique_ptr<Ui::SettingsDialog> ui;
|
||||||
const IServerConfig &m_serverConfig;
|
const IServerConfig &m_serverConfig;
|
||||||
const CoreProcess &m_coreProcess;
|
const CoreProcess &m_coreProcess;
|
||||||
deskflow::gui::TlsUtility m_tlsUtility;
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -91,23 +91,30 @@ QByteArray TlsUtility::certFingerprint(const QString &certPath)
|
||||||
return cert.digest(QCryptographicHash::Sha256);
|
return cert.digest(QCryptographicHash::Sha256);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TlsUtility::generateCertificate() const
|
bool TlsUtility::generateCertificate()
|
||||||
{
|
{
|
||||||
qDebug(
|
qDebug(
|
||||||
"generating tls certificate, "
|
"generating tls certificate, "
|
||||||
"all clients must trust the new fingerprint"
|
"all clients must trust the new fingerprint"
|
||||||
);
|
);
|
||||||
|
|
||||||
auto length = Settings::value(Settings::Security::KeySize).toInt();
|
const auto keyLength = std::max(2048, Settings::value(Settings::Security::KeySize).toInt());
|
||||||
|
const auto certPath = Settings::value(Settings::Security::Certificate).toString();
|
||||||
|
|
||||||
if (length < 2048) {
|
QFileInfo info(certPath);
|
||||||
length = 2048;
|
if (QDir dir(info.absolutePath()); !dir.exists() && !dir.mkpath(".")) {
|
||||||
qDebug("selected size too small setting certificate size to 2048");
|
qCritical("failed to create directory for tls certificate");
|
||||||
Settings::setValue(Settings::Security::KeySize, 2048);
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto certificate = Settings::value(Settings::Security::Certificate).toString();
|
try {
|
||||||
return m_certificate.generateCertificate(certificate, length);
|
deskflow::generatePemSelfSignedCert(certPath.toStdString(), keyLength);
|
||||||
|
} catch (const std::exception &e) {
|
||||||
|
qCritical() << "failed to generate self-signed pem cert: " << e.what();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
qDebug("tls certificate generated");
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace deskflow::gui
|
} // namespace deskflow::gui
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ class TlsUtility : public QObject
|
||||||
public:
|
public:
|
||||||
explicit TlsUtility(QObject *parent = nullptr);
|
explicit TlsUtility(QObject *parent = nullptr);
|
||||||
|
|
||||||
bool generateCertificate() const;
|
static bool generateCertificate();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Checks the settings values Settings::Security::TlsEnabled
|
* @brief Checks the settings values Settings::Security::TlsEnabled
|
||||||
|
|
@ -51,8 +51,6 @@ public:
|
||||||
// clang-format off
|
// clang-format off
|
||||||
static QByteArray certFingerprint(const QString &certPath = Settings::value(Settings::Security::Certificate).toString());
|
static QByteArray certFingerprint(const QString &certPath = Settings::value(Settings::Security::Certificate).toString());
|
||||||
// clang-format on
|
// clang-format on
|
||||||
private:
|
|
||||||
TlsCertificate m_certificate;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace deskflow::gui
|
} // namespace deskflow::gui
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue