Skip to content

Commit 0bd7432

Browse files
authored
Feature: Improve input validation & fix UI for group/profiles (#2004)
* Feature: Improve input validation * Fix: UI bug if textbox text is to large * Docs: Add #2004
1 parent 6573d76 commit 0bd7432

14 files changed

+87
-57
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using NETworkManager.Models.AWS;
2+
using System.Globalization;
3+
using System.Windows.Controls;
4+
5+
namespace NETworkManager.Validators;
6+
7+
public class AWSRegionExistsValidator : ValidationRule
8+
{
9+
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
10+
{
11+
var region = value as string;
12+
13+
if (AWSRegion.GetInstance().RegionExists(region))
14+
return ValidationResult.ValidResult;
15+
16+
return new ValidationResult(false, string.Format(Localization.Resources.Strings.AnAWSRegionNamedXDoesNotExist, region));
17+
}
18+
}

Source/NETworkManager.Validators/NoSpacesValidator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@ public override ValidationResult Validate(object value, CultureInfo cultureInfo)
1313

1414
return new ValidationResult(false, Localization.Resources.Strings.SpacesAreNotAllowed);
1515
}
16-
}
16+
}

Source/NETworkManager.Validators/PortRangeValidator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public override ValidationResult Validate(object value, CultureInfo cultureInfo)
1414

