refactor: TlsUtility::generateCertificate() handle all the steps internally and make method static
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
};
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Reference in New Issue
Block a user