feat: add config for client cert required

based on barrier: 8bc280e0
This commit is contained in:
sithlord48 2024-11-29 12:03:51 -05:00 committed by Nick Bolton
parent 3e7b14cbd4
commit 638349b48a
6 changed files with 37 additions and 1 deletions

View file

@ -192,6 +192,7 @@ void SettingsDialog::accept()
m_appConfig.setCloseToTray(ui->m_pCheckBoxCloseToTray->isChecked());
m_appConfig.setInvertConnection(ui->m_pInvertConnection->isChecked());
m_appConfig.setColorfulTrayIcon(ui->rb_icon_colorful->isChecked());
m_appConfig.setRequireClientCerts(ui->chkRequireClientCert->isChecked());
QDialog::accept();
}
@ -261,6 +262,8 @@ void SettingsDialog::updateTlsControls()
ui->m_pCheckBoxEnableTls->setEnabled(writable);
ui->m_pCheckBoxEnableTls->setChecked(writable && tlsEnabled);
ui->m_pLineEditTlsCertPath->setText(m_appConfig.tlsCertPath());
ui->chkRequireClientCert->setEnabled(writable);
ui->chkRequireClientCert->setChecked(m_appConfig.requireClientCerts());
}
void SettingsDialog::updateTlsControlsEnabled()
@ -276,6 +279,7 @@ void SettingsDialog::updateTlsControlsEnabled()
ui->m_pLineEditTlsCertPath->setEnabled(enabled);
ui->m_pPushButtonTlsCertPath->setEnabled(enabled);
ui->m_pPushButtonTlsRegenCert->setEnabled(enabled);
ui->chkRequireClientCert->setEnabled(enabled);
}
bool SettingsDialog::isClientMode() const

View file

@ -360,6 +360,13 @@
</item>
</layout>
</item>
<item>
<widget class="QCheckBox" name="chkRequireClientCert">
<property name="text">
<string>Require client certificates</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>

View file

@ -1,5 +1,6 @@
/*
* Deskflow -- mouse and keyboard sharing utility
* SPDX-FileCopyrightText: (C) 2025 Deskflow Developers
* SPDX-FileCopyrightText: (C) 2012 Symless Ltd.
* SPDX-FileCopyrightText: (C) 2008 Volker Lanz <vl@fidra.de>
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
@ -77,6 +78,7 @@ const char *const AppConfig::m_SettingsName[] = {
"enableUpdateCheck",
"logExpanded",
"colorfulIcon",
"requireClientCerts",
};
AppConfig::AppConfig(deskflow::gui::IConfigScopes &scopes, std::shared_ptr<Deps> deps)
@ -137,6 +139,7 @@ void AppConfig::recallFromCurrentScope()
m_TlsEnabled = getFromCurrentScope(kTlsEnabled, m_TlsEnabled).toBool();
m_TlsCertPath = getFromCurrentScope(kTlsCertPath, m_TlsCertPath).toString();
m_TlsKeyLength = getFromCurrentScope(kTlsKeyLength, m_TlsKeyLength).toInt();
m_RequireClientCert = getFromCurrentScope(kRequireClientCert, m_RequireClientCert).toBool();
m_MainWindowPosition =
getFromCurrentScope<QPoint>(kMainWindowPosition, [](const QVariant &v) { return v.toPoint(); });
m_MainWindowSize = getFromCurrentScope<QSize>(kMainWindowSize, [](const QVariant &v) { return v.toSize(); });
@ -203,6 +206,7 @@ void AppConfig::commit()
setInCurrentScope(kEnableUpdateCheck, m_EnableUpdateCheck);
setInCurrentScope(kLogExpanded, m_logExpanded);
setInCurrentScope(kColorfulIcon, m_colorfulTrayIcon);
setInCurrentScope(kRequireClientCert, m_RequireClientCert);
}
if (m_TlsChanged) {
@ -554,6 +558,11 @@ bool AppConfig::clientGroupChecked() const
return m_ClientGroupChecked;
}
bool AppConfig::requireClientCerts() const
{
return m_RequireClientCert;
}
const QString &AppConfig::serverHostname() const
{
return m_ServerHostname;
@ -742,6 +751,13 @@ void AppConfig::setInvertConnection(bool value)
Q_EMIT invertConnectionChanged();
}
void AppConfig::setRequireClientCerts(bool requireClientCerts)
{
if (requireClientCerts == m_RequireClientCert)
return;
m_RequireClientCert = requireClientCerts;
}
void AppConfig::setMainWindowSize(const QSize &size)
{
m_MainWindowSize = size;

View file

@ -1,5 +1,6 @@
/*
* Deskflow -- mouse and keyboard sharing utility
* SPDX-FileCopyrightText: (C) 2025 Deskflow Developers
* SPDX-FileCopyrightText: (C) 2012 Symless Ltd.
* SPDX-FileCopyrightText: (C) 2008 Volker Lanz <vl@fidra.de>
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
@ -99,7 +100,8 @@ private:
kShowCloseReminder = 42,
kEnableUpdateCheck = 43,
kLogExpanded = 44,
kColorfulIcon = 45
kColorfulIcon = 45,
kRequireClientCert = 46
};
public:
@ -159,6 +161,7 @@ public:
bool enableService() const override;
bool closeToTray() const override;
bool clientGroupChecked() const override;
bool requireClientCerts() const override;
//
// Getters (new methods)
@ -198,6 +201,7 @@ public:
void setTlsCertPath(const QString &path) override;
void setTlsKeyLength(int length) override;
void setInvertConnection(bool value) override;
void setRequireClientCerts(bool requireClientCerts) override;
//
// Setters (new methods)
@ -325,6 +329,7 @@ private:
std::optional<bool> m_EnableUpdateCheck;
bool m_logExpanded = true;
bool m_colorfulTrayIcon = false;
bool m_RequireClientCert = true;
/**
* @brief Flag is set when any TLS is setting is changed, and is reset

View file

@ -60,6 +60,7 @@ public:
virtual bool isActiveScopeSystem() const = 0;
virtual bool isActiveScopeWritable() const = 0;
virtual bool clientGroupChecked() const = 0;
virtual bool requireClientCerts() const = 0;
//
// Setters
@ -83,6 +84,7 @@ public:
virtual void setEnableService(bool enableService) = 0;
virtual void setCloseToTray(bool closeToTray) = 0;
virtual void setInvertConnection(bool invertConnection) = 0;
virtual void setRequireClientCerts(bool requireClientCerts) = 0;
};
} // namespace deskflow::gui

View file

@ -61,6 +61,7 @@ public:
MOCK_METHOD(bool, isActiveScopeSystem, (), (const, override));
MOCK_METHOD(bool, isActiveScopeWritable, (), (const, override));
MOCK_METHOD(bool, clientGroupChecked, (), (const, override));
MOCK_METHOD(bool, requireClientCerts, (), (const, override));
//
// Setters
@ -84,6 +85,7 @@ public:
MOCK_METHOD(void, setEnableService, (bool enableService), (override));
MOCK_METHOD(void, setCloseToTray, (bool closeToTray), (override));
MOCK_METHOD(void, setInvertConnection, (bool invertConnection), (override));
MOCK_METHOD(void, setRequireClientCerts, (bool requireClientCerts), (override));
private:
const QString m_stub = "stub";