Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Windows.Data;
using NETworkManager.Localization.Resources;
using NETworkManager.Models.Firewall;

namespace NETworkManager.Converters;

/// <summary>
/// Convert <see cref="FirewallRuleHiddenProperties" /> to a translated, comma-separated <see cref="string" />
/// (e.g. "ICMP types, Service").
/// </summary>
public sealed class FirewallRuleHiddenPropertiesToStringConverter : IValueConverter
{
/// <summary>
/// Convert <see cref="FirewallRuleHiddenProperties" /> to a translated, comma-separated <see cref="string" />.
/// </summary>
/// <param name="value">Object from type <see cref="FirewallRuleHiddenProperties" />.</param>
/// <param name="targetType"></param>
/// <param name="parameter"></param>
/// <param name="culture"></param>
/// <returns>Translated <see cref="FirewallRuleHiddenProperties" />.</returns>
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value is not FirewallRuleHiddenProperties properties
? "-/-"
: string.Join(", ", GetNames(properties));
}

/// <summary>
/// !!! Method not implemented !!!
/// </summary>
/// <param name="value"></param>
/// <param name="targetType"></param>
/// <param name="parameter"></param>
/// <param name="culture"></param>
/// <returns></returns>
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}

/// <summary>
/// Gets the translated names of the hidden properties (e.g. "ICMP types", "Service").
/// Also used for the warning shown before a rule is copied.
/// </summary>
/// <param name="properties">The hidden properties.</param>
/// <returns>The translated names.</returns>
public static List<string> GetNames(FirewallRuleHiddenProperties properties)
{
var names = new List<string>();

if (properties.HasFlag(FirewallRuleHiddenProperties.IcmpTypes))
names.Add(Strings.IcmpTypes);

if (properties.HasFlag(FirewallRuleHiddenProperties.Service))
names.Add(Strings.Service);

if (properties.HasFlag(FirewallRuleHiddenProperties.Package))
names.Add(Strings.AppPackage);

if (properties.HasFlag(FirewallRuleHiddenProperties.InterfaceAlias))
names.Add(Strings.NetworkAdapters);

if (properties.HasFlag(FirewallRuleHiddenProperties.Security))
names.Add(Strings.UsersAndAuthentication);

return names;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
using System;
using System.Globalization;
using System.Windows.Data;
using NETworkManager.Localization;
using NETworkManager.Models.Firewall;

namespace NETworkManager.Converters;

/// <summary>
/// Convert <see cref="FirewallRuleSource" /> to translated <see cref="string" /> or vice versa.
/// </summary>
public sealed class FirewallRuleSourceToStringConverter : IValueConverter
{
/// <summary>
/// Convert <see cref="FirewallRuleSource" /> to translated <see cref="string" />.
/// </summary>
/// <param name="value">Object from type <see cref="FirewallRuleSource" />.</param>
/// <param name="targetType"></param>
/// <param name="parameter"></param>
/// <param name="culture"></param>
/// <returns>Translated <see cref="FirewallRuleSource" />.</returns>
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value is not FirewallRuleSource source
? "-/-"
: ResourceTranslator.Translate(ResourceIdentifier.FirewallRuleSource, source);
}

/// <summary>
/// !!! Method not implemented !!!
/// </summary>
/// <param name="value"></param>
/// <param name="targetType"></param>
/// <param name="parameter"></param>
/// <param name="culture"></param>
/// <returns></returns>
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
1 change: 1 addition & 0 deletions Source/NETworkManager.Localization/ResourceIdentifier.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,6 @@ public enum ResourceIdentifier
FirewallInterfaceType,
FirewallRuleDirection,
FirewallRuleAction,
FirewallRuleSource,
NeighborState
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,12 @@
<data name="ExampleFirewallAddresses" xml:space="preserve">
<value>10.0.0.0/8; LocalSubnet</value>
</data>
<data name="ExampleFirewallLocalAddresses" xml:space="preserve">
<value>192.168.1.10; 10.0.0.0/8</value>
</data>
<data name="ExampleFirewallProgram" xml:space="preserve">
<value>C:\Program Files\GameServer\server.exe</value>
</data>
<data name="ActiveDirectorySearchBase" xml:space="preserve">
<value>OU=Computers,DC=borntoberoot,DC=net</value>
</data>
Expand Down
63 changes: 63 additions & 0 deletions Source/NETworkManager.Localization/Resources/Strings.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 21 additions & 0 deletions Source/NETworkManager.Localization/Resources/Strings.resx
Original file line number Diff line number Diff line change
Expand Up @@ -4415,6 +4415,9 @@ The new rule may apply to more traffic than the original rule (e.g. to all servi
<data name="FailedToLoadFirewallRulesMessage" xml:space="preserve">
<value>Failed to load firewall rules. {0}</value>
</data>
<data name="FirewallRulesLoadedWithErrorsMessage" xml:space="preserve">
<value>Reloaded at {0}, but not all firewall rules or their properties could be loaded, so the list may be incomplete (see log file for details). {1}</value>
</data>
<data name="DeleteFirewallRuleMessage" xml:space="preserve">
<value>The selected firewall rule is permanently deleted:

Expand Down Expand Up @@ -4492,6 +4495,21 @@ The new rule may apply to more traffic than the original rule (e.g. to all servi
<data name="FirewallRuleAction_Allow" xml:space="preserve">
<value>Allow</value>
</data>
<data name="FirewallRuleSource_Local" xml:space="preserve">
<value>Local</value>
</data>
<data name="FirewallRuleSource_GroupPolicy" xml:space="preserve">
<value>Group Policy</value>
</data>
<data name="FirewallRuleSource_MDM" xml:space="preserve">
<value>Mobile Device Management (MDM)</value>
</data>
<data name="FirewallRuleSource_Other" xml:space="preserve">
<value>Windows (runtime)</value>
</data>
<data name="UnsupportedProperties" xml:space="preserve">
<value>Unsupported properties</value>
</data>
<data name="LocalPorts" xml:space="preserve">
<value>Local ports</value>
</data>
Expand All @@ -4504,6 +4522,9 @@ The new rule may apply to more traffic than the original rule (e.g. to all servi
<data name="RemoteAddresses" xml:space="preserve">
<value>Remote addresses</value>
</data>
<data name="EnterValidFirewallLocalAddress" xml:space="preserve">
<value>Enter a valid IP address, subnet (e.g. 10.0.0.0/8), range (e.g. 10.0.0.1-10.0.0.10), or the keyword Any. Other keywords (e.g. LocalSubnet) are only valid for remote addresses.</value>
</data>
<data name="EnterValidFirewallAddress" xml:space="preserve">
<value>Enter a valid IP address, subnet (e.g. 10.0.0.0/8), range (e.g. 10.0.0.1-10.0.0.10), or keyword (Any, LocalSubnet, DNS, DHCP, WINS, DefaultGateway, Internet, Intranet, IntranetRemoteAccess, PlayToDevice, CaptivePortal)</value>
</data>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ private static void CreateCsv(IEnumerable<FirewallRule> collection, string fileP
sb.AppendLine(
$"{nameof(FirewallRule.Name)}," +
$"{nameof(FirewallRule.IsEnabled)}," +
$"{nameof(FirewallRule.IsManaged)}," +
$"{nameof(FirewallRule.Source)}," +
$"{nameof(FirewallRule.Direction)}," +
$"{nameof(FirewallRule.Action)}," +
$"{nameof(FirewallRule.Protocol)}," +
Expand All @@ -63,6 +65,8 @@ private static void CreateCsv(IEnumerable<FirewallRule> collection, string fileP
sb.AppendLine(
$"{CsvHelper.QuoteString(rule.Name)}," +
$"{rule.IsEnabled}," +
$"{rule.IsManaged}," +
$"{rule.Source}," +
$"{rule.Direction}," +
$"{rule.Action}," +
$"{rule.Protocol}," +
Expand Down Expand Up @@ -90,6 +94,8 @@ from rule in collection
select new XElement(nameof(FirewallRule),
new XElement(nameof(FirewallRule.Name), rule.Name),
new XElement(nameof(FirewallRule.IsEnabled), rule.IsEnabled),
new XElement(nameof(FirewallRule.IsManaged), rule.IsManaged),
new XElement(nameof(FirewallRule.Source), rule.Source),
new XElement(nameof(FirewallRule.Direction), rule.Direction),
new XElement(nameof(FirewallRule.Action), rule.Action),
new XElement(nameof(FirewallRule.Protocol), rule.Protocol),
Expand Down Expand Up @@ -119,6 +125,8 @@ private static void CreateJson(IReadOnlyList<FirewallRule> collection, string fi
{
rule.Name,
rule.IsEnabled,
rule.IsManaged,
Source = rule.Source.ToString(),
Direction = rule.Direction.ToString(),
Action = rule.Action.ToString(),
Protocol = rule.Protocol.ToString(),
Expand Down
Loading
Loading