1515
foreach (var portOrRange in ((string)value).Replace(" ", "").Split(';'))
1616
{
17-
if (portOrRange.Contains("-"))
17+
if (portOrRange.Contains('-'))
1818
{
1919
var portRange = portOrRange.Split('-');
2020

Source/NETworkManager.Validators/RemoteDesktopHostnameAndPortValidator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public override ValidationResult Validate(object value, CultureInfo cultureInfo)
1212
{
1313
string hostnameAndPort = (string)value;
1414

15-
if(hostnameAndPort.Contains(":"))
15+
if(hostnameAndPort.Contains(':'))
1616
{
1717
string[] hostnameAndPortValues = hostnameAndPort.Split(':');
1818

Source/NETworkManager/Views/AWSProfileDialog.xaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@
4949
<TextBox.Text>
5050
<Binding Path="Region" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
5151
<Binding.ValidationRules>
52-
<validators:EmptyOrAWSRegionExistsValidator ValidatesOnTargetUpdated="True" />
52+
<validators:EmptyValidator ValidatesOnTargetUpdated="True" />
53+
<validators:AWSRegionExistsValidator ValidatesOnTargetUpdated="True" />
5354
</Binding.ValidationRules>
5455
</Binding>
5556
</TextBox.Text>

Source/NETworkManager/Views/AWSSessionManagerConnectDialog.xaml

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
<ComboBox x:Name="ComboBoxRegion" Grid.Column="2" Grid.Row="4" ItemsSource="{Binding RegionHistoryView}" mah:TextBoxHelper.Watermark="{x:Static localization:StaticStrings.ExampleAWSRegion}" Style="{StaticResource EditableComboBox}">
6464
<ComboBox.Text>
6565
<Binding Path="Region" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
66-
<Binding.ValidationRules>
66+
<Binding.ValidationRules>
6767
<validators:EmptyOrAWSRegionExistsValidator ValidatesOnTargetUpdated="True" />
6868
</Binding.ValidationRules>
6969
</Binding>
@@ -79,11 +79,18 @@
7979
<Button Content="{x:Static localization:Strings.Connect}" Command="{Binding ConnectCommand}" IsDefault="True" Margin="0,0,10,0">
8080
<Button.Style>
8181
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource HighlightedButton}">
82-
<Setter Property="IsEnabled" Value="True" />
82+
<Setter Property="IsEnabled" Value="False" />
8383
<Style.Triggers>
84-
<DataTrigger Binding="{Binding Path=(Validation.HasError), ElementName=ComboBoxInstanceID}" Value="True">
85-
<Setter Property="IsEnabled" Value="False" />
86-
</DataTrigger>
84+
<MultiDataTrigger>
85+
<MultiDataTrigger.Conditions>
86+
<Condition Binding="{Binding Path=(Validation.HasError), ElementName=ComboBoxInstanceID}" Value="False" />
87+
<Condition Binding="{Binding Path=(Validation.HasError), ElementName=ComboBoxProfile}" Value="False" />
88+
<Condition Binding="{Binding Path=(Validation.HasError), ElementName=ComboBoxRegion}" Value="False" />
89+
</MultiDataTrigger.Conditions>
90+
<MultiDataTrigger.Setters>
91+
<Setter Property="IsEnabled" Value="True" />
92+
</MultiDataTrigger.Setters>
93+
</MultiDataTrigger>
8794
</Style.Triggers>
8895
</Style>
8996
</Button.Style>

Source/NETworkManager/Views/AWSSessionManagerSettingsView.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@
176176
<TextBox Width="250" HorizontalAlignment="Left" mah:TextBoxHelper.Watermark="{x:Static localization:StaticStrings.ExampleAWSRegion}" Style="{StaticResource DefaultTextBox}">
177177
<TextBox.Text>
178178
<Binding Path="DefaultRegion" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
179-
<Binding.ValidationRules>
179+
<Binding.ValidationRules>
180180
<validators:EmptyOrAWSRegionExistsValidator ValidatesOnTargetUpdated="True" />
181181
</Binding.ValidationRules>
182182
</Binding>

Source/NETworkManager/Views/GroupDialog.xaml

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@
192192
</ScrollViewer>
193193
</TabItem>
194194
<TabItem Header="{x:Static localization:Strings.RemoteDesktop}">
195-
<ScrollViewer Style="{StaticResource DefaultScrollViewer}">
195+
<ScrollViewer Style="{StaticResource DefaultScrollViewer}" HorizontalScrollBarVisibility="Disabled">
196196
<StackPanel>
197197
<Grid>
198198
<Grid.Resources>
@@ -442,7 +442,7 @@
442442
</ScrollViewer>
443443
</TabItem>
444444
<TabItem Header="{x:Static localization:Strings.PowerShell}">
445-
<ScrollViewer Style="{StaticResource DefaultScrollViewer}">
445+
<ScrollViewer Style="{StaticResource DefaultScrollViewer}" HorizontalScrollBarVisibility="Disabled">
446446
<StackPanel Margin="0,0,0,20">
447447
<Grid>
448448
<Grid.Resources>
@@ -520,6 +520,7 @@
520520
<TextBox.Text>
521521
<Binding Path="PuTTY_Username" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
522522
<Binding.ValidationRules>
523+
<validators:EmptyValidator ValidatesOnTargetUpdated="True" />
523524
<validators:NoSpacesValidator ValidatesOnTargetUpdated="True" />
524525
</Binding.ValidationRules>
525526
</Binding>
@@ -530,6 +531,7 @@
530531
<TextBox.Text>
531532
<Binding Path="PuTTY_PrivateKeyFile" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
532533
<Binding.ValidationRules>
534+
<validators:EmptyValidator ValidatesOnTargetUpdated="True" />
533535
<validators:FileExistsValidator ValidatesOnTargetUpdated="True" />
534536
</Binding.ValidationRules>
535537
</Binding>
@@ -576,7 +578,7 @@
576578
</ScrollViewer>
577579
</TabItem>
578580
<TabItem Header="{x:Static localization:Strings.AWSSessionManager}">
579-
<ScrollViewer Style="{StaticResource DefaultScrollViewer}">
581+
<ScrollViewer Style="{StaticResource DefaultScrollViewer}" HorizontalScrollBarVisibility="Disabled">
580582
<StackPanel Margin="0,0,0,20">
581583
<Grid>
582584
<Grid.Resources>
@@ -615,7 +617,8 @@
615617
<TextBox.Text>
616618
<Binding Path="AWSSessionManager_Region" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
617619
<Binding.ValidationRules>
618-
<validators:EmptyOrAWSRegionExistsValidator ValidatesOnTargetUpdated="True" />
620+
<validators:EmptyValidator ValidatesOnTargetUpdated="True" />
621+
<validators:AWSRegionExistsValidator ValidatesOnTargetUpdated="True" />
619622
</Binding.ValidationRules>
620623
</Binding>
621624
</TextBox.Text>
@@ -625,7 +628,7 @@
625628
</ScrollViewer>
626629
</TabItem>
627630
<TabItem Header="{x:Static localization:Strings.TigerVNC}">
628-
<ScrollViewer Style="{StaticResource DefaultScrollViewer}">
631+
<ScrollViewer Style="{StaticResource DefaultScrollViewer}" HorizontalScrollBarVisibility="Disabled">
629632
<StackPanel Margin="0,0,0,20">
630633
<Grid>
631634
<Grid.Resources>

Source/NETworkManager/Views/PowerShellConnectDialog.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
<Binding Path="Host" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
5959
<Binding.ValidationRules>
6060
<validators:EmptyValidator ValidatesOnTargetUpdated="True" />
61-
<validators:NoSpacesValidator ValidatesOnTargetUpdated="True" />
61+
<validators:IPAddressOrHostnameValidator ValidatesOnTargetUpdated="True" />
6262
</Binding.ValidationRules>
6363
</Binding>
6464
</ComboBox.Text>

0 commit comments

Comments
 (0)