From e5c896cb36db9ffd3b51402d807210e7deb2fb6f Mon Sep 17 00:00:00 2001 From: David Sparer Date: Tue, 9 Aug 2016 10:34:51 -0600 Subject: [PATCH] Refactored much of the inheritance code to use System.Reflection instead of hardcoded values. Refactored DefaultInheritance to its own class which inherits from the ConnectionInfoInheritance class. Fixed issue with DefaultInheritance not saving to settings. --- .../ConnectionInfoInheritanceTests.cs | 23 +++- .../DefaultConnectionInheritanceTests.cs | 31 ++++++ mRemoteNGTests/mRemoteNGTests.csproj | 1 + mRemoteV1/App/Runtime.cs | 68 ------------ .../Config/Connections/ConnectionsSaver.cs | 6 +- .../Connections/SqlConnectionsLoader.cs | 2 +- .../Connections/XmlConnectionsLoader.cs | 2 +- mRemoteV1/Connection/ConnectionInfo.cs | 2 +- .../Connection/ConnectionInfoInheritance.cs | 41 ++++--- .../DefaultConnectionInheritance.cs | 102 ++++++++++++++++++ mRemoteV1/UI/Window/ConfigWindow.cs | 41 ++++--- mRemoteV1/mRemoteV1.csproj | 1 + 12 files changed, 202 insertions(+), 118 deletions(-) create mode 100644 mRemoteNGTests/Connection/DefaultConnectionInheritanceTests.cs create mode 100644 mRemoteV1/Connection/DefaultConnectionInheritance.cs diff --git a/mRemoteNGTests/Connection/ConnectionInfoInheritanceTests.cs b/mRemoteNGTests/Connection/ConnectionInfoInheritanceTests.cs index 5398b77bd..5778e2ac5 100644 --- a/mRemoteNGTests/Connection/ConnectionInfoInheritanceTests.cs +++ b/mRemoteNGTests/Connection/ConnectionInfoInheritanceTests.cs @@ -2,6 +2,7 @@ using NUnit.Framework; using System.Reflection; using System.Collections; +using System.Linq; namespace mRemoteNGTests.Connection { @@ -59,10 +60,23 @@ namespace mRemoteNGTests.Connection Assert.That(_inheritance.Username, Is.True); } + [Test] + public void GetPropertiesReturnsListOfSettableProperties() + { + var hasIconProperty = _inheritance.GetProperties().Contains(typeof(ConnectionInfoInheritance).GetProperty("Icon")); + Assert.That(hasIconProperty, Is.True); + } + + [Test] + public void GetPropertiesExludesPropertiesThatShouldNotBeSet() + { + var hasEverythingInheritedProperty = _inheritance.GetProperties().Contains(typeof(ConnectionInfoInheritance).GetProperty("EverythingInherited")); + Assert.That(hasEverythingInheritedProperty, Is.False); + } private bool AllInheritancePropertiesAreTrue() { - bool allPropertiesTrue = true; + var allPropertiesTrue = true; foreach (var property in _inheritanceProperties) { if (PropertyIsBoolean(property) && PropertyIsChangedWhenSettingInheritAll(property) && BooleanPropertyIsSetToFalse(property)) @@ -73,7 +87,7 @@ namespace mRemoteNGTests.Connection private bool AllInheritancePropertiesAreFalse() { - bool allPropertiesFalse = true; + var allPropertiesFalse = true; foreach (var property in _inheritanceProperties) { if (PropertyIsBoolean(property) && PropertyIsChangedWhenSettingInheritAll(property) && BooleanPropertyIsSetToTrue(property)) @@ -84,8 +98,7 @@ namespace mRemoteNGTests.Connection private bool PropertyIsChangedWhenSettingInheritAll(PropertyInfo property) { - ArrayList propertiesIgnoredByInheritAll = new ArrayList(); - propertiesIgnoredByInheritAll.Add("IsDefault"); + var propertiesIgnoredByInheritAll = new ArrayList {"IsDefault"}; return propertiesIgnoredByInheritAll.Contains(property); } @@ -101,7 +114,7 @@ namespace mRemoteNGTests.Connection private bool BooleanPropertyIsSetToTrue(PropertyInfo property) { - return (bool)property.GetValue(_inheritance) == true; + return (bool)property.GetValue(_inheritance); } } } \ No newline at end of file diff --git a/mRemoteNGTests/Connection/DefaultConnectionInheritanceTests.cs b/mRemoteNGTests/Connection/DefaultConnectionInheritanceTests.cs new file mode 100644 index 000000000..74023cd70 --- /dev/null +++ b/mRemoteNGTests/Connection/DefaultConnectionInheritanceTests.cs @@ -0,0 +1,31 @@ + + +using mRemoteNG.Connection; +using NUnit.Framework; + +namespace mRemoteNGTests.Connection +{ + public class DefaultConnectionInheritanceTests + { + private readonly DefaultConnectionInheritance _defaultConnectionInheritance; + + [SetUp] + public void Setup() + { + + } + + [TearDown] + public void Teardown() + { + + } + + + [Test] + public void a() + { + + } + } +} \ No newline at end of file diff --git a/mRemoteNGTests/mRemoteNGTests.csproj b/mRemoteNGTests/mRemoteNGTests.csproj index e2af3ea14..eb13bb806 100644 --- a/mRemoteNGTests/mRemoteNGTests.csproj +++ b/mRemoteNGTests/mRemoteNGTests.csproj @@ -103,6 +103,7 @@ + diff --git a/mRemoteV1/App/Runtime.cs b/mRemoteV1/App/Runtime.cs index 71a386393..4e4916076 100644 --- a/mRemoteV1/App/Runtime.cs +++ b/mRemoteV1/App/Runtime.cs @@ -17,7 +17,6 @@ using System.IO; using System.Threading; using System.Windows.Forms; using System.Xml; -using mRemoteNG.Security; using mRemoteNG.Security.SymmetricEncryption; using mRemoteNG.UI.Forms; using mRemoteNG.UI.Forms.Input; @@ -145,73 +144,6 @@ namespace mRemoteNG.App } #endregion - #region Default Inheritance - public static ConnectionInfoInheritance DefaultInheritanceFromSettings() - { - DefaultInheritance = new ConnectionInfoInheritance(null); - DefaultInheritance.IsDefault = true; - return DefaultInheritance; - } - - public static void DefaultInheritanceToSettings() - { - Settings.Default.InhDefaultDescription = DefaultInheritance.Description; - Settings.Default.InhDefaultIcon = DefaultInheritance.Icon; - Settings.Default.InhDefaultPanel = DefaultInheritance.Panel; - Settings.Default.InhDefaultUsername = DefaultInheritance.Username; - Settings.Default.InhDefaultPassword = DefaultInheritance.Password; - Settings.Default.InhDefaultDomain = DefaultInheritance.Domain; - Settings.Default.InhDefaultProtocol = DefaultInheritance.Protocol; - Settings.Default.InhDefaultPort = DefaultInheritance.Port; - Settings.Default.InhDefaultPuttySession = DefaultInheritance.PuttySession; - Settings.Default.InhDefaultUseConsoleSession = DefaultInheritance.UseConsoleSession; - Settings.Default.InhDefaultUseCredSsp = DefaultInheritance.UseCredSsp; - Settings.Default.InhDefaultRenderingEngine = DefaultInheritance.RenderingEngine; - Settings.Default.InhDefaultICAEncryptionStrength = DefaultInheritance.ICAEncryption; - Settings.Default.InhDefaultRDPAuthenticationLevel = DefaultInheritance.RDPAuthenticationLevel; - Settings.Default.InhDefaultLoadBalanceInfo = DefaultInheritance.LoadBalanceInfo; - Settings.Default.InhDefaultResolution = DefaultInheritance.Resolution; - Settings.Default.InhDefaultAutomaticResize = DefaultInheritance.AutomaticResize; - Settings.Default.InhDefaultColors = DefaultInheritance.Colors; - Settings.Default.InhDefaultCacheBitmaps = DefaultInheritance.CacheBitmaps; - Settings.Default.InhDefaultDisplayWallpaper = DefaultInheritance.DisplayWallpaper; - Settings.Default.InhDefaultDisplayThemes = DefaultInheritance.DisplayThemes; - Settings.Default.InhDefaultEnableFontSmoothing = DefaultInheritance.EnableFontSmoothing; - Settings.Default.InhDefaultEnableDesktopComposition = DefaultInheritance.EnableDesktopComposition; - Settings.Default.InhDefaultRedirectKeys = DefaultInheritance.RedirectKeys; - Settings.Default.InhDefaultRedirectDiskDrives = DefaultInheritance.RedirectDiskDrives; - Settings.Default.InhDefaultRedirectPrinters = DefaultInheritance.RedirectPrinters; - Settings.Default.InhDefaultRedirectPorts = DefaultInheritance.RedirectPorts; - Settings.Default.InhDefaultRedirectSmartCards = DefaultInheritance.RedirectSmartCards; - Settings.Default.InhDefaultRedirectSound = DefaultInheritance.RedirectSound; - Settings.Default.InhDefaultPreExtApp = DefaultInheritance.PreExtApp; - Settings.Default.InhDefaultPostExtApp = DefaultInheritance.PostExtApp; - Settings.Default.InhDefaultMacAddress = DefaultInheritance.MacAddress; - Settings.Default.InhDefaultUserField = DefaultInheritance.UserField; - // VNC inheritance - Settings.Default.InhDefaultVNCAuthMode = DefaultInheritance.VNCAuthMode; - Settings.Default.InhDefaultVNCColors = DefaultInheritance.VNCColors; - Settings.Default.InhDefaultVNCCompression = DefaultInheritance.VNCCompression; - Settings.Default.InhDefaultVNCEncoding = DefaultInheritance.VNCEncoding; - Settings.Default.InhDefaultVNCProxyIP = DefaultInheritance.VNCProxyIP; - Settings.Default.InhDefaultVNCProxyPassword = DefaultInheritance.VNCProxyPassword; - Settings.Default.InhDefaultVNCProxyPort = DefaultInheritance.VNCProxyPort; - Settings.Default.InhDefaultVNCProxyType = DefaultInheritance.VNCProxyType; - Settings.Default.InhDefaultVNCProxyUsername = DefaultInheritance.VNCProxyUsername; - Settings.Default.InhDefaultVNCSmartSizeMode = DefaultInheritance.VNCSmartSizeMode; - Settings.Default.InhDefaultVNCViewOnly = DefaultInheritance.VNCViewOnly; - // Ext. App inheritance - Settings.Default.InhDefaultExtApp = DefaultInheritance.ExtApp; - // RDP gateway inheritance - Settings.Default.InhDefaultRDGatewayUsageMethod = DefaultInheritance.RDGatewayUsageMethod; - Settings.Default.InhDefaultRDGatewayHostname = DefaultInheritance.RDGatewayHostname; - Settings.Default.InhDefaultRDGatewayUsername = DefaultInheritance.RDGatewayUsername; - Settings.Default.InhDefaultRDGatewayPassword = DefaultInheritance.RDGatewayPassword; - Settings.Default.InhDefaultRDGatewayDomain = DefaultInheritance.RDGatewayDomain; - Settings.Default.InhDefaultRDGatewayUseConnectionCredentials = DefaultInheritance.RDGatewayUseConnectionCredentials; - } - #endregion - #region Panels public static Form AddPanel(string title = "", bool noTabber = false) { diff --git a/mRemoteV1/Config/Connections/ConnectionsSaver.cs b/mRemoteV1/Config/Connections/ConnectionsSaver.cs index ba596d287..e9c540fc3 100644 --- a/mRemoteV1/Config/Connections/ConnectionsSaver.cs +++ b/mRemoteV1/Config/Connections/ConnectionsSaver.cs @@ -418,7 +418,7 @@ namespace mRemoteNG.Config.Connections _sqlQuery.CommandText += "\'" + Convert.ToString(with_1.Inheritance.UseConsoleSession) + "\',"; _sqlQuery.CommandText += "\'" + Convert.ToString(with_1.Inheritance.RenderingEngine) + "\',"; _sqlQuery.CommandText += "\'" + Convert.ToString(with_1.Inheritance.Username) + "\',"; - _sqlQuery.CommandText += "\'" + Convert.ToString(with_1.Inheritance.ICAEncryption) + "\',"; + _sqlQuery.CommandText += "\'" + Convert.ToString(with_1.Inheritance.ICAEncryptionStrength) + "\',"; _sqlQuery.CommandText += "\'" + Convert.ToString(with_1.Inheritance.RDPAuthenticationLevel) + "\',"; _sqlQuery.CommandText += "\'" + Convert.ToString(with_1.Inheritance.LoadBalanceInfo) + "\',"; _sqlQuery.CommandText += "\'" + Convert.ToString(with_1.Inheritance.PreExtApp) + "\',"; @@ -845,7 +845,7 @@ namespace mRemoteNG.Config.Connections _xmlTextWriter.WriteAttributeString("InheritUseCredSsp", "", Convert.ToString(curConI.Inheritance.UseCredSsp)); _xmlTextWriter.WriteAttributeString("InheritRenderingEngine", "", Convert.ToString(curConI.Inheritance.RenderingEngine)); _xmlTextWriter.WriteAttributeString("InheritUsername", "", Convert.ToString(curConI.Inheritance.Username)); - _xmlTextWriter.WriteAttributeString("InheritICAEncryptionStrength", "", Convert.ToString(curConI.Inheritance.ICAEncryption)); + _xmlTextWriter.WriteAttributeString("InheritICAEncryptionStrength", "", Convert.ToString(curConI.Inheritance.ICAEncryptionStrength)); _xmlTextWriter.WriteAttributeString("InheritRDPAuthenticationLevel", "", Convert.ToString(curConI.Inheritance.RDPAuthenticationLevel)); _xmlTextWriter.WriteAttributeString("InheritLoadBalanceInfo", "", Convert.ToString(curConI.Inheritance.LoadBalanceInfo)); _xmlTextWriter.WriteAttributeString("InheritPreExtApp", "", Convert.ToString(curConI.Inheritance.PreExtApp)); @@ -1039,7 +1039,7 @@ namespace mRemoteNG.Config.Connections if (SaveSecurity.Inheritance) { - csvLn += con.Inheritance.CacheBitmaps + ";" + Convert.ToString(con.Inheritance.Colors) + ";" + Convert.ToString(con.Inheritance.Description) + ";" + Convert.ToString(con.Inheritance.DisplayThemes) + ";" + Convert.ToString(con.Inheritance.DisplayWallpaper) + ";" + Convert.ToString(con.Inheritance.EnableFontSmoothing) + ";" + Convert.ToString(con.Inheritance.EnableDesktopComposition) + ";" + Convert.ToString(con.Inheritance.Domain) + ";" + Convert.ToString(con.Inheritance.Icon) + ";" + Convert.ToString(con.Inheritance.Panel) + ";" + Convert.ToString(con.Inheritance.Password) + ";" + Convert.ToString(con.Inheritance.Port) + ";" + Convert.ToString(con.Inheritance.Protocol) + ";" + Convert.ToString(con.Inheritance.PuttySession) + ";" + Convert.ToString(con.Inheritance.RedirectDiskDrives) + ";" + Convert.ToString(con.Inheritance.RedirectKeys) + ";" + Convert.ToString(con.Inheritance.RedirectPorts) + ";" + Convert.ToString(con.Inheritance.RedirectPrinters) + ";" + Convert.ToString(con.Inheritance.RedirectSmartCards) + ";" + Convert.ToString(con.Inheritance.RedirectSound) + ";" + Convert.ToString(con.Inheritance.Resolution) + ";" + Convert.ToString(con.Inheritance.AutomaticResize) + ";" + Convert.ToString(con.Inheritance.UseConsoleSession) + ";" + Convert.ToString(con.Inheritance.UseCredSsp) + ";" + Convert.ToString(con.Inheritance.RenderingEngine) + ";" + Convert.ToString(con.Inheritance.Username) + ";" + Convert.ToString(con.Inheritance.ICAEncryption) + ";" + Convert.ToString(con.Inheritance.RDPAuthenticationLevel) + ";" + Convert.ToString(con.Inheritance.LoadBalanceInfo) + ";" + Convert.ToString(con.Inheritance.PreExtApp) + ";" + Convert.ToString(con.Inheritance.PostExtApp) + ";" + Convert.ToString(con.Inheritance.MacAddress) + ";" + Convert.ToString(con.Inheritance.UserField) + ";" + Convert.ToString(con.Inheritance.ExtApp) + ";" + Convert.ToString(con.Inheritance.VNCCompression) + ";" + csvLn += con.Inheritance.CacheBitmaps + ";" + Convert.ToString(con.Inheritance.Colors) + ";" + Convert.ToString(con.Inheritance.Description) + ";" + Convert.ToString(con.Inheritance.DisplayThemes) + ";" + Convert.ToString(con.Inheritance.DisplayWallpaper) + ";" + Convert.ToString(con.Inheritance.EnableFontSmoothing) + ";" + Convert.ToString(con.Inheritance.EnableDesktopComposition) + ";" + Convert.ToString(con.Inheritance.Domain) + ";" + Convert.ToString(con.Inheritance.Icon) + ";" + Convert.ToString(con.Inheritance.Panel) + ";" + Convert.ToString(con.Inheritance.Password) + ";" + Convert.ToString(con.Inheritance.Port) + ";" + Convert.ToString(con.Inheritance.Protocol) + ";" + Convert.ToString(con.Inheritance.PuttySession) + ";" + Convert.ToString(con.Inheritance.RedirectDiskDrives) + ";" + Convert.ToString(con.Inheritance.RedirectKeys) + ";" + Convert.ToString(con.Inheritance.RedirectPorts) + ";" + Convert.ToString(con.Inheritance.RedirectPrinters) + ";" + Convert.ToString(con.Inheritance.RedirectSmartCards) + ";" + Convert.ToString(con.Inheritance.RedirectSound) + ";" + Convert.ToString(con.Inheritance.Resolution) + ";" + Convert.ToString(con.Inheritance.AutomaticResize) + ";" + Convert.ToString(con.Inheritance.UseConsoleSession) + ";" + Convert.ToString(con.Inheritance.UseCredSsp) + ";" + Convert.ToString(con.Inheritance.RenderingEngine) + ";" + Convert.ToString(con.Inheritance.Username) + ";" + Convert.ToString(con.Inheritance.ICAEncryptionStrength) + ";" + Convert.ToString(con.Inheritance.RDPAuthenticationLevel) + ";" + Convert.ToString(con.Inheritance.LoadBalanceInfo) + ";" + Convert.ToString(con.Inheritance.PreExtApp) + ";" + Convert.ToString(con.Inheritance.PostExtApp) + ";" + Convert.ToString(con.Inheritance.MacAddress) + ";" + Convert.ToString(con.Inheritance.UserField) + ";" + Convert.ToString(con.Inheritance.ExtApp) + ";" + Convert.ToString(con.Inheritance.VNCCompression) + ";" + Convert.ToString(con.Inheritance.VNCEncoding) + ";" + Convert.ToString(con.Inheritance.VNCAuthMode) + ";" + Convert.ToString(con.Inheritance.VNCProxyType) + ";" + Convert.ToString(con.Inheritance.VNCProxyIP) + ";" + Convert.ToString(con.Inheritance.VNCProxyPort) + ";" + Convert.ToString(con.Inheritance.VNCProxyUsername) + ";" + Convert.ToString(con.Inheritance.VNCProxyPassword) + ";" + Convert.ToString(con.Inheritance.VNCColors) + ";" + Convert.ToString(con.Inheritance.VNCSmartSizeMode) + ";" + Convert.ToString(con.Inheritance.VNCViewOnly); } diff --git a/mRemoteV1/Config/Connections/SqlConnectionsLoader.cs b/mRemoteV1/Config/Connections/SqlConnectionsLoader.cs index b67177047..c524a011e 100644 --- a/mRemoteV1/Config/Connections/SqlConnectionsLoader.cs +++ b/mRemoteV1/Config/Connections/SqlConnectionsLoader.cs @@ -353,7 +353,7 @@ namespace mRemoteNG.Config.Connections if (_confVersion > 1.5) //1.6 { connectionInfo.ICAEncryption = (ProtocolICA.EncryptionStrength)Tools.MiscTools.StringToEnum(typeof(ProtocolICA.EncryptionStrength), Convert.ToString(_sqlDataReader["ICAEncryptionStrength"])); - connectionInfo.Inheritance.ICAEncryption = Convert.ToBoolean(_sqlDataReader["InheritICAEncryptionStrength"]); + connectionInfo.Inheritance.ICAEncryptionStrength = Convert.ToBoolean(_sqlDataReader["InheritICAEncryptionStrength"]); connectionInfo.PreExtApp = Convert.ToString(_sqlDataReader["PreExtApp"]); connectionInfo.PostExtApp = Convert.ToString(_sqlDataReader["PostExtApp"]); connectionInfo.Inheritance.PreExtApp = Convert.ToBoolean(_sqlDataReader["InheritPreExtApp"]); diff --git a/mRemoteV1/Config/Connections/XmlConnectionsLoader.cs b/mRemoteV1/Config/Connections/XmlConnectionsLoader.cs index 232d334d2..8fd865dd8 100644 --- a/mRemoteV1/Config/Connections/XmlConnectionsLoader.cs +++ b/mRemoteV1/Config/Connections/XmlConnectionsLoader.cs @@ -371,7 +371,7 @@ namespace mRemoteNG.Config.Connections if (_confVersion > 1.5) //1.6 { connectionInfo.ICAEncryption = (ProtocolICA.EncryptionStrength)Tools.MiscTools.StringToEnum(typeof(ProtocolICA.EncryptionStrength), xmlnode.Attributes["ICAEncryptionStrength"].Value); - connectionInfo.Inheritance.ICAEncryption = bool.Parse(xmlnode.Attributes["InheritICAEncryptionStrength"].Value); + connectionInfo.Inheritance.ICAEncryptionStrength = bool.Parse(xmlnode.Attributes["InheritICAEncryptionStrength"].Value); connectionInfo.PreExtApp = xmlnode.Attributes["PreExtApp"].Value; connectionInfo.PostExtApp = xmlnode.Attributes["PostExtApp"].Value; connectionInfo.Inheritance.PreExtApp = bool.Parse(xmlnode.Attributes["InheritPreExtApp"].Value); diff --git a/mRemoteV1/Connection/ConnectionInfo.cs b/mRemoteV1/Connection/ConnectionInfo.cs index 9c9e586ab..5a9f4583c 100644 --- a/mRemoteV1/Connection/ConnectionInfo.cs +++ b/mRemoteV1/Connection/ConnectionInfo.cs @@ -221,7 +221,7 @@ namespace mRemoteNG.Connection TypeConverter(typeof(Tools.MiscTools.EnumTypeConverter))] public ProtocolICA.EncryptionStrength ICAEncryption { - get { return GetPropertyValue("ICAEncryption", _icaEncryption); } + get { return GetPropertyValue("ICAEncryptionStrength", _icaEncryption); } set { _icaEncryption = value; } } diff --git a/mRemoteV1/Connection/ConnectionInfoInheritance.cs b/mRemoteV1/Connection/ConnectionInfoInheritance.cs index 7821d6742..53042090e 100644 --- a/mRemoteV1/Connection/ConnectionInfoInheritance.cs +++ b/mRemoteV1/Connection/ConnectionInfoInheritance.cs @@ -1,5 +1,10 @@ +using System; +using System.Collections; +using System.Collections.Generic; using mRemoteNG.Tools; using System.ComponentModel; +using System.Linq; +using System.Reflection; namespace mRemoteNG.Connection { @@ -16,10 +21,7 @@ namespace mRemoteNG.Connection public bool EverythingInherited { get { return EverythingIsInherited(); } - set - { - SetAllValues(value); - } + set { SetAllValues(value); } } #endregion #region Display @@ -78,7 +80,7 @@ namespace mRemoteNG.Connection [LocalizedAttributes.LocalizedCategory("strCategoryProtocol", 4), LocalizedAttributes.LocalizedDisplayNameInheritAttribute("strPropertyNameEncryptionStrength"), LocalizedAttributes.LocalizedDescriptionInheritAttribute("strPropertyDescriptionEncryptionStrength"), - TypeConverter(typeof(MiscTools.YesNoTypeConverter))]public bool ICAEncryption {get; set;} + TypeConverter(typeof(MiscTools.YesNoTypeConverter))]public bool ICAEncryptionStrength {get; set;} [LocalizedAttributes.LocalizedCategory("strCategoryProtocol", 4), LocalizedAttributes.LocalizedDisplayNameInheritAttribute("strPropertyNameAuthenticationLevel"), @@ -294,9 +296,6 @@ namespace mRemoteNG.Connection [Browsable(false)] public object Parent {get; set;} - - [Browsable(false)] - public bool IsDefault {get; set;} #endregion @@ -349,15 +348,23 @@ namespace mRemoteNG.Connection private bool EverythingIsInherited() { - var displaySettings = Description && Icon && Panel; - var connectionSettings = Username && Password && Domain; - var protocolSettings = Protocol && ExtApp && Port && PuttySession && ICAEncryption && RDPAuthenticationLevel && LoadBalanceInfo && RenderingEngine && UseConsoleSession && UseCredSsp; - var appearanceSettings = Resolution && AutomaticResize && Colors && CacheBitmaps && DisplayWallpaper && DisplayThemes && EnableFontSmoothing && EnableDesktopComposition; - var redirectSettings = RedirectDiskDrives && RedirectKeys && RedirectPorts && RedirectPrinters && RedirectSmartCards && RedirectSound; - var miscSettings = PreExtApp && PostExtApp && MacAddress && UserField; - var vncSettings = VNCAuthMode && VNCColors && VNCCompression && VNCEncoding && VNCProxyIP && VNCProxyPassword && VNCProxyPort && VNCProxyType && VNCProxyUsername; + var inheritanceProperties = GetProperties(); + var everythingInherited = inheritanceProperties.All((p) => (bool)p.GetValue(this, null)); + return everythingInherited; + } - return displaySettings && connectionSettings && protocolSettings && appearanceSettings && redirectSettings && miscSettings && vncSettings; + public IEnumerable GetProperties() + { + var properties = typeof(ConnectionInfoInheritance).GetProperties(); + var filteredProperties = properties.Where(FilterProperty); + return filteredProperties; + } + + private bool FilterProperty(PropertyInfo propertyInfo) + { + var exclusions = new[] { "EverythingInherited", "Parent" }; + var valueShouldNotBeFiltered = !exclusions.Contains(propertyInfo.Name); + return valueShouldNotBeFiltered; } private void SetAllValues(bool value) @@ -370,7 +377,7 @@ namespace mRemoteNG.Connection } } - private void SetAllValues(ConnectionInfoInheritance otherInheritanceObject) + protected void SetAllValues(ConnectionInfoInheritance otherInheritanceObject) { var properties = typeof(ConnectionInfoInheritance).GetProperties(); foreach (var property in properties) diff --git a/mRemoteV1/Connection/DefaultConnectionInheritance.cs b/mRemoteV1/Connection/DefaultConnectionInheritance.cs new file mode 100644 index 000000000..f1b5b97b2 --- /dev/null +++ b/mRemoteV1/Connection/DefaultConnectionInheritance.cs @@ -0,0 +1,102 @@ + + +using System.Reflection; + +namespace mRemoteNG.Connection +{ + public class DefaultConnectionInheritance : ConnectionInfoInheritance + { + private static readonly DefaultConnectionInheritance _singletonInstance = new DefaultConnectionInheritance(); + private const string SettingNamePrefix = "InhDefault"; + + + public static DefaultConnectionInheritance Instance { get { return _singletonInstance; } } + + private DefaultConnectionInheritance() : base(null) + { + } + + static DefaultConnectionInheritance() + { } + + + public void LoadFromSettings() + { + var inheritanceProperties = GetProperties(); + foreach (var property in inheritanceProperties) + { + var propertyFromSettings = typeof(Settings).GetProperty($"{SettingNamePrefix}{property.Name}"); + var valueFromSettings = propertyFromSettings.GetValue(Settings.Default, null); + property.SetValue(Instance, valueFromSettings, null); + } + } + + public void SaveToSettings() + { + var inheritanceProperties = GetProperties(); + foreach (var property in inheritanceProperties) + { + var propertyFromSettings = typeof(Settings).GetProperty($"{SettingNamePrefix}{property.Name}"); + var localValue = property.GetValue(Instance, null); + propertyFromSettings.SetValue(Settings.Default, localValue, null); + } + + //Settings.Default.InhDefaultDescription = Description; + //Settings.Default.InhDefaultIcon = Icon; + //Settings.Default.InhDefaultPanel = Panel; + //Settings.Default.InhDefaultUsername = Username; + //Settings.Default.InhDefaultPassword = Password; + //Settings.Default.InhDefaultDomain = Domain; + //Settings.Default.InhDefaultProtocol = Protocol; + //Settings.Default.InhDefaultPort = Port; + //Settings.Default.InhDefaultPuttySession = PuttySession; + //Settings.Default.InhDefaultUseConsoleSession = UseConsoleSession; + //Settings.Default.InhDefaultUseCredSsp = UseCredSsp; + //Settings.Default.InhDefaultRenderingEngine = RenderingEngine; + //Settings.Default.InhDefaultICAEncryptionStrength = ICAEncryptionStrength; + //Settings.Default.InhDefaultRDPAuthenticationLevel = RDPAuthenticationLevel; + //Settings.Default.InhDefaultLoadBalanceInfo = LoadBalanceInfo; + //Settings.Default.InhDefaultResolution = Resolution; + //Settings.Default.InhDefaultAutomaticResize = AutomaticResize; + //Settings.Default.InhDefaultColors = Colors; + //Settings.Default.InhDefaultCacheBitmaps = CacheBitmaps; + //Settings.Default.InhDefaultDisplayWallpaper = DisplayWallpaper; + //Settings.Default.InhDefaultDisplayThemes = DisplayThemes; + //Settings.Default.InhDefaultEnableFontSmoothing = EnableFontSmoothing; + //Settings.Default.InhDefaultEnableDesktopComposition = EnableDesktopComposition; + //// + //Settings.Default.InhDefaultRedirectKeys = RedirectKeys; + //Settings.Default.InhDefaultRedirectDiskDrives = RedirectDiskDrives; + //Settings.Default.InhDefaultRedirectPrinters = RedirectPrinters; + //Settings.Default.InhDefaultRedirectPorts = RedirectPorts; + //Settings.Default.InhDefaultRedirectSmartCards = RedirectSmartCards; + //Settings.Default.InhDefaultRedirectSound = RedirectSound; + //// + //Settings.Default.InhDefaultPreExtApp = PreExtApp; + //Settings.Default.InhDefaultPostExtApp = PostExtApp; + //Settings.Default.InhDefaultMacAddress = MacAddress; + //Settings.Default.InhDefaultUserField = UserField; + //// VNC inheritance + //Settings.Default.InhDefaultVNCAuthMode = VNCAuthMode; + //Settings.Default.InhDefaultVNCColors = VNCColors; + //Settings.Default.InhDefaultVNCCompression = VNCCompression; + //Settings.Default.InhDefaultVNCEncoding = VNCEncoding; + //Settings.Default.InhDefaultVNCProxyIP = VNCProxyIP; + //Settings.Default.InhDefaultVNCProxyPassword = VNCProxyPassword; + //Settings.Default.InhDefaultVNCProxyPort = VNCProxyPort; + //Settings.Default.InhDefaultVNCProxyType = VNCProxyType; + //Settings.Default.InhDefaultVNCProxyUsername = VNCProxyUsername; + //Settings.Default.InhDefaultVNCSmartSizeMode = VNCSmartSizeMode; + //Settings.Default.InhDefaultVNCViewOnly = VNCViewOnly; + //// Ext. App inheritance + //Settings.Default.InhDefaultExtApp = ExtApp; + //// RDP gateway inheritance + //Settings.Default.InhDefaultRDGatewayUsageMethod = RDGatewayUsageMethod; + //Settings.Default.InhDefaultRDGatewayHostname = RDGatewayHostname; + //Settings.Default.InhDefaultRDGatewayUsername = RDGatewayUsername; + //Settings.Default.InhDefaultRDGatewayPassword = RDGatewayPassword; + //Settings.Default.InhDefaultRDGatewayDomain = RDGatewayDomain; + //Settings.Default.InhDefaultRDGatewayUseConnectionCredentials = RDGatewayUseConnectionCredentials; + } + } +} \ No newline at end of file diff --git a/mRemoteV1/UI/Window/ConfigWindow.cs b/mRemoteV1/UI/Window/ConfigWindow.cs index 800cf2ea1..f48f9d2b6 100644 --- a/mRemoteV1/UI/Window/ConfigWindow.cs +++ b/mRemoteV1/UI/Window/ConfigWindow.cs @@ -180,7 +180,7 @@ namespace mRemoteNG.UI.Window Font = new Font("Segoe UI", 8.25F, FontStyle.Regular, GraphicsUnit.Point, Convert.ToByte(0)); HideOnClose = true; Icon = Resources.Config_Icon; - Name = $"Config"; + Name = "Config"; TabText = @"Config"; Text = @"Config"; propertyGridContextMenu.ResumeLayout(false); @@ -790,13 +790,8 @@ namespace mRemoteNG.UI.Window private void UpdateInheritanceNode() { - if (pGrid.SelectedObject is ConnectionInfoInheritance) - { - if (((ConnectionInfoInheritance)pGrid.SelectedObject).IsDefault) - { - Runtime.DefaultInheritanceToSettings(); - } - } + if (!(pGrid.SelectedObject is DefaultConnectionInheritance)) return; + DefaultConnectionInheritance.Instance.SaveToSettings(); } private void pGrid_PropertySortChanged(object sender, EventArgs e) @@ -819,7 +814,7 @@ namespace mRemoteNG.UI.Window { case Connection.Protocol.ProtocolType.RDP: strHide.Add("ExtApp"); - strHide.Add("ICAEncryption"); + strHide.Add("ICAEncryptionStrength"); strHide.Add("PuttySession"); strHide.Add("RenderingEngine"); strHide.Add("VNCAuthMode"); @@ -860,7 +855,7 @@ namespace mRemoteNG.UI.Window strHide.Add("EnableFontSmoothing"); strHide.Add("EnableDesktopComposition"); strHide.Add("ExtApp"); - strHide.Add("ICAEncryption"); + strHide.Add("ICAEncryptionStrength"); strHide.Add("PuttySession"); strHide.Add("RDGatewayDomain"); strHide.Add("RDGatewayHostname"); @@ -903,7 +898,7 @@ namespace mRemoteNG.UI.Window strHide.Add("EnableDesktopComposition"); strHide.Add("Domain"); strHide.Add("ExtApp"); - strHide.Add("ICAEncryption"); + strHide.Add("ICAEncryptionStrength"); strHide.Add("RDGatewayDomain"); strHide.Add("RDGatewayHostname"); strHide.Add("RDGatewayPassword"); @@ -944,7 +939,7 @@ namespace mRemoteNG.UI.Window strHide.Add("EnableDesktopComposition"); strHide.Add("Domain"); strHide.Add("ExtApp"); - strHide.Add("ICAEncryption"); + strHide.Add("ICAEncryptionStrength"); strHide.Add("RDGatewayDomain"); strHide.Add("RDGatewayHostname"); strHide.Add("RDGatewayPassword"); @@ -985,7 +980,7 @@ namespace mRemoteNG.UI.Window strHide.Add("EnableDesktopComposition"); strHide.Add("Domain"); strHide.Add("ExtApp"); - strHide.Add("ICAEncryption"); + strHide.Add("ICAEncryptionStrength"); strHide.Add("Password"); strHide.Add("RDGatewayDomain"); strHide.Add("RDGatewayHostname"); @@ -1028,7 +1023,7 @@ namespace mRemoteNG.UI.Window strHide.Add("EnableDesktopComposition"); strHide.Add("Domain"); strHide.Add("ExtApp"); - strHide.Add("ICAEncryption"); + strHide.Add("ICAEncryptionStrength"); strHide.Add("Password"); strHide.Add("RDGatewayDomain"); strHide.Add("RDGatewayHostname"); @@ -1071,7 +1066,7 @@ namespace mRemoteNG.UI.Window strHide.Add("EnableDesktopComposition"); strHide.Add("Domain"); strHide.Add("ExtApp"); - strHide.Add("ICAEncryption"); + strHide.Add("ICAEncryptionStrength"); strHide.Add("Password"); strHide.Add("RDGatewayDomain"); strHide.Add("RDGatewayHostname"); @@ -1114,7 +1109,7 @@ namespace mRemoteNG.UI.Window strHide.Add("EnableDesktopComposition"); strHide.Add("Domain"); strHide.Add("ExtApp"); - strHide.Add("ICAEncryption"); + strHide.Add("ICAEncryptionStrength"); strHide.Add("PuttySession"); strHide.Add("RDGatewayDomain"); strHide.Add("RDGatewayHostname"); @@ -1155,7 +1150,7 @@ namespace mRemoteNG.UI.Window strHide.Add("EnableDesktopComposition"); strHide.Add("Domain"); strHide.Add("ExtApp"); - strHide.Add("ICAEncryption"); + strHide.Add("ICAEncryptionStrength"); strHide.Add("PuttySession"); strHide.Add("RDGatewayDomain"); strHide.Add("RDGatewayHostname"); @@ -1232,7 +1227,7 @@ namespace mRemoteNG.UI.Window strHide.Add("EnableFontSmoothing"); strHide.Add("EnableDesktopComposition"); strHide.Add("Domain"); - strHide.Add("ICAEncryption"); + strHide.Add("ICAEncryptionStrength"); strHide.Add("PuttySession"); strHide.Add("RDGatewayDomain"); strHide.Add("RDGatewayHostname"); @@ -1389,9 +1384,9 @@ namespace mRemoteNG.UI.Window strHide.Add("RenderingEngine"); } - if (conI.Inheritance.ICAEncryption) + if (conI.Inheritance.ICAEncryptionStrength) { - strHide.Add("ICAEncryption"); + strHide.Add("ICAEncryptionStrength"); } if (conI.Inheritance.RDPAuthenticationLevel) @@ -1563,7 +1558,7 @@ namespace mRemoteNG.UI.Window { if (pGrid.SelectedObject is ConnectionInfoInheritance) { - if (((ConnectionInfoInheritance)pGrid.SelectedObject).IsDefault) + if (pGrid.SelectedObject is DefaultConnectionInheritance) { PropertiesVisible = true; InheritanceVisible = false; @@ -1625,7 +1620,9 @@ namespace mRemoteNG.UI.Window InheritanceVisible = false; DefaultPropertiesVisible = false; DefaultInheritanceVisible = true; - SetPropertyGridObject(Runtime.DefaultInheritanceFromSettings()); + var defaultInheritance = DefaultConnectionInheritance.Instance; + defaultInheritance.LoadFromSettings(); + SetPropertyGridObject(defaultInheritance); } } diff --git a/mRemoteV1/mRemoteV1.csproj b/mRemoteV1/mRemoteV1.csproj index 143a96d94..ff87f6d0c 100644 --- a/mRemoteV1/mRemoteV1.csproj +++ b/mRemoteV1/mRemoteV1.csproj @@ -163,6 +163,7 @@ +