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/core/CoreProcess.h"
#include "gui/ipc/DaemonIpcClient.h"
#include "gui/tls/TlsUtility.h"
#include "gui/widgets/LogDock.h"
#include "net/FingerprintDatabase.h"
@ -63,7 +64,6 @@ MainWindow::MainWindow()
m_coreProcess(m_serverConfig),
m_serverConnection(this, m_serverConfig),
m_clientConnection(this),
m_tlsUtility(this),
m_trayIcon{new QSystemTrayIcon(this)},
m_guiDupeChecker{new QLocalServer(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)) {
if (TlsUtility::isEnabled() && !TlsUtility::isCertValid()) {
qWarning() << tr("invalid certificate, generating a new one");
m_tlsUtility.generateCertificate();
TlsUtility::generateCertificate();
}
updateSecurityIcon(m_lblSecurityStatus->isVisible());
return;
@ -1173,7 +1173,7 @@ QString MainWindow::trustedFingerprintDatabase() const
bool MainWindow::generateCertificate()
{
const auto certificate = Settings::value(Settings::Security::Certificate).toString();
if (!QFile::exists(certificate) && !m_tlsUtility.generateCertificate()) {
if (!QFile::exists(certificate) && !TlsUtility::generateCertificate()) {
return false;
}

View File

@ -22,7 +22,6 @@
#include "gui/core/CoreProcess.h"
#include "gui/core/ServerConnection.h"
#include "gui/core/WaylandWarnings.h"
#include "gui/tls/TlsUtility.h"
#include "net/Fingerprint.h"
#ifdef Q_OS_MACOS
@ -180,7 +179,6 @@ private:
deskflow::gui::CoreProcess m_coreProcess;
deskflow::gui::ServerConnection m_serverConnection;
deskflow::gui::ClientConnection m_clientConnection;
deskflow::gui::TlsUtility m_tlsUtility;
QSize m_expandedSize = QSize();
QStringList m_checkedClients;
QStringList m_checkedServers;

View File

@ -13,7 +13,6 @@
#include "common/I18N.h"
#include "common/Settings.h"
#include "gui/Messages.h"
#include "gui/tls/TlsCertificate.h"
#include "gui/tls/TlsUtility.h"
#include <QComboBox>
@ -27,8 +26,7 @@ SettingsDialog::SettingsDialog(QWidget *parent, const IServerConfig &serverConfi
: QDialog(parent),
ui{std::make_unique<Ui::SettingsDialog>()},
m_serverConfig(serverConfig),
m_coreProcess(coreProcess),
m_tlsUtility(this)
m_coreProcess(coreProcess)
{
ui->setupUi(this);
@ -90,7 +88,7 @@ void SettingsDialog::initConnections() const
void SettingsDialog::regenCertificates()
{
if (m_tlsUtility.generateCertificate()) {
if (TlsUtility::generateCertificate()) {
QMessageBox::information(this, tr("TLS Certificate Regenerated"), tr("TLS certificate regenerated successfully."));
const auto certificate = Settings::value(Settings::Security::Certificate).toString();
updateKeyLengthOnFile(certificate);

View File

@ -11,7 +11,6 @@
#include "gui/config/IServerConfig.h"
#include "gui/core/CoreProcess.h"
#include "gui/tls/TlsUtility.h"
namespace Ui {
class SettingsDialog;
@ -67,5 +66,4 @@ private:
std::unique_ptr<Ui::SettingsDialog> ui;
const IServerConfig &m_serverConfig;
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);
}
bool TlsUtility::generateCertificate() const
bool TlsUtility::generateCertificate()
{
qDebug(
"generating tls certificate, "
"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) {
length = 2048;
qDebug("selected size too small setting certificate size to 2048");
Settings::setValue(Settings::Security::KeySize, 2048);
QFileInfo info(certPath);
if (QDir dir(info.absolutePath()); !dir.exists() && !dir.mkpath(".")) {
qCritical("failed to create directory for tls certificate");
return false;
}
const auto certificate = Settings::value(Settings::Security::Certificate).toString();
return m_certificate.generateCertificate(certificate, length);
try {
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

View File

@ -21,7 +21,7 @@ class TlsUtility : public QObject
public:
explicit TlsUtility(QObject *parent = nullptr);
bool generateCertificate() const;
static bool generateCertificate();
/**
* @brief Checks the settings values Settings::Security::TlsEnabled
@ -51,8 +51,6 @@ public:
// clang-format off
static QByteArray certFingerprint(const QString &certPath = Settings::value(Settings::Security::Certificate).toString());
// clang-format on
private:
TlsCertificate m_certificate;
};
} // namespace deskflow::gui