Skip to content

Commit

Permalink
Merge pull request #61 from ewilliams0305/60-factory-exceptions-as-va…
Browse files Browse the repository at this point in the history
…lidation-error

added message containing validation failures
  • Loading branch information
ewilliams0305 authored Jun 2, 2024
2 parents 3a4a76f + ff18032 commit 4fe6aa5
Show file tree
Hide file tree
Showing 7 changed files with 209 additions and 124 deletions.
185 changes: 122 additions & 63 deletions source/Kangaroo.UI/ViewModels/ScanConfiguratorViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Threading.Tasks;
using CommunityToolkit.Mvvm.ComponentModel;
using Kangaroo.UI.Controls;
using Kangaroo.UI.Models;
Expand Down Expand Up @@ -67,6 +68,9 @@ public ScanConfiguratorViewModel(IScannerFactory factory)
[ObservableProperty]
private string _netmaskAddress = string.Empty;

[ObservableProperty]
private string _validationError = string.Empty;

partial void OnSelectedModeChanged(ScanMode value)
{
_factory.OnScannerCreated?.Invoke((null, null, false));
Expand Down Expand Up @@ -94,14 +98,14 @@ partial void OnAdapterChanged(NetworkAdapter? value)

if (Adapter != null)
{
_factory.CreateScanner(new ScanConfiguration()
ValidationError = TryCreateScanner(new ScanConfiguration()
{
NetworkInterface = AddressFactory.GetInterfaces().First(i => i.Name == Adapter.Name),
ScanMode = ScanMode.NetworkAdapter,
Timeout = TimeSpan.FromSeconds(1),
Ttl = 10,
WithHttp = true
});
}) ?? string.Empty;
}
}

Expand All @@ -112,21 +116,30 @@ partial void OnStartAddressChanged(string value)
return;
}

if (IsValidIpAddress(StartAddress, out var start) &&
IsValidIpAddress(EndAddress, out var end))
if (!IsValidIpAddress(StartAddress, out var start))
{
_factory.CreateScanner(new ScanConfiguration()
{
ScanMode = ScanMode.AddressRange,
Timeout = TimeSpan.FromSeconds(1),
Ttl = 10,
WithHttp = true,
StartAddress = start,
EndAddress = end
});
ValidationError = $"{value} is not a valid starting IP address";
_factory.OnScannerCreated?.Invoke((null, null, false));
return;
}
_factory.OnScannerCreated?.Invoke((null, null, false));

if (!IsValidIpAddress(EndAddress, out var end))
{
ValidationError = "";
_factory.OnScannerCreated?.Invoke((null, null, false));
return;
}

ValidationError = TryCreateScanner(new ScanConfiguration()
{
ScanMode = ScanMode.AddressRange,
Timeout = TimeSpan.FromSeconds(1),
Ttl = 10,
WithHttp = true,
StartAddress = start,
EndAddress = end
}) ?? string.Empty;

}

partial void OnEndAddressChanged(string value)
Expand All @@ -136,65 +149,82 @@ partial void OnEndAddressChanged(string value)
return;
}

if (IsValidIpAddress(StartAddress, out var start) &&
IsValidIpAddress(EndAddress, out var end))
if (!IsValidIpAddress(EndAddress, out var end))
{

_factory.CreateScanner(new ScanConfiguration()
{
ScanMode = ScanMode.AddressRange,
Timeout = TimeSpan.FromSeconds(1),
Ttl = 10,
WithHttp = true,
StartAddress = start,
EndAddress = end
});
ValidationError = $"{value} is not a valid ending IP address";
_factory.OnScannerCreated?.Invoke((null, null, false));

return;
}

if (!IsValidIpAddress(StartAddress, out var start))
{
ValidationError = $"{StartAddress} is not a valid starting IP address";
_factory.OnScannerCreated?.Invoke((null, null, false));

_factory.OnScannerCreated?.Invoke((null, null, false));
return;
}

ValidationError = TryCreateScanner(new ScanConfiguration()
{
ScanMode = ScanMode.AddressRange,
Timeout = TimeSpan.FromSeconds(1),
Ttl = 10,
WithHttp = true,
StartAddress = start,
EndAddress = end
}) ?? string.Empty;
}

partial void OnIpAddressChanged(string value)
{
if (SelectedMode == ScanMode.SingleAddress)
{
if (IsValidIpAddress(IpAddress, out var singleAddress))
if (!IsValidIpAddress(IpAddress, out var singleAddress))
{
_factory.CreateScanner(new ScanConfiguration()
{
ScanMode = SelectedMode,
Timeout = TimeSpan.FromSeconds(1),
Ttl = 10,
WithHttp = true,
SpecificAddress = singleAddress,
});
return;
ValidationError = $"{value} is not a valid IP address";
_factory.OnScannerCreated?.Invoke((null, null, false));
}
_factory.OnScannerCreated?.Invoke((null, null, false));
ValidationError = TryCreateScanner(new ScanConfiguration()
{
ScanMode = SelectedMode,
Timeout = TimeSpan.FromSeconds(1),
Ttl = 10,
WithHttp = true,
SpecificAddress = singleAddress,
}) ?? string.Empty;

return;
}

if (SelectedMode != ScanMode.NetworkSubnet)
{
return;
}

if (IsValidIpAddress(IpAddress, out var ip) &&
IsValidIpAddress(NetmaskAddress, out var mask))
if (!IsValidIpAddress(IpAddress, out var ip))
{
_factory.CreateScanner(new ScanConfiguration()
{
ScanMode = SelectedMode,
Timeout = TimeSpan.FromSeconds(1),
Ttl = 10,
WithHttp = true,
SpecificAddress = ip,
NetmaskAddress = mask
});
ValidationError = $"{value} is not a valid IP address";
_factory.OnScannerCreated?.Invoke((null, null, false));
return;
}
_factory.OnScannerCreated?.Invoke((null, null, false));

if (!IsValidIpAddress(NetmaskAddress, out var mask))
{
_factory.OnScannerCreated?.Invoke((null, null, false));
ValidationError = "";
return;
}

ValidationError = TryCreateScanner(new ScanConfiguration()
{
ScanMode = SelectedMode,
Timeout = TimeSpan.FromSeconds(1),
Ttl = 10,
WithHttp = true,
SpecificAddress = ip,
NetmaskAddress = mask
})?? string.Empty;
}
partial void OnNetmaskAddressChanged(string value)
{
Expand All @@ -203,22 +233,51 @@ partial void OnNetmaskAddressChanged(string value)
return;
}

if (IsValidIpAddress(IpAddress, out var ip) &&
IsValidIpAddress(NetmaskAddress, out var mask))
if (!IsValidIpAddress(NetmaskAddress, out var mask))
{

_factory.CreateScanner(new ScanConfiguration()
{
ScanMode = SelectedMode,
Timeout = TimeSpan.FromSeconds(1),
Ttl = 10,
WithHttp = true,
SpecificAddress = ip,
NetmaskAddress = mask
});
ValidationError = $"{value} invalid subnet mask IP address";
_factory.OnScannerCreated?.Invoke((null, null, false));
return;
}
_factory.OnScannerCreated?.Invoke((null, null, false));

if (!IsValidIpAddress(IpAddress, out var ip))
{
ValidationError = $"{IpAddress} invalid IP address";
_factory.OnScannerCreated?.Invoke((null, null, false));
return;
}

ValidationError = TryCreateScanner(new ScanConfiguration()
{
ScanMode = SelectedMode,
Timeout = TimeSpan.FromSeconds(1),
Ttl = 10,
WithHttp = true,
SpecificAddress = ip,
NetmaskAddress = mask
})?? string.Empty;
}

private string? TryCreateScanner(ScanConfiguration configuration)
{
try
{
_factory.CreateScanner(configuration);
return null;
}
catch (Exception e)
{
return e switch
{
InvalidIpAddressException ex => ex.Message,
InvalidIpRangeException ex => ex.Message,
InvalidNetworkAdapterException ex => ex.Message,
InvalidSubnetException ex => ex.Message,
InvalidTimeoutException ex => ex.Message,
InvalidTtlException ex => ex.Message,
_ => e.Message
};
}
}

private bool IsValidIpAddress(string? ipAddressValue, out IPAddress? ipAddress)
Expand Down
Loading

0 comments on commit 4fe6aa5

Please sign in to comment.