refactor: TlsUtility::generateCertificate() handle all the steps internally and make method static

This commit is contained in:
sithlord48 2025-11-22 12:35:41 -05:00 committed by Nick Bolton
parent 0d5d66b880
commit c13421c20a
6 changed files with 21 additions and 22 deletions

View file

@ -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;
} }

View file

@ -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;

View file

@ -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);

View file

@ -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;
}; };

View file

@ -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

View file

@ -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