From 6bdeafcf8c78e145595f52e885356be1210abe91 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 4 Dec 2022 22:08:56 -0800 Subject: [PATCH] Fixed: Improve Bind Address validation and help text Closes #622 --- frontend/src/Settings/General/HostSettings.js | 2 +- .../IsValidIPAddressFixture.cs | 25 +++++++++++++++++++ .../Extensions/StringExtensions.cs | 22 ++++++++++++++++ src/NzbDrone.Core/Validation/IpValidation.cs | 22 +++------------- .../Config/HostConfigController.cs | 4 +-- 5 files changed, 53 insertions(+), 22 deletions(-) create mode 100644 src/NzbDrone.Common.Test/ExtensionTests/StringExtensionTests/IsValidIPAddressFixture.cs diff --git a/frontend/src/Settings/General/HostSettings.js b/frontend/src/Settings/General/HostSettings.js index e22f18698..bcde83670 100644 --- a/frontend/src/Settings/General/HostSettings.js +++ b/frontend/src/Settings/General/HostSettings.js @@ -39,7 +39,7 @@ function HostSettings(props) { ValidIp4Address(this IRuleBuilder ruleBuilder) + public static IRuleBuilderOptions ValidIpAddress(this IRuleBuilder ruleBuilder) { - return ruleBuilder.Must(x => - { - IPAddress parsedAddress; - - if (!IPAddress.TryParse(x, out parsedAddress)) - { - return false; - } - - if (parsedAddress.Equals(IPAddress.Parse("255.255.255.255"))) - { - return false; - } - - return parsedAddress.AddressFamily == AddressFamily.InterNetwork; - }).WithMessage("Must contain wildcard (*) or a valid IPv4 Address"); + return ruleBuilder.Must(x => x.IsValidIpAddress()).WithMessage("Must contain wildcard (*) or a valid IP Address"); } public static IRuleBuilderOptions NotListenAllIp4Address(this IRuleBuilder ruleBuilder) diff --git a/src/Sonarr.Api.V3/Config/HostConfigController.cs b/src/Sonarr.Api.V3/Config/HostConfigController.cs index 121b76bde..883e3b296 100644 --- a/src/Sonarr.Api.V3/Config/HostConfigController.cs +++ b/src/Sonarr.Api.V3/Config/HostConfigController.cs @@ -33,9 +33,9 @@ namespace Sonarr.Api.V3.Config _userService = userService; SharedValidator.RuleFor(c => c.BindAddress) - .ValidIp4Address() + .ValidIpAddress() .NotListenAllIp4Address() - .When(c => c.BindAddress != "*"); + .When(c => c.BindAddress != "*" && c.BindAddress != "localhost"); SharedValidator.RuleFor(c => c.Port).ValidPort();