diff --git a/src/lib/client/Client.cpp b/src/lib/client/Client.cpp index 9591e0864..534ddac9a 100644 --- a/src/lib/client/Client.cpp +++ b/src/lib/client/Client.cpp @@ -52,7 +52,7 @@ Client::Client( m_socketFactory(socketFactory), m_screen(screen), m_events(events), - m_useSecureNetwork(args.m_enableCrypto), + m_useSecureNetwork(Settings::value(Settings::Security::TlsEnabled).toBool()), m_args(args) { assert(m_socketFactory != nullptr); @@ -388,7 +388,7 @@ void Client::setupConnecting() { assert(m_stream != nullptr); - if (m_args.m_enableCrypto) { + if (Settings::value(Settings::Security::TlsEnabled).toBool()) { m_events->addHandler(EventTypes::DataSocketSecureConnected, m_stream->getEventTarget(), [this](const auto &) { handleConnected(); }); diff --git a/src/lib/deskflow/App.h b/src/lib/deskflow/App.h index 8a45dc7dd..2de702ca7 100644 --- a/src/lib/deskflow/App.h +++ b/src/lib/deskflow/App.h @@ -131,7 +131,6 @@ private: constexpr static auto s_helpGeneralArgs = // " -1, --no-restart do not try to restart on failure.\n" "* --restart restart the server automatically if it fails.\n" - " --enable-crypto enable TLS encryption.\n" " --tls-cert specify the path to the TLS certificate file.\n"; constexpr static auto s_helpVersionArgs = // diff --git a/src/lib/deskflow/ArgParser.cpp b/src/lib/deskflow/ArgParser.cpp index 65df9eaff..9ec4096a8 100644 --- a/src/lib/deskflow/ArgParser.cpp +++ b/src/lib/deskflow/ArgParser.cpp @@ -139,8 +139,6 @@ bool ArgParser::parseGenericArgs(int argc, const char *const *argv, int &i) cons // HACK: stop error happening when using portable (deskflowp) } else if (isArg(i, argc, argv, nullptr, "--client")) { // HACK: stop error happening when using portable (deskflowp) - } else if (isArg(i, argc, argv, nullptr, "--enable-crypto")) { - argsBase().m_enableCrypto = true; } else if (isArg(i, argc, argv, nullptr, "--tls-cert", 1)) { argsBase().m_tlsCertFile = argv[++i]; } else if (isArg(i, argc, argv, nullptr, "--prevent-sleep")) { diff --git a/src/lib/deskflow/ArgsBase.h b/src/lib/deskflow/ArgsBase.h index 70c2e4dba..e7de90133 100644 --- a/src/lib/deskflow/ArgsBase.h +++ b/src/lib/deskflow/ArgsBase.h @@ -50,9 +50,6 @@ public: /// @brief Will cause the application to exit with fail code when set to true bool m_shouldExitFail = false; - /// @brief Should the connections be TLS encrypted - bool m_enableCrypto = false; - /// @brief Contains the location of the TLS certificate file std::string m_tlsCertFile; diff --git a/src/lib/deskflow/CoreArgParser.cpp b/src/lib/deskflow/CoreArgParser.cpp index 4fbc52d7f..880800227 100644 --- a/src/lib/deskflow/CoreArgParser.cpp +++ b/src/lib/deskflow/CoreArgParser.cpp @@ -72,6 +72,13 @@ void CoreArgParser::parse() } else { Settings::setValue(Settings::Log::ToFile, false); } + + if (m_parser.isSet(CoreArgs::secureOption)) { + bool value = + ((m_parser.value(CoreArgs::secureOption).toLower() == "true") || (m_parser.value(CoreArgs::secureOption) == "1") + ); + Settings::setValue(Settings::Security::TlsEnabled, value); + } } [[noreturn]] void CoreArgParser::showHelpText() const diff --git a/src/lib/deskflow/CoreArgs.h b/src/lib/deskflow/CoreArgs.h index 306e76a00..bc7ae780c 100644 --- a/src/lib/deskflow/CoreArgs.h +++ b/src/lib/deskflow/CoreArgs.h @@ -38,6 +38,9 @@ struct CoreArgs inline static const auto logFileOption = QCommandLineOption({"l", "log"}, "Write messages to file", "file"); - inline static const auto options = {helpOption, versionOption, configOption, interfaceOption, - portOption, nameOption, logLevelOption, logFileOption}; + inline static const auto secureOption = + QCommandLineOption("secure", "Enable TLS encryption (default: true)", "value"); + + inline static const auto options = {helpOption, versionOption, configOption, interfaceOption, portOption, + nameOption, logLevelOption, logFileOption, secureOption}; }; diff --git a/src/lib/deskflow/ServerApp.cpp b/src/lib/deskflow/ServerApp.cpp index 0bb26cc09..16e60dbcc 100644 --- a/src/lib/deskflow/ServerApp.cpp +++ b/src/lib/deskflow/ServerApp.cpp @@ -516,7 +516,7 @@ ClientListener *ServerApp::openClientListener(const NetworkAddress &address) { using enum SecurityLevel; auto securityLevel = PlainText; - if (args().m_enableCrypto) { + if (Settings::value(Settings::Security::TlsEnabled).toBool()) { if (args().m_chkPeerCert) { securityLevel = PeerAuth; } else { diff --git a/src/lib/gui/core/CoreProcess.cpp b/src/lib/gui/core/CoreProcess.cpp index a7980c585..dd813c4b1 100644 --- a/src/lib/gui/core/CoreProcess.cpp +++ b/src/lib/gui/core/CoreProcess.cpp @@ -456,10 +456,6 @@ void CoreProcess::cleanup() bool CoreProcess::addGenericArgs(QStringList &args) const { - if (Settings::value(Settings::Security::TlsEnabled).toBool()) { - args << "--enable-crypto"; - } - if (Settings::value(Settings::Core::PreventSleep).toBool()) { args << "--prevent-sleep"; } diff --git a/src/unittests/deskflow/ArgParserTests.cpp b/src/unittests/deskflow/ArgParserTests.cpp index cd455967f..51b0d382a 100644 --- a/src/unittests/deskflow/ArgParserTests.cpp +++ b/src/unittests/deskflow/ArgParserTests.cpp @@ -238,12 +238,11 @@ void ArgParserTests::client_commonArgs() { deskflow::ClientArgs clientArgs; clientArgs.m_enableLangSync = false; - const int argc = 5; - std::array kLangCmd = {"stub", "--enable-crypto", "--tls-cert", "tlsCertPath", "--prevent-sleep"}; + const int argc = 4; + std::array kLangCmd = {"stub", "--tls-cert", "tlsCertPath", "--prevent-sleep"}; m_parser.parseClientArgs(clientArgs, argc, kLangCmd.data()); - QVERIFY(clientArgs.m_enableCrypto); QVERIFY(clientArgs.m_preventSleep); QCOMPARE(clientArgs.m_tlsCertFile, "tlsCertPath"); } diff --git a/src/unittests/deskflow/CoreArgParserTests.cpp b/src/unittests/deskflow/CoreArgParserTests.cpp index 31936f822..2ca164c91 100644 --- a/src/unittests/deskflow/CoreArgParserTests.cpp +++ b/src/unittests/deskflow/CoreArgParserTests.cpp @@ -110,4 +110,44 @@ void CoreArgParserTests::logFileWithSpace() QCOMPARE(Settings::value(Settings::Log::File).toString(), "mock filename"); } +void CoreArgParserTests::secure_false() +{ + QStringList args = {"stub", "client", "--secure", "false"}; + + CoreArgParser parser(args); + parser.parse(); + + QVERIFY(!Settings::value(Settings::Security::TlsEnabled).toBool()); +} + +void CoreArgParserTests::secure_true() +{ + QStringList args = {"stub", "client", "--secure", "true"}; + + CoreArgParser parser(args); + parser.parse(); + + QVERIFY(Settings::value(Settings::Security::TlsEnabled).toBool()); +} + +void CoreArgParserTests::secure_0() +{ + QStringList args = {"stub", "client", "--secure", "0"}; + + CoreArgParser parser(args); + parser.parse(); + + QVERIFY(!Settings::value(Settings::Security::TlsEnabled).toBool()); +} + +void CoreArgParserTests::secure_1() +{ + QStringList args = {"stub", "client", "--secure", "1"}; + + CoreArgParser parser(args); + parser.parse(); + + QVERIFY(Settings::value(Settings::Security::TlsEnabled).toBool()); +} + QTEST_MAIN(CoreArgParserTests) diff --git a/src/unittests/deskflow/CoreArgParserTests.h b/src/unittests/deskflow/CoreArgParserTests.h index 421ce5b68..9d3548f11 100644 --- a/src/unittests/deskflow/CoreArgParserTests.h +++ b/src/unittests/deskflow/CoreArgParserTests.h @@ -23,6 +23,10 @@ private Q_SLOTS: void logLevel(); void logFile(); void logFileWithSpace(); + void secure_false(); + void secure_true(); + void secure_0(); + void secure_1(); private: inline static const QString m_settingsPath = QStringLiteral("tmp/test");