diff --git a/src/lib/gui/CMakeLists.txt b/src/lib/gui/CMakeLists.txt index 1aabcda25..b6a5ad1b4 100644 --- a/src/lib/gui/CMakeLists.txt +++ b/src/lib/gui/CMakeLists.txt @@ -110,6 +110,8 @@ add_library(${target} STATIC validators/SpacesValidator.h validators/ValidationError.cpp validators/ValidationError.h + validators/IpAddressValidator.cpp + validators/IpAddressValidator.h widgets/FingerprintPreview.cpp widgets/FingerprintPreview.h widgets/KeySequenceWidget.cpp diff --git a/src/lib/gui/validators/AliasValidator.cpp b/src/lib/gui/validators/AliasValidator.cpp index 2b696aa8d..19e32ce3c 100644 --- a/src/lib/gui/validators/AliasValidator.cpp +++ b/src/lib/gui/validators/AliasValidator.cpp @@ -7,6 +7,7 @@ #include "AliasValidator.h" #include "ComputerNameValidator.h" +#include "IpAddressValidator.h" #include "SpacesValidator.h" #include @@ -16,6 +17,7 @@ namespace validators { AliasValidator::AliasValidator(QLineEdit *parent, ValidationError *error) : LineEditValidator(parent, error) { addValidator(std::make_unique("Computer name cannot contain spaces")); + addValidator(std::make_unique("Aliases may not be ip addresses")); addValidator(std::make_unique("Contains invalid characters or is too long")); } diff --git a/src/lib/gui/validators/IpAddressValidator.cpp b/src/lib/gui/validators/IpAddressValidator.cpp new file mode 100644 index 000000000..5fdf38a48 --- /dev/null +++ b/src/lib/gui/validators/IpAddressValidator.cpp @@ -0,0 +1,25 @@ +/* + * Deskflow -- mouse and keyboard sharing utility + * SPDX-FileCopyrightText: (C) 2025 Chris Rizzitello + * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception + */ + +#include "IpAddressValidator.h" + +namespace validators { + +IpAddressValidator::IpAddressValidator(const QString &message) : IStringValidator(message) +{ + // do nothing +} + +bool IpAddressValidator::validate(const QString &input) const +{ + static const auto sIpRegex = QRegularExpression( + R"((\b25[0-5]|\b2[0-4][0-9]|\b[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3})" + ); + const auto match = sIpRegex.match(input); + return !match.hasMatch(); +} + +} // namespace validators diff --git a/src/lib/gui/validators/IpAddressValidator.h b/src/lib/gui/validators/IpAddressValidator.h new file mode 100644 index 000000000..28bc87fd8 --- /dev/null +++ b/src/lib/gui/validators/IpAddressValidator.h @@ -0,0 +1,21 @@ +/* + * Deskflow -- mouse and keyboard sharing utility + * SPDX-FileCopyrightText: (C) 2025 Chris Rizzitello + * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception + */ + +#pragma once + +#include "IStringValidator.h" +#include + +namespace validators { + +class IpAddressValidator : public IStringValidator +{ +public: + explicit IpAddressValidator(const QString &message); + bool validate(const QString &input) const override; +}; + +} // namespace validators