diff --git a/CHANGELOG.md b/CHANGELOG.md index 580afbcc..34a4e2fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,8 +7,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### Added - #870: Added option to push inheritance settings to child nodes recursively ### Changed +- #1468: Improved mRemoteNG startup time - #1443: Chinese (simplified) translation improvements - #1437: Norwegian translation improvements +- #1239: Increased default key derivation function (KDF) iterations from 1000 to 10000 +- Moved most RDP enums outside of the RDP protocol class. Scripts which reference these enums will need to be updated. ### Fixed - #1447: Exception occurs when resetting layout - #1439: Searching in hosts tree loses first keystroke diff --git a/README.MD b/README.MD index d9f82a0d..76c64349 100644 --- a/README.MD +++ b/README.MD @@ -38,7 +38,7 @@ For a detailed feature list and general usage support, refer to the [User Manual ## Installation -Before installing make sure you have all the required [prerequisites](https://github.com/mRemoteNG/mRemoteNG/wiki/Prerequisites). +Before installing make sure you fullfill all the [minimum requirements](https://mremoteng.readthedocs.io/en/latest/installation/minimum_requirements.html). mRemoteNG is available as a redistributable msi package, and can be downloaded from the following locations: * [GitHub](https://github.com/mRemoteNG/mRemoteNG/releases) diff --git a/mRemoteNGTests/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormatTests.cs b/mRemoteNGTests/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormatTests.cs index f669970f..aa21b2a3 100644 --- a/mRemoteNGTests/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormatTests.cs +++ b/mRemoteNGTests/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormatTests.cs @@ -98,9 +98,9 @@ namespace mRemoteNGTests.Config.Serializers.ConnectionSerializers.Csv UseCredSsp = true, RenderingEngine = HTTPBase.RenderingEngine.Gecko, ICAEncryptionStrength = IcaProtocol.EncryptionStrength.Encr40Bit, - RDPAuthenticationLevel = RdpProtocol.AuthenticationLevel.WarnOnFailedAuth, - Colors = RdpProtocol.RDPColors.Colors16Bit, - Resolution = RdpProtocol.RDPResolutions.Res1366x768, + RDPAuthenticationLevel = AuthenticationLevel.WarnOnFailedAuth, + Colors = RDPColors.Colors16Bit, + Resolution = RDPResolutions.Res1366x768, AutomaticResize = true, DisplayWallpaper = true, DisplayThemes = true, @@ -111,7 +111,7 @@ namespace mRemoteNGTests.Config.Serializers.ConnectionSerializers.Csv RedirectPorts = true, RedirectPrinters = true, RedirectSmartCards = true, - RedirectSound = RdpProtocol.RDPSounds.LeaveAtRemoteComputer, + RedirectSound = RDPSounds.LeaveAtRemoteComputer, RedirectAudioCapture = true, RedirectKeys = true, VNCCompression = ProtocolVNC.Compression.Comp4, @@ -122,8 +122,8 @@ namespace mRemoteNGTests.Config.Serializers.ConnectionSerializers.Csv VNCColors = ProtocolVNC.Colors.Col8Bit, VNCSmartSizeMode = ProtocolVNC.SmartSizeMode.SmartSAspect, VNCViewOnly = true, - RDGatewayUsageMethod = RdpProtocol.RDGatewayUsageMethod.Detect, - RDGatewayUseConnectionCredentials = RdpProtocol.RDGatewayUseConnectionCredentials.SmartCard + RDGatewayUsageMethod = RDGatewayUsageMethod.Detect, + RDGatewayUseConnectionCredentials = RDGatewayUseConnectionCredentials.SmartCard }; } diff --git a/mRemoteNGTests/Config/Serializers/MiscSerializers/RemoteDesktopConnectionDeserializerTests.cs b/mRemoteNGTests/Config/Serializers/MiscSerializers/RemoteDesktopConnectionDeserializerTests.cs index a9900317..df67f374 100644 --- a/mRemoteNGTests/Config/Serializers/MiscSerializers/RemoteDesktopConnectionDeserializerTests.cs +++ b/mRemoteNGTests/Config/Serializers/MiscSerializers/RemoteDesktopConnectionDeserializerTests.cs @@ -19,9 +19,9 @@ namespace mRemoteNGTests.Config.Serializers.MiscSerializers private const string ExpectedGatewayHostname = "gatewayhostname.domain.com"; private const string ExpectedLoadBalanceInfo = "tsv://MS Terminal Services Plugin.1.RDS-NAME"; private const int ExpectedPort = 9933; - private const RdpProtocol.RDPColors ExpectedColors = RdpProtocol.RDPColors.Colors24Bit; + private const RDPColors ExpectedColors = RDPColors.Colors24Bit; private const bool ExpectedBitmapCaching = false; - private const RdpProtocol.RDPResolutions ExpectedResolutionMode = RdpProtocol.RDPResolutions.FitToWindow; + private const RDPResolutions ExpectedResolutionMode = RDPResolutions.FitToWindow; private const bool ExpectedWallpaperDisplay = true; private const bool ExpectedThemesDisplay = true; private const bool ExpectedFontSmoothing = true; @@ -30,7 +30,7 @@ namespace mRemoteNGTests.Config.Serializers.MiscSerializers private const bool ExpectedDriveRedirection = true; private const bool ExpectedPortRedirection = true; private const bool ExpectedPrinterRedirection = true; - private const RdpProtocol.RDPSounds ExpectedSoundRedirection = RdpProtocol.RDPSounds.BringToThisComputer; + private const RDPSounds ExpectedSoundRedirection = RDPSounds.BringToThisComputer; [OneTimeSetUp] diff --git a/mRemoteNGTests/Config/Serializers/MiscSerializers/RemoteDesktopConnectionManager27DeserializerTests.cs b/mRemoteNGTests/Config/Serializers/MiscSerializers/RemoteDesktopConnectionManager27DeserializerTests.cs index 56341e89..db895856 100644 --- a/mRemoteNGTests/Config/Serializers/MiscSerializers/RemoteDesktopConnectionManager27DeserializerTests.cs +++ b/mRemoteNGTests/Config/Serializers/MiscSerializers/RemoteDesktopConnectionManager27DeserializerTests.cs @@ -24,20 +24,20 @@ namespace mRemoteNGTests.Config.Serializers.MiscSerializers private const string ExpectedPassword = "passwordHere!"; private const bool ExpectedUseConsoleSession = true; private const int ExpectedPort = 9933; - private const RdpProtocol.RDGatewayUsageMethod ExpectedGatewayUsageMethod = RdpProtocol.RDGatewayUsageMethod.Always; + private const RDGatewayUsageMethod ExpectedGatewayUsageMethod = RDGatewayUsageMethod.Always; private const string ExpectedGatewayHostname = "gatewayserverhost.innerdomain.net"; private const string ExpectedGatewayUsername = "gatewayusername"; private const string ExpectedGatewayDomain = "innerdomain"; private const string ExpectedGatewayPassword = "gatewayPassword123"; - private const RdpProtocol.RDPResolutions ExpectedRdpResolution = RdpProtocol.RDPResolutions.FitToWindow; - private const RdpProtocol.RDPColors ExpectedRdpColorDepth = RdpProtocol.RDPColors.Colors24Bit; - private const RdpProtocol.RDPSounds ExpectedAudioRedirection = RdpProtocol.RDPSounds.DoNotPlay; + private const RDPResolutions ExpectedRdpResolution = RDPResolutions.FitToWindow; + private const RDPColors ExpectedRdpColorDepth = RDPColors.Colors24Bit; + private const RDPSounds ExpectedAudioRedirection = RDPSounds.DoNotPlay; private const bool ExpectedKeyRedirection = true; private const bool ExpectedSmartcardRedirection = true; private const bool ExpectedDriveRedirection = true; private const bool ExpectedPortRedirection = true; private const bool ExpectedPrinterRedirection = true; - private const RdpProtocol.AuthenticationLevel ExpectedAuthLevel = RdpProtocol.AuthenticationLevel.WarnOnFailedAuth; + private const AuthenticationLevel ExpectedAuthLevel = AuthenticationLevel.WarnOnFailedAuth; [OneTimeSetUp] diff --git a/mRemoteNGTests/Config/Serializers/MiscSerializers/RemoteDesktopConnectionManagerDeserializerTests.cs b/mRemoteNGTests/Config/Serializers/MiscSerializers/RemoteDesktopConnectionManagerDeserializerTests.cs index 4a95d2fb..d49755f7 100644 --- a/mRemoteNGTests/Config/Serializers/MiscSerializers/RemoteDesktopConnectionManagerDeserializerTests.cs +++ b/mRemoteNGTests/Config/Serializers/MiscSerializers/RemoteDesktopConnectionManagerDeserializerTests.cs @@ -23,20 +23,20 @@ namespace mRemoteNGTests.Config.Serializers.MiscSerializers private const string ExpectedPassword = "passwordHere!"; private const bool ExpectedUseConsoleSession = true; private const int ExpectedPort = 9933; - private const RdpProtocol.RDGatewayUsageMethod ExpectedGatewayUsageMethod = RdpProtocol.RDGatewayUsageMethod.Always; + private const RDGatewayUsageMethod ExpectedGatewayUsageMethod = RDGatewayUsageMethod.Always; private const string ExpectedGatewayHostname = "gatewayserverhost.innerdomain.net"; private const string ExpectedGatewayUsername = "gatewayusername"; private const string ExpectedGatewayDomain = "innerdomain"; private const string ExpectedGatewayPassword = "gatewayPassword123"; - private const RdpProtocol.RDPResolutions ExpectedRdpResolution = RdpProtocol.RDPResolutions.FitToWindow; - private const RdpProtocol.RDPColors ExpectedRdpColorDepth = RdpProtocol.RDPColors.Colors24Bit; - private const RdpProtocol.RDPSounds ExpectedAudioRedirection = RdpProtocol.RDPSounds.DoNotPlay; + private const RDPResolutions ExpectedRdpResolution = RDPResolutions.FitToWindow; + private const RDPColors ExpectedRdpColorDepth = RDPColors.Colors24Bit; + private const RDPSounds ExpectedAudioRedirection = RDPSounds.DoNotPlay; private const bool ExpectedKeyRedirection = true; private const bool ExpectedSmartcardRedirection = true; private const bool ExpectedDriveRedirection = true; private const bool ExpectedPortRedirection = true; private const bool ExpectedPrinterRedirection = true; - private const RdpProtocol.AuthenticationLevel ExpectedAuthLevel = RdpProtocol.AuthenticationLevel.AuthRequired; + private const AuthenticationLevel ExpectedAuthLevel = AuthenticationLevel.AuthRequired; [OneTimeSetUp] diff --git a/mRemoteNGTests/Connection/AbstractConnectionInfoDataTests.cs b/mRemoteNGTests/Connection/AbstractConnectionInfoDataTests.cs index 18429003..882cade9 100644 --- a/mRemoteNGTests/Connection/AbstractConnectionInfoDataTests.cs +++ b/mRemoteNGTests/Connection/AbstractConnectionInfoDataTests.cs @@ -165,7 +165,7 @@ namespace mRemoteNGTests.Connection { var wasCalled = false; _testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true; - _testAbstractConnectionInfoData.RDPAuthenticationLevel = RdpProtocol.AuthenticationLevel.AuthRequired; + _testAbstractConnectionInfoData.RDPAuthenticationLevel = AuthenticationLevel.AuthRequired; Assert.That(wasCalled, Is.True); } @@ -201,7 +201,7 @@ namespace mRemoteNGTests.Connection { var wasCalled = false; _testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true; - _testAbstractConnectionInfoData.RDGatewayUsageMethod = RdpProtocol.RDGatewayUsageMethod.Always; + _testAbstractConnectionInfoData.RDGatewayUsageMethod = RDGatewayUsageMethod.Always; Assert.That(wasCalled, Is.True); } @@ -219,7 +219,7 @@ namespace mRemoteNGTests.Connection { var wasCalled = false; _testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true; - _testAbstractConnectionInfoData.RDGatewayUseConnectionCredentials = RdpProtocol.RDGatewayUseConnectionCredentials.SmartCard; + _testAbstractConnectionInfoData.RDGatewayUseConnectionCredentials = RDGatewayUseConnectionCredentials.SmartCard; Assert.That(wasCalled, Is.True); } @@ -255,7 +255,7 @@ namespace mRemoteNGTests.Connection { var wasCalled = false; _testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true; - _testAbstractConnectionInfoData.Resolution = RdpProtocol.RDPResolutions.Res1366x768; + _testAbstractConnectionInfoData.Resolution = RDPResolutions.Res1366x768; Assert.That(wasCalled, Is.True); } @@ -273,7 +273,7 @@ namespace mRemoteNGTests.Connection { var wasCalled = false; _testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true; - _testAbstractConnectionInfoData.Colors = RdpProtocol.RDPColors.Colors16Bit; + _testAbstractConnectionInfoData.Colors = RDPColors.Colors16Bit; Assert.That(wasCalled, Is.True); } @@ -372,7 +372,7 @@ namespace mRemoteNGTests.Connection { var wasCalled = false; _testAbstractConnectionInfoData.PropertyChanged += (sender, args) => wasCalled = true; - _testAbstractConnectionInfoData.RedirectSound = RdpProtocol.RDPSounds.DoNotPlay; + _testAbstractConnectionInfoData.RedirectSound = RDPSounds.DoNotPlay; Assert.That(wasCalled, Is.True); } diff --git a/mRemoteNGTests/UI/Window/ConfigWindowTests/ConfigWindowGeneralTests.cs b/mRemoteNGTests/UI/Window/ConfigWindowTests/ConfigWindowGeneralTests.cs index 8ef389d1..82ac037c 100644 --- a/mRemoteNGTests/UI/Window/ConfigWindowTests/ConfigWindowGeneralTests.cs +++ b/mRemoteNGTests/UI/Window/ConfigWindowTests/ConfigWindowGeneralTests.cs @@ -184,10 +184,10 @@ namespace mRemoteNGTests.UI.Window.ConfigWindowTests : new ConnectionInfo(); node.Protocol = protocol; - node.Resolution = RdpProtocol.RDPResolutions.Res800x600; - node.RDGatewayUsageMethod = RdpProtocol.RDGatewayUsageMethod.Never; - node.RDGatewayUseConnectionCredentials = RdpProtocol.RDGatewayUseConnectionCredentials.Yes; - node.RedirectSound = RdpProtocol.RDPSounds.DoNotPlay; + node.Resolution = RDPResolutions.Res800x600; + node.RDGatewayUsageMethod = RDGatewayUsageMethod.Never; + node.RDGatewayUseConnectionCredentials = RDGatewayUseConnectionCredentials.Yes; + node.RedirectSound = RDPSounds.DoNotPlay; node.VNCAuthMode = ProtocolVNC.AuthMode.AuthVNC; node.VNCProxyType = ProtocolVNC.ProxyType.ProxyNone; node.Inheritance.TurnOffInheritanceCompletely(); diff --git a/mRemoteNGTests/UI/Window/ConfigWindowTests/ConfigWindowRdpSpecialTests.cs b/mRemoteNGTests/UI/Window/ConfigWindowTests/ConfigWindowRdpSpecialTests.cs index 0804652e..448a28e3 100644 --- a/mRemoteNGTests/UI/Window/ConfigWindowTests/ConfigWindowRdpSpecialTests.cs +++ b/mRemoteNGTests/UI/Window/ConfigWindowTests/ConfigWindowRdpSpecialTests.cs @@ -18,12 +18,12 @@ namespace mRemoteNGTests.UI.Window.ConfigWindowTests RunVerification(); } - [TestCase(RdpProtocol.RDGatewayUsageMethod.Always)] - [TestCase(RdpProtocol.RDGatewayUsageMethod.Detect)] - public void RdGatewayPropertiesShown_WhenRdGatewayUsageMethodIsNotNever(RdpProtocol.RDGatewayUsageMethod gatewayUsageMethod) + [TestCase(RDGatewayUsageMethod.Always)] + [TestCase(RDGatewayUsageMethod.Detect)] + public void RdGatewayPropertiesShown_WhenRdGatewayUsageMethodIsNotNever(RDGatewayUsageMethod gatewayUsageMethod) { ConnectionInfo.RDGatewayUsageMethod = gatewayUsageMethod; - ConnectionInfo.RDGatewayUseConnectionCredentials = RdpProtocol.RDGatewayUseConnectionCredentials.Yes; + ConnectionInfo.RDGatewayUseConnectionCredentials = RDGatewayUseConnectionCredentials.Yes; ExpectedPropertyList.AddRange(new [] { nameof(mRemoteNG.Connection.ConnectionInfo.RDGatewayHostname), @@ -33,11 +33,11 @@ namespace mRemoteNGTests.UI.Window.ConfigWindowTests RunVerification(); } - [TestCase(RdpProtocol.RDGatewayUseConnectionCredentials.No)] - [TestCase(RdpProtocol.RDGatewayUseConnectionCredentials.SmartCard)] - public void RdGatewayPropertiesShown_WhenRDGatewayUseConnectionCredentialsIsNotYes(RdpProtocol.RDGatewayUseConnectionCredentials useConnectionCredentials) + [TestCase(RDGatewayUseConnectionCredentials.No)] + [TestCase(RDGatewayUseConnectionCredentials.SmartCard)] + public void RdGatewayPropertiesShown_WhenRDGatewayUseConnectionCredentialsIsNotYes(RDGatewayUseConnectionCredentials useConnectionCredentials) { - ConnectionInfo.RDGatewayUsageMethod = RdpProtocol.RDGatewayUsageMethod.Always; + ConnectionInfo.RDGatewayUsageMethod = RDGatewayUsageMethod.Always; ConnectionInfo.RDGatewayUseConnectionCredentials = useConnectionCredentials; ExpectedPropertyList.AddRange(new [] { @@ -54,15 +54,15 @@ namespace mRemoteNGTests.UI.Window.ConfigWindowTests [Test] public void SoundQualityPropertyShown_WhenRdpSoundsSetToBringToThisComputer() { - ConnectionInfo.RedirectSound = RdpProtocol.RDPSounds.BringToThisComputer; + ConnectionInfo.RedirectSound = RDPSounds.BringToThisComputer; ExpectedPropertyList.Add(nameof(mRemoteNG.Connection.ConnectionInfo.SoundQuality)); RunVerification(); } - [TestCase(RdpProtocol.RDPResolutions.FitToWindow)] - [TestCase(RdpProtocol.RDPResolutions.Fullscreen)] - public void AutomaticResizePropertyShown_WhenResolutionIsDynamic(RdpProtocol.RDPResolutions resolution) + [TestCase(RDPResolutions.FitToWindow)] + [TestCase(RDPResolutions.Fullscreen)] + public void AutomaticResizePropertyShown_WhenResolutionIsDynamic(RDPResolutions resolution) { ConnectionInfo.Resolution = resolution; ExpectedPropertyList.Add(nameof(mRemoteNG.Connection.ConnectionInfo.AutomaticResize)); diff --git a/mRemoteV1/App/Initialization/StartupDataLogger.cs b/mRemoteV1/App/Initialization/StartupDataLogger.cs index d4bc791e..d205a8af 100644 --- a/mRemoteV1/App/Initialization/StartupDataLogger.cs +++ b/mRemoteV1/App/Initialization/StartupDataLogger.cs @@ -76,7 +76,7 @@ namespace mRemoteNG.App.Initialization var architecture = string.Empty; try { - foreach (var o in new ManagementObjectSearcher("SELECT * FROM Win32_Processor WHERE DeviceID=\'CPU0\'") + foreach (var o in new ManagementObjectSearcher("SELECT AddressWidth FROM Win32_Processor WHERE DeviceID=\'CPU0\'") .Get()) { var managementObject = (ManagementObject)o; diff --git a/mRemoteV1/Config/Connections/XmlConnectionsSaver.cs b/mRemoteV1/Config/Connections/XmlConnectionsSaver.cs index c9d9352d..b7cea279 100644 --- a/mRemoteV1/Config/Connections/XmlConnectionsSaver.cs +++ b/mRemoteV1/Config/Connections/XmlConnectionsSaver.cs @@ -32,19 +32,16 @@ namespace mRemoteNG.Config.Connections try { var cryptographyProvider = new CryptoProviderFactoryFromSettings().Build(); - var connectionNodeSerializer = new XmlConnectionNodeSerializer27( - cryptographyProvider, - connectionTreeModel - .RootNodes.OfType() - .First().PasswordString - .ConvertToSecureString(), - _saveFilter); - var xmlConnectionsSerializer = - new XmlConnectionsSerializer(cryptographyProvider, connectionNodeSerializer) - { - UseFullEncryption = mRemoteNG.Settings.Default.EncryptCompleteConnectionsFile - }; - var xml = xmlConnectionsSerializer.Serialize(connectionTreeModel); + var serializerFactory = new XmlConnectionSerializerFactory(); + + var xmlConnectionsSerializer = serializerFactory.Build( + cryptographyProvider, + connectionTreeModel, + _saveFilter, + mRemoteNG.Settings.Default.EncryptCompleteConnectionsFile); + + var rootNode = connectionTreeModel.RootNodes.OfType().First(); + var xml = xmlConnectionsSerializer.Serialize(rootNode); var fileDataProvider = new FileDataProviderWithRollingBackup(_connectionFileName); fileDataProvider.Save(xml); diff --git a/mRemoteV1/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormat.cs b/mRemoteV1/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormat.cs index 5646f729..80a1ca6d 100644 --- a/mRemoteV1/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormat.cs +++ b/mRemoteV1/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsDeserializerMremotengFormat.cs @@ -174,21 +174,21 @@ namespace mRemoteNG.Config.Serializers.Csv if (headers.Contains("RDPAuthenticationLevel")) { - RdpProtocol.AuthenticationLevel value; + AuthenticationLevel value; if (Enum.TryParse(connectionCsv[headers.IndexOf("RDPAuthenticationLevel")], out value)) connectionRecord.RDPAuthenticationLevel = value; } if (headers.Contains("Colors")) { - RdpProtocol.RDPColors value; + RDPColors value; if (Enum.TryParse(connectionCsv[headers.IndexOf("Colors")], out value)) connectionRecord.Colors = value; } if (headers.Contains("Resolution")) { - RdpProtocol.RDPResolutions value; + RDPResolutions value; if (Enum.TryParse(connectionCsv[headers.IndexOf("Resolution")], out value)) connectionRecord.Resolution = value; } @@ -272,7 +272,7 @@ namespace mRemoteNG.Config.Serializers.Csv if (headers.Contains("RedirectSound")) { - RdpProtocol.RDPSounds value; + RDPSounds value; if (Enum.TryParse(connectionCsv[headers.IndexOf("RedirectSound")], out value)) connectionRecord.RedirectSound = value; } @@ -349,14 +349,14 @@ namespace mRemoteNG.Config.Serializers.Csv if (headers.Contains("RDGatewayUsageMethod")) { - RdpProtocol.RDGatewayUsageMethod value; + RDGatewayUsageMethod value; if (Enum.TryParse(connectionCsv[headers.IndexOf("RDGatewayUsageMethod")], out value)) connectionRecord.RDGatewayUsageMethod = value; } if (headers.Contains("RDGatewayUseConnectionCredentials")) { - RdpProtocol.RDGatewayUseConnectionCredentials value; + RDGatewayUseConnectionCredentials value; if (Enum.TryParse(connectionCsv[headers.IndexOf("RDGatewayUseConnectionCredentials")], out value)) connectionRecord.RDGatewayUseConnectionCredentials = value; } diff --git a/mRemoteV1/Config/Serializers/ConnectionSerializers/MsSql/DataTableDeserializer.cs b/mRemoteV1/Config/Serializers/ConnectionSerializers/MsSql/DataTableDeserializer.cs index 4d657a1d..42d5e0a4 100644 --- a/mRemoteV1/Config/Serializers/ConnectionSerializers/MsSql/DataTableDeserializer.cs +++ b/mRemoteV1/Config/Serializers/ConnectionSerializers/MsSql/DataTableDeserializer.cs @@ -100,15 +100,15 @@ namespace mRemoteNG.Config.Serializers.MsSql (IcaProtocol.EncryptionStrength)Enum.Parse(typeof(IcaProtocol.EncryptionStrength), (string)dataRow["ICAEncryptionStrength"]); connectionInfo.RDPAuthenticationLevel = - (RdpProtocol.AuthenticationLevel)Enum.Parse(typeof(RdpProtocol.AuthenticationLevel), + (AuthenticationLevel)Enum.Parse(typeof(AuthenticationLevel), (string)dataRow["RDPAuthenticationLevel"]); connectionInfo.RDPMinutesToIdleTimeout = (int)dataRow["RDPMinutesToIdleTimeout"]; connectionInfo.RDPAlertIdleTimeout = (bool)dataRow["RDPAlertIdleTimeout"]; connectionInfo.LoadBalanceInfo = (string)dataRow["LoadBalanceInfo"]; connectionInfo.Colors = - (RdpProtocol.RDPColors)Enum.Parse(typeof(RdpProtocol.RDPColors), (string)dataRow["Colors"]); + (RDPColors)Enum.Parse(typeof(RDPColors), (string)dataRow["Colors"]); connectionInfo.Resolution = - (RdpProtocol.RDPResolutions)Enum.Parse(typeof(RdpProtocol.RDPResolutions), + (RDPResolutions)Enum.Parse(typeof(RDPResolutions), (string)dataRow["Resolution"]); connectionInfo.AutomaticResize = (bool)dataRow["AutomaticResize"]; connectionInfo.DisplayWallpaper = (bool)dataRow["DisplayWallpaper"]; @@ -122,8 +122,8 @@ namespace mRemoteNG.Config.Serializers.MsSql connectionInfo.RedirectClipboard = (bool)dataRow["RedirectClipboard"]; connectionInfo.RedirectSmartCards = (bool)dataRow["RedirectSmartCards"]; connectionInfo.RedirectSound = - (RdpProtocol.RDPSounds)Enum.Parse(typeof(RdpProtocol.RDPSounds), (string)dataRow["RedirectSound"]); - connectionInfo.SoundQuality = (RdpProtocol.RDPSoundQuality)Enum.Parse(typeof(RdpProtocol.RDPSoundQuality), + (RDPSounds)Enum.Parse(typeof(RDPSounds), (string)dataRow["RedirectSound"]); + connectionInfo.SoundQuality = (RDPSoundQuality)Enum.Parse(typeof(RDPSoundQuality), (string)dataRow["SoundQuality"]); connectionInfo.RedirectAudioCapture = (bool)dataRow["RedirectAudioCapture"]; @@ -152,15 +152,12 @@ namespace mRemoteNG.Config.Serializers.MsSql ["VNCSmartSizeMode"]); connectionInfo.VNCViewOnly = (bool)dataRow["VNCViewOnly"]; connectionInfo.RDGatewayUsageMethod = - (RdpProtocol.RDGatewayUsageMethod)Enum.Parse(typeof(RdpProtocol.RDGatewayUsageMethod), + (RDGatewayUsageMethod)Enum.Parse(typeof(RDGatewayUsageMethod), (string)dataRow["RDGatewayUsageMethod"]); connectionInfo.RDGatewayHostname = (string)dataRow["RDGatewayHostname"]; connectionInfo.RDGatewayUseConnectionCredentials = - (RdpProtocol.RDGatewayUseConnectionCredentials)Enum.Parse( - typeof(RdpProtocol. - RDGatewayUseConnectionCredentials), - (string)dataRow - ["RDGatewayUseConnectionCredentials"]); + (RDGatewayUseConnectionCredentials)Enum.Parse(typeof(RDGatewayUseConnectionCredentials), + (string)dataRow["RDGatewayUseConnectionCredentials"]); connectionInfo.RDGatewayUsername = (string)dataRow["RDGatewayUsername"]; connectionInfo.RDGatewayPassword = DecryptValue((string)dataRow["RDGatewayPassword"]); connectionInfo.RDGatewayDomain = (string)dataRow["RDGatewayDomain"]; diff --git a/mRemoteV1/Config/Serializers/ConnectionSerializers/MsSql/LocalConnectionPropertiesXmlSerializer.cs b/mRemoteV1/Config/Serializers/ConnectionSerializers/MsSql/LocalConnectionPropertiesXmlSerializer.cs index 3af6108d..57ec9b3f 100644 --- a/mRemoteV1/Config/Serializers/ConnectionSerializers/MsSql/LocalConnectionPropertiesXmlSerializer.cs +++ b/mRemoteV1/Config/Serializers/ConnectionSerializers/MsSql/LocalConnectionPropertiesXmlSerializer.cs @@ -20,7 +20,8 @@ namespace mRemoteNG.Config.Serializers.MsSql .Select(m => new XElement("Node", new XAttribute("ConnectionId", m.ConnectionId), new XAttribute("Connected", m.Connected), - new XAttribute("Expanded", m.Expanded))); + new XAttribute("Expanded", m.Expanded), + new XAttribute("Favorite", m.Favorite))); var root = new XElement("LocalConnections", localConnections); var xdoc = new XDocument(new XDeclaration("1.0", "utf-8", null), root); @@ -40,7 +41,8 @@ namespace mRemoteNG.Config.Serializers.MsSql { ConnectionId = e.Attribute("ConnectionId")?.Value, Connected = bool.Parse(e.Attribute("Connected")?.Value ?? "False"), - Expanded = bool.Parse(e.Attribute("Expanded")?.Value ?? "False") + Expanded = bool.Parse(e.Attribute("Expanded")?.Value ?? "False"), + Favorite = bool.Parse(e.Attribute("Favorite")?.Value ?? "False") }); } diff --git a/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionSerializerFactory.cs b/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionSerializerFactory.cs new file mode 100644 index 00000000..c8dbf362 --- /dev/null +++ b/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionSerializerFactory.cs @@ -0,0 +1,33 @@ +using System.Linq; +using mRemoteNG.Connection; +using mRemoteNG.Security; +using mRemoteNG.Tree; +using mRemoteNG.Tree.Root; + +namespace mRemoteNG.Config.Serializers.Xml +{ + public class XmlConnectionSerializerFactory + { + public ISerializer Build( + ICryptographyProvider cryptographyProvider, + ConnectionTreeModel connectionTreeModel, + SaveFilter saveFilter = null, + bool useFullEncryption = false) + { + var encryptionKey = connectionTreeModel + .RootNodes.OfType() + .First().PasswordString + .ConvertToSecureString(); + + var connectionNodeSerializer = new XmlConnectionNodeSerializer27( + cryptographyProvider, + encryptionKey, + saveFilter ?? new SaveFilter()); + + return new XmlConnectionsSerializer(cryptographyProvider, connectionNodeSerializer) + { + UseFullEncryption = useFullEncryption + }; + } + } +} diff --git a/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs b/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs index 60212516..5851c035 100644 --- a/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs +++ b/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDeserializer.cs @@ -226,8 +226,8 @@ namespace mRemoteNG.Config.Serializers.Xml if (_confVersion < 1.1) //1.0 - 0.1 { connectionInfo.Resolution = xmlnode.GetAttributeAsBool("Fullscreen") - ? RdpProtocol.RDPResolutions.Fullscreen - : RdpProtocol.RDPResolutions.FitToWindow; + ? RDPResolutions.Fullscreen + : RDPResolutions.FitToWindow; } if (!Runtime.UseCredentialManager || _confVersion <= 2.6) // 0.2 - 2.6 @@ -318,9 +318,9 @@ namespace mRemoteNG.Config.Serializers.Xml if (_confVersion >= 1.3) { - connectionInfo.Colors = xmlnode.GetAttributeAsEnum("Colors"); - connectionInfo.Resolution = xmlnode.GetAttributeAsEnum("Resolution"); - connectionInfo.RedirectSound = xmlnode.GetAttributeAsEnum("RedirectSound"); + connectionInfo.Colors = xmlnode.GetAttributeAsEnum("Colors"); + connectionInfo.Resolution = xmlnode.GetAttributeAsEnum("Resolution"); + connectionInfo.RedirectSound = xmlnode.GetAttributeAsEnum("RedirectSound"); connectionInfo.RedirectAudioCapture = xmlnode.GetAttributeAsBool("RedirectAudioCapture"); } else @@ -328,25 +328,25 @@ namespace mRemoteNG.Config.Serializers.Xml switch (xmlnode.GetAttributeAsInt("Colors")) { case 0: - connectionInfo.Colors = RdpProtocol.RDPColors.Colors256; + connectionInfo.Colors = RDPColors.Colors256; break; case 1: - connectionInfo.Colors = RdpProtocol.RDPColors.Colors16Bit; + connectionInfo.Colors = RDPColors.Colors16Bit; break; case 2: - connectionInfo.Colors = RdpProtocol.RDPColors.Colors24Bit; + connectionInfo.Colors = RDPColors.Colors24Bit; break; case 3: - connectionInfo.Colors = RdpProtocol.RDPColors.Colors32Bit; + connectionInfo.Colors = RDPColors.Colors32Bit; break; // ReSharper disable once RedundantCaseLabel case 4: default: - connectionInfo.Colors = RdpProtocol.RDPColors.Colors15Bit; + connectionInfo.Colors = RDPColors.Colors15Bit; break; } - connectionInfo.RedirectSound = xmlnode.GetAttributeAsEnum("RedirectSound"); + connectionInfo.RedirectSound = xmlnode.GetAttributeAsEnum("RedirectSound"); connectionInfo.RedirectAudioCapture = xmlnode.GetAttributeAsBool("RedirectAudioCapture"); } @@ -442,7 +442,7 @@ namespace mRemoteNG.Config.Serializers.Xml if (_confVersion >= 1.8) { connectionInfo.RDPAuthenticationLevel = - xmlnode.GetAttributeAsEnum("RDPAuthenticationLevel"); + xmlnode.GetAttributeAsEnum("RDPAuthenticationLevel"); connectionInfo.Inheritance.RDPAuthenticationLevel = xmlnode.GetAttributeAsBool("InheritRDPAuthenticationLevel"); } @@ -472,10 +472,10 @@ namespace mRemoteNG.Config.Serializers.Xml { // Get settings connectionInfo.RDGatewayUsageMethod = - xmlnode.GetAttributeAsEnum("RDGatewayUsageMethod"); + xmlnode.GetAttributeAsEnum("RDGatewayUsageMethod"); connectionInfo.RDGatewayHostname = xmlnode.GetAttributeAsString("RDGatewayHostname"); connectionInfo.RDGatewayUseConnectionCredentials = - xmlnode.GetAttributeAsEnum( + xmlnode.GetAttributeAsEnum( "RDGatewayUseConnectionCredentials"); connectionInfo.RDGatewayUsername = xmlnode.GetAttributeAsString("RDGatewayUsername"); connectionInfo.RDGatewayPassword = @@ -526,7 +526,7 @@ namespace mRemoteNG.Config.Serializers.Xml if (_confVersion >= 2.6) { connectionInfo.SoundQuality = - xmlnode.GetAttributeAsEnum("SoundQuality"); + xmlnode.GetAttributeAsEnum("SoundQuality"); connectionInfo.Inheritance.SoundQuality = xmlnode.GetAttributeAsBool("InheritSoundQuality"); connectionInfo.RDPMinutesToIdleTimeout = xmlnode.GetAttributeAsInt("RDPMinutesToIdleTimeout"); connectionInfo.Inheritance.RDPMinutesToIdleTimeout = diff --git a/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDocumentCompiler.cs b/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDocumentCompiler.cs index acdde98c..8dc44dd1 100644 --- a/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDocumentCompiler.cs +++ b/mRemoteV1/Config/Serializers/ConnectionSerializers/Xml/XmlConnectionsDocumentCompiler.cs @@ -61,7 +61,7 @@ namespace mRemoteNG.Config.Serializers.Xml var serializationTargetAsContainer = serializationTarget as ContainerInfo; if (serializationTargetAsContainer == null) return; - foreach (var child in serializationTargetAsContainer.Children) + foreach (var child in serializationTargetAsContainer.Children.ToArray()) CompileRecursive(child, newElement); } diff --git a/mRemoteV1/Config/Serializers/MiscSerializers/RemoteDesktopConnectionDeserializer.cs b/mRemoteV1/Config/Serializers/MiscSerializers/RemoteDesktopConnectionDeserializer.cs index 9980c626..442a80d0 100644 --- a/mRemoteV1/Config/Serializers/MiscSerializers/RemoteDesktopConnectionDeserializer.cs +++ b/mRemoteV1/Config/Serializers/MiscSerializers/RemoteDesktopConnectionDeserializer.cs @@ -60,19 +60,19 @@ namespace mRemoteNG.Config.Serializers switch (value) { case "8": - connectionInfo.Colors = RdpProtocol.RDPColors.Colors256; + connectionInfo.Colors = RDPColors.Colors256; break; case "15": - connectionInfo.Colors = RdpProtocol.RDPColors.Colors15Bit; + connectionInfo.Colors = RDPColors.Colors15Bit; break; case "16": - connectionInfo.Colors = RdpProtocol.RDPColors.Colors16Bit; + connectionInfo.Colors = RDPColors.Colors16Bit; break; case "24": - connectionInfo.Colors = RdpProtocol.RDPColors.Colors24Bit; + connectionInfo.Colors = RDPColors.Colors24Bit; break; case "32": - connectionInfo.Colors = RdpProtocol.RDPColors.Colors32Bit; + connectionInfo.Colors = RDPColors.Colors32Bit; break; } break; @@ -81,8 +81,8 @@ namespace mRemoteNG.Config.Serializers break; case "screen mode id": connectionInfo.Resolution = value == "2" - ? RdpProtocol.RDPResolutions.Fullscreen - : RdpProtocol.RDPResolutions.FitToWindow; + ? RDPResolutions.Fullscreen + : RDPResolutions.FitToWindow; break; case "connect to console": connectionInfo.UseConsoleSession = value == "1"; @@ -118,13 +118,13 @@ namespace mRemoteNG.Config.Serializers switch (value) { case "0": - connectionInfo.RedirectSound = RdpProtocol.RDPSounds.BringToThisComputer; + connectionInfo.RedirectSound = RDPSounds.BringToThisComputer; break; case "1": - connectionInfo.RedirectSound = RdpProtocol.RDPSounds.LeaveAtRemoteComputer; + connectionInfo.RedirectSound = RDPSounds.LeaveAtRemoteComputer; break; case "2": - connectionInfo.RedirectSound = RdpProtocol.RDPSounds.DoNotPlay; + connectionInfo.RedirectSound = RDPSounds.DoNotPlay; break; } break; @@ -138,13 +138,13 @@ namespace mRemoteNG.Config.Serializers switch (value) { case "0": - connectionInfo.RDGatewayUsageMethod = RdpProtocol.RDGatewayUsageMethod.Never; + connectionInfo.RDGatewayUsageMethod = RDGatewayUsageMethod.Never; break; case "1": - connectionInfo.RDGatewayUsageMethod = RdpProtocol.RDGatewayUsageMethod.Always; + connectionInfo.RDGatewayUsageMethod = RDGatewayUsageMethod.Always; break; case "2": - connectionInfo.RDGatewayUsageMethod = RdpProtocol.RDGatewayUsageMethod.Detect; + connectionInfo.RDGatewayUsageMethod = RDGatewayUsageMethod.Detect; break; } break; diff --git a/mRemoteV1/Config/Serializers/MiscSerializers/RemoteDesktopConnectionManagerDeserializer.cs b/mRemoteV1/Config/Serializers/MiscSerializers/RemoteDesktopConnectionManagerDeserializer.cs index 5c50e06f..505d106f 100644 --- a/mRemoteV1/Config/Serializers/MiscSerializers/RemoteDesktopConnectionManagerDeserializer.cs +++ b/mRemoteV1/Config/Serializers/MiscSerializers/RemoteDesktopConnectionManagerDeserializer.cs @@ -197,8 +197,8 @@ namespace mRemoteNG.Config.Serializers { connectionInfo.RDGatewayUsageMethod = gatewaySettingsNode.SelectSingleNode("./enabled")?.InnerText == "True" - ? RdpProtocol.RDGatewayUsageMethod.Always - : RdpProtocol.RDGatewayUsageMethod.Never; + ? RDGatewayUsageMethod.Always + : RDGatewayUsageMethod.Never; connectionInfo.RDGatewayHostname = gatewaySettingsNode.SelectSingleNode("./hostName")?.InnerText ?? string.Empty; connectionInfo.RDGatewayUsername = gatewaySettingsNode.SelectSingleNode("./userName")?.InnerText ?? string.Empty; @@ -225,21 +225,21 @@ namespace mRemoteNG.Config.Serializers if (remoteDesktopNode?.Attributes?["inherit"]?.Value == "None") { connectionInfo.Resolution = - Enum.TryParse(remoteDesktopNode.SelectSingleNode("./size")?.InnerText.Replace(" ", ""), true, out var rdpResolution) + Enum.TryParse(remoteDesktopNode.SelectSingleNode("./size")?.InnerText.Replace(" ", ""), true, out var rdpResolution) ? rdpResolution - : RdpProtocol.RDPResolutions.FitToWindow; + : RDPResolutions.FitToWindow; if (remoteDesktopNode.SelectSingleNode("./sameSizeAsClientArea")?.InnerText == "True") { - connectionInfo.Resolution = RdpProtocol.RDPResolutions.FitToWindow; + connectionInfo.Resolution = RDPResolutions.FitToWindow; } if (remoteDesktopNode.SelectSingleNode("./fullScreen")?.InnerText == "True") { - connectionInfo.Resolution = RdpProtocol.RDPResolutions.Fullscreen; + connectionInfo.Resolution = RDPResolutions.Fullscreen; } - if (Enum.TryParse(remoteDesktopNode.SelectSingleNode("./colorDepth")?.InnerText, true, out var rdpColors)) + if (Enum.TryParse(remoteDesktopNode.SelectSingleNode("./colorDepth")?.InnerText, true, out var rdpColors)) connectionInfo.Colors = rdpColors; } else @@ -256,15 +256,15 @@ namespace mRemoteNG.Config.Serializers { case "0": // Bring to this computer case "Client": - connectionInfo.RedirectSound = RdpProtocol.RDPSounds.BringToThisComputer; + connectionInfo.RedirectSound = RDPSounds.BringToThisComputer; break; case "1": // Leave at remote computer case "Remote": - connectionInfo.RedirectSound = RdpProtocol.RDPSounds.LeaveAtRemoteComputer; + connectionInfo.RedirectSound = RDPSounds.LeaveAtRemoteComputer; break; case "2": // Do not play case "NoSound": - connectionInfo.RedirectSound = RdpProtocol.RDPSounds.DoNotPlay; + connectionInfo.RedirectSound = RDPSounds.DoNotPlay; break; } @@ -323,15 +323,15 @@ namespace mRemoteNG.Config.Serializers { case "0": // No authentication case "None": - connectionInfo.RDPAuthenticationLevel = RdpProtocol.AuthenticationLevel.NoAuth; + connectionInfo.RDPAuthenticationLevel = AuthenticationLevel.NoAuth; break; case "1": // Do not connect if authentication fails case "Required": - connectionInfo.RDPAuthenticationLevel = RdpProtocol.AuthenticationLevel.AuthRequired; + connectionInfo.RDPAuthenticationLevel = AuthenticationLevel.AuthRequired; break; case "2": // Warn if authentication fails case "Warn": - connectionInfo.RDPAuthenticationLevel = RdpProtocol.AuthenticationLevel.WarnOnFailedAuth; + connectionInfo.RDPAuthenticationLevel = AuthenticationLevel.WarnOnFailedAuth; break; } } diff --git a/mRemoteV1/Connection/AbstractConnectionRecord.cs b/mRemoteV1/Connection/AbstractConnectionRecord.cs index 4630e825..16b2a199 100644 --- a/mRemoteV1/Connection/AbstractConnectionRecord.cs +++ b/mRemoteV1/Connection/AbstractConnectionRecord.cs @@ -31,23 +31,23 @@ namespace mRemoteNG.Connection private string _puttySession; private IcaProtocol.EncryptionStrength _icaEncryption; private bool _useConsoleSession; - private RdpProtocol.AuthenticationLevel _rdpAuthenticationLevel; + private AuthenticationLevel _rdpAuthenticationLevel; private int _rdpMinutesToIdleTimeout; private bool _rdpAlertIdleTimeout; private string _loadBalanceInfo; private HTTPBase.RenderingEngine _renderingEngine; private bool _useCredSsp; - private RdpProtocol.RDGatewayUsageMethod _rdGatewayUsageMethod; + private RDGatewayUsageMethod _rdGatewayUsageMethod; private string _rdGatewayHostname; - private RdpProtocol.RDGatewayUseConnectionCredentials _rdGatewayUseConnectionCredentials; + private RDGatewayUseConnectionCredentials _rdGatewayUseConnectionCredentials; private string _rdGatewayUsername; private string _rdGatewayPassword; private string _rdGatewayDomain; - private RdpProtocol.RDPResolutions _resolution; + private RDPResolutions _resolution; private bool _automaticResize; - private RdpProtocol.RDPColors _colors; + private RDPColors _colors; private bool _cacheBitmaps; private bool _displayWallpaper; private bool _displayThemes; @@ -60,8 +60,8 @@ namespace mRemoteNG.Connection private bool _redirectClipboard; private bool _redirectPorts; private bool _redirectSmartCards; - private RdpProtocol.RDPSounds _redirectSound; - private RdpProtocol.RDPSoundQuality _soundQuality; + private RDPSounds _redirectSound; + private RDPSoundQuality _soundQuality; private bool _redirectAudioCapture; private string _preExtApp; @@ -244,7 +244,7 @@ namespace mRemoteNG.Connection LocalizedAttributes.LocalizedDescription("strPropertyDescriptionAuthenticationLevel"), TypeConverter(typeof(MiscTools.EnumTypeConverter)), UsedInProtocol(ProtocolType.RDP)] - public RdpProtocol.AuthenticationLevel RDPAuthenticationLevel + public AuthenticationLevel RDPAuthenticationLevel { get => GetPropertyValue("RDPAuthenticationLevel", _rdpAuthenticationLevel); set => SetField(ref _rdpAuthenticationLevel, value, "RDPAuthenticationLevel"); @@ -318,7 +318,7 @@ namespace mRemoteNG.Connection LocalizedAttributes.LocalizedDescription("strPropertyDescriptionRDGatewayUsageMethod"), TypeConverter(typeof(MiscTools.EnumTypeConverter)), UsedInProtocol(ProtocolType.RDP)] - public RdpProtocol.RDGatewayUsageMethod RDGatewayUsageMethod + public RDGatewayUsageMethod RDGatewayUsageMethod { get => GetPropertyValue("RDGatewayUsageMethod", _rdGatewayUsageMethod); set => SetField(ref _rdGatewayUsageMethod, value, "RDGatewayUsageMethod"); @@ -339,7 +339,7 @@ namespace mRemoteNG.Connection LocalizedAttributes.LocalizedDescription("strPropertyDescriptionRDGatewayUseConnectionCredentials"), TypeConverter(typeof(MiscTools.EnumTypeConverter)), UsedInProtocol(ProtocolType.RDP)] - public RdpProtocol.RDGatewayUseConnectionCredentials RDGatewayUseConnectionCredentials + public RDGatewayUseConnectionCredentials RDGatewayUseConnectionCredentials { get => GetPropertyValue("RDGatewayUseConnectionCredentials", _rdGatewayUseConnectionCredentials); set => SetField(ref _rdGatewayUseConnectionCredentials, value, "RDGatewayUseConnectionCredentials"); @@ -385,7 +385,7 @@ namespace mRemoteNG.Connection LocalizedAttributes.LocalizedDescription("strPropertyDescriptionResolution"), TypeConverter(typeof(MiscTools.EnumTypeConverter)), UsedInProtocol(ProtocolType.RDP, ProtocolType.ICA)] - public RdpProtocol.RDPResolutions Resolution + public RDPResolutions Resolution { get => GetPropertyValue("Resolution", _resolution); set => SetField(ref _resolution, value, "Resolution"); @@ -407,7 +407,7 @@ namespace mRemoteNG.Connection LocalizedAttributes.LocalizedDescription("strPropertyDescriptionColors"), TypeConverter(typeof(MiscTools.EnumTypeConverter)), UsedInProtocol(ProtocolType.RDP, ProtocolType.ICA)] - public RdpProtocol.RDPColors Colors + public RDPColors Colors { get => GetPropertyValue("Colors", _colors); set => SetField(ref _colors, value, "Colors"); @@ -544,7 +544,7 @@ namespace mRemoteNG.Connection LocalizedAttributes.LocalizedDescription("strPropertyDescriptionRedirectSounds"), TypeConverter(typeof(MiscTools.EnumTypeConverter)), UsedInProtocol(ProtocolType.RDP)] - public RdpProtocol.RDPSounds RedirectSound + public RDPSounds RedirectSound { get => GetPropertyValue("RedirectSound", _redirectSound); set => SetField(ref _redirectSound, value, "RedirectSound"); @@ -555,7 +555,7 @@ namespace mRemoteNG.Connection LocalizedAttributes.LocalizedDescription("strPropertyDescriptionSoundQuality"), TypeConverter(typeof(MiscTools.EnumTypeConverter)), UsedInProtocol(ProtocolType.RDP)] - public RdpProtocol.RDPSoundQuality SoundQuality + public RDPSoundQuality SoundQuality { get => GetPropertyValue("SoundQuality", _soundQuality); set => SetField(ref _soundQuality, value, "SoundQuality"); diff --git a/mRemoteV1/Connection/ConnectionInfo.cs b/mRemoteV1/Connection/ConnectionInfo.cs index cdd3bcfe..a4226d28 100644 --- a/mRemoteV1/Connection/ConnectionInfo.cs +++ b/mRemoteV1/Connection/ConnectionInfo.cs @@ -300,17 +300,11 @@ namespace mRemoteNG.Connection ExtApp = Settings.Default.ConDefaultExtApp; Port = 0; PuttySession = Settings.Default.ConDefaultPuttySession; - ICAEncryptionStrength = (IcaProtocol.EncryptionStrength)Enum.Parse(typeof(IcaProtocol.EncryptionStrength), - Settings - .Default - .ConDefaultICAEncryptionStrength); + ICAEncryptionStrength = (IcaProtocol.EncryptionStrength)Enum.Parse( + typeof(IcaProtocol.EncryptionStrength), Settings.Default.ConDefaultICAEncryptionStrength); UseConsoleSession = Settings.Default.ConDefaultUseConsoleSession; - RDPAuthenticationLevel = (RdpProtocol.AuthenticationLevel)Enum.Parse( - typeof(RdpProtocol.AuthenticationLevel - ), - Settings - .Default - .ConDefaultRDPAuthenticationLevel); + RDPAuthenticationLevel = (AuthenticationLevel)Enum.Parse( + typeof(AuthenticationLevel), Settings.Default.ConDefaultRDPAuthenticationLevel); RDPMinutesToIdleTimeout = Settings.Default.ConDefaultRDPMinutesToIdleTimeout; RDPAlertIdleTimeout = Settings.Default.ConDefaultRDPAlertIdleTimeout; LoadBalanceInfo = Settings.Default.ConDefaultLoadBalanceInfo; @@ -321,21 +315,11 @@ namespace mRemoteNG.Connection private void SetRdGatewayDefaults() { - RDGatewayUsageMethod = (RdpProtocol.RDGatewayUsageMethod)Enum.Parse( - typeof(RdpProtocol.RDGatewayUsageMethod - ), - Settings - .Default - .ConDefaultRDGatewayUsageMethod); + RDGatewayUsageMethod = (RDGatewayUsageMethod)Enum.Parse( + typeof(RDGatewayUsageMethod), Settings.Default.ConDefaultRDGatewayUsageMethod); RDGatewayHostname = Settings.Default.ConDefaultRDGatewayHostname; - RDGatewayUseConnectionCredentials = (RdpProtocol.RDGatewayUseConnectionCredentials)Enum.Parse( - typeof( - RdpProtocol - .RDGatewayUseConnectionCredentials - ), - Settings - .Default - .ConDefaultRDGatewayUseConnectionCredentials); + RDGatewayUseConnectionCredentials = (RDGatewayUseConnectionCredentials)Enum.Parse( + typeof(RDGatewayUseConnectionCredentials), Settings.Default.ConDefaultRDGatewayUseConnectionCredentials); RDGatewayUsername = Settings.Default.ConDefaultRDGatewayUsername; RDGatewayPassword = Settings.Default.ConDefaultRDGatewayPassword; RDGatewayDomain = Settings.Default.ConDefaultRDGatewayDomain; @@ -343,11 +327,10 @@ namespace mRemoteNG.Connection private void SetAppearanceDefaults() { - Resolution = (RdpProtocol.RDPResolutions)Enum.Parse(typeof(RdpProtocol.RDPResolutions), - Settings.Default.ConDefaultResolution); + Resolution = (RDPResolutions)Enum.Parse( + typeof(RDPResolutions), Settings.Default.ConDefaultResolution); AutomaticResize = Settings.Default.ConDefaultAutomaticResize; - Colors = (RdpProtocol.RDPColors)Enum.Parse(typeof(RdpProtocol.RDPColors), - Settings.Default.ConDefaultColors); + Colors = (RDPColors)Enum.Parse(typeof(RDPColors), Settings.Default.ConDefaultColors); CacheBitmaps = Settings.Default.ConDefaultCacheBitmaps; DisplayWallpaper = Settings.Default.ConDefaultDisplayWallpaper; DisplayThemes = Settings.Default.ConDefaultDisplayThemes; @@ -363,9 +346,9 @@ namespace mRemoteNG.Connection RedirectClipboard = Settings.Default.ConDefaultRedirectClipboard; RedirectPorts = Settings.Default.ConDefaultRedirectPorts; RedirectSmartCards = Settings.Default.ConDefaultRedirectSmartCards; - RedirectSound = (RdpProtocol.RDPSounds)Enum.Parse(typeof(RdpProtocol.RDPSounds), + RedirectSound = (RDPSounds)Enum.Parse(typeof(RDPSounds), Settings.Default.ConDefaultRedirectSound); - SoundQuality = (RdpProtocol.RDPSoundQuality)Enum.Parse(typeof(RdpProtocol.RDPSoundQuality), + SoundQuality = (RDPSoundQuality)Enum.Parse(typeof(RDPSoundQuality), Settings.Default.ConDefaultSoundQuality); RedirectAudioCapture = Settings.Default.ConDefaultRedirectAudioCapture; } diff --git a/mRemoteV1/Connection/Protocol/ICA/IcaProtocol.cs b/mRemoteV1/Connection/Protocol/ICA/IcaProtocol.cs index 88cfcbaf..d64a94d4 100644 --- a/mRemoteV1/Connection/Protocol/ICA/IcaProtocol.cs +++ b/mRemoteV1/Connection/Protocol/ICA/IcaProtocol.cs @@ -201,17 +201,17 @@ namespace mRemoteNG.Connection.Protocol.ICA return; } - if (InterfaceControl.Info.Resolution == RdpProtocol.RDPResolutions.FitToWindow) + if (InterfaceControl.Info.Resolution == RDPResolutions.FitToWindow) { _icaClient.SetWindowSize(WFICALib.ICAWindowType.WindowTypeClient, InterfaceControl.Size.Width, InterfaceControl.Size.Height, 0); } - else if (InterfaceControl.Info.Resolution == RdpProtocol.RDPResolutions.SmartSize) + else if (InterfaceControl.Info.Resolution == RDPResolutions.SmartSize) { _icaClient.SetWindowSize(WFICALib.ICAWindowType.WindowTypeClient, InterfaceControl.Size.Width, InterfaceControl.Size.Height, 0); } - else if (InterfaceControl.Info.Resolution == RdpProtocol.RDPResolutions.Fullscreen) + else if (InterfaceControl.Info.Resolution == RDPResolutions.Fullscreen) { _icaClient.SetWindowSize(WFICALib.ICAWindowType.WindowTypeClient, Screen.FromControl(_frmMain).Bounds.Width, @@ -238,13 +238,13 @@ namespace mRemoteNG.Connection.Protocol.ICA // ReSharper disable once SwitchStatementMissingSomeCases switch (_info.Colors) { - case RdpProtocol.RDPColors.Colors256: + case RDPColors.Colors256: _icaClient.SetProp("DesiredColor", "2"); break; - case RdpProtocol.RDPColors.Colors15Bit: + case RDPColors.Colors15Bit: _icaClient.SetProp("DesiredColor", "4"); break; - case RdpProtocol.RDPColors.Colors16Bit: + case RDPColors.Colors16Bit: _icaClient.SetProp("DesiredColor", "4"); break; default: diff --git a/mRemoteV1/Connection/Protocol/RDP/AuthenticationLevel.cs b/mRemoteV1/Connection/Protocol/RDP/AuthenticationLevel.cs new file mode 100644 index 00000000..270ff554 --- /dev/null +++ b/mRemoteV1/Connection/Protocol/RDP/AuthenticationLevel.cs @@ -0,0 +1,16 @@ +using mRemoteNG.Tools; + +namespace mRemoteNG.Connection.Protocol.RDP +{ + public enum AuthenticationLevel + { + [LocalizedAttributes.LocalizedDescription("strAlwaysConnectEvenIfAuthFails")] + NoAuth = 0, + + [LocalizedAttributes.LocalizedDescription("strDontConnectWhenAuthFails")] + AuthRequired = 1, + + [LocalizedAttributes.LocalizedDescription("strWarnIfAuthFails")] + WarnOnFailedAuth = 2 + } +} \ No newline at end of file diff --git a/mRemoteV1/Connection/Protocol/RDP/RDGatewayUsageMethod.cs b/mRemoteV1/Connection/Protocol/RDP/RDGatewayUsageMethod.cs new file mode 100644 index 00000000..672f1b56 --- /dev/null +++ b/mRemoteV1/Connection/Protocol/RDP/RDGatewayUsageMethod.cs @@ -0,0 +1,16 @@ +using mRemoteNG.Tools; + +namespace mRemoteNG.Connection.Protocol.RDP +{ + public enum RDGatewayUsageMethod + { + [LocalizedAttributes.LocalizedDescription("strNever")] + Never = 0, // TSC_PROXY_MODE_NONE_DIRECT + + [LocalizedAttributes.LocalizedDescription("strAlways")] + Always = 1, // TSC_PROXY_MODE_DIRECT + + [LocalizedAttributes.LocalizedDescription("strDetect")] + Detect = 2 // TSC_PROXY_MODE_DETECT + } +} \ No newline at end of file diff --git a/mRemoteV1/Connection/Protocol/RDP/RDGatewayUseConnectionCredentials.cs b/mRemoteV1/Connection/Protocol/RDP/RDGatewayUseConnectionCredentials.cs new file mode 100644 index 00000000..edc9bf08 --- /dev/null +++ b/mRemoteV1/Connection/Protocol/RDP/RDGatewayUseConnectionCredentials.cs @@ -0,0 +1,16 @@ +using mRemoteNG.Tools; + +namespace mRemoteNG.Connection.Protocol.RDP +{ + public enum RDGatewayUseConnectionCredentials + { + [LocalizedAttributes.LocalizedDescription("strUseDifferentUsernameAndPassword")] + No = 0, + + [LocalizedAttributes.LocalizedDescription("strUseSameUsernameAndPassword")] + Yes = 1, + + [LocalizedAttributes.LocalizedDescription("strUseSmartCard")] + SmartCard = 2 + } +} \ No newline at end of file diff --git a/mRemoteV1/Connection/Protocol/RDP/RDPColors.cs b/mRemoteV1/Connection/Protocol/RDP/RDPColors.cs new file mode 100644 index 00000000..0d279128 --- /dev/null +++ b/mRemoteV1/Connection/Protocol/RDP/RDPColors.cs @@ -0,0 +1,22 @@ +using mRemoteNG.Tools; + +namespace mRemoteNG.Connection.Protocol.RDP +{ + public enum RDPColors + { + [LocalizedAttributes.LocalizedDescription("strRDP256Colors")] + Colors256 = 8, + + [LocalizedAttributes.LocalizedDescription("strRDP32768Colors")] + Colors15Bit = 15, + + [LocalizedAttributes.LocalizedDescription("strRDP65536Colors")] + Colors16Bit = 16, + + [LocalizedAttributes.LocalizedDescription("strRDP16777216Colors")] + Colors24Bit = 24, + + [LocalizedAttributes.LocalizedDescription("strRDP4294967296Colors")] + Colors32Bit = 32 + } +} \ No newline at end of file diff --git a/mRemoteV1/Connection/Protocol/RDP/RDPPerformanceFlags.cs b/mRemoteV1/Connection/Protocol/RDP/RDPPerformanceFlags.cs new file mode 100644 index 00000000..872ee54e --- /dev/null +++ b/mRemoteV1/Connection/Protocol/RDP/RDPPerformanceFlags.cs @@ -0,0 +1,22 @@ +using System.ComponentModel; + +namespace mRemoteNG.Connection.Protocol.RDP +{ + public enum RDPPerformanceFlags + { + [Description("strRDPDisableWallpaper")] + DisableWallpaper = 0x1, + +// [Description("strRDPDisableFullWindowdrag")]DisableFullWindowDrag = 0x2, +// [Description("strRDPDisableMenuAnimations")]DisableMenuAnimations = 0x4, + [Description("strRDPDisableThemes")] DisableThemes = 0x8, + +// [Description("strRDPDisableCursorShadow")]DisableCursorShadow = 0x20, +// [Description("strRDPDisableCursorblinking")]DisableCursorBlinking = 0x40, + [Description("strRDPEnableFontSmoothing")] + EnableFontSmoothing = 0x80, + + [Description("strRDPEnableDesktopComposition")] + EnableDesktopComposition = 0x100 + } +} \ No newline at end of file diff --git a/mRemoteV1/Connection/Protocol/RDP/RDPResolutions.cs b/mRemoteV1/Connection/Protocol/RDP/RDPResolutions.cs new file mode 100644 index 00000000..ff4db31a --- /dev/null +++ b/mRemoteV1/Connection/Protocol/RDP/RDPResolutions.cs @@ -0,0 +1,34 @@ +using System.ComponentModel; +using mRemoteNG.Tools; + +namespace mRemoteNG.Connection.Protocol.RDP +{ + public enum RDPResolutions + { + [LocalizedAttributes.LocalizedDescription("strRDPFitToPanel")] + FitToWindow, + + [LocalizedAttributes.LocalizedDescription("strFullscreen")] + Fullscreen, + + [LocalizedAttributes.LocalizedDescription("strRDPSmartSize")] + SmartSize, + [Description("800x600")] Res800x600, + [Description("1024x768")] Res1024x768, + [Description("1152x864")] Res1152x864, + [Description("1280x800")] Res1280x800, + [Description("1280x1024")] Res1280x1024, + [Description("1366x768")] Res1366x768, + [Description("1440x900")] Res1440x900, + [Description("1600x900")] Res1600x900, + [Description("1600x1200")] Res1600x1200, + [Description("1680x1050")] Res1680x1050, + [Description("1920x1080")] Res1920x1080, + [Description("1920x1200")] Res1920x1200, + [Description("2048x1536")] Res2048x1536, + [Description("2560x1440")] Res2560x1440, + [Description("2560x1600")] Res2560x1600, + [Description("2560x2048")] Res2560x2048, + [Description("3840x2160")] Res3840x2160 + } +} \ No newline at end of file diff --git a/mRemoteV1/Connection/Protocol/RDP/RDPSoundQuality.cs b/mRemoteV1/Connection/Protocol/RDP/RDPSoundQuality.cs new file mode 100644 index 00000000..0cc13775 --- /dev/null +++ b/mRemoteV1/Connection/Protocol/RDP/RDPSoundQuality.cs @@ -0,0 +1,16 @@ +using mRemoteNG.Tools; + +namespace mRemoteNG.Connection.Protocol.RDP +{ + public enum RDPSoundQuality + { + [LocalizedAttributes.LocalizedDescription("strRDPSoundQualityDynamic")] + Dynamic = 0, + + [LocalizedAttributes.LocalizedDescription("strRDPSoundQualityMedium")] + Medium = 1, + + [LocalizedAttributes.LocalizedDescription("strRDPSoundQualityHigh")] + High = 2 + } +} \ No newline at end of file diff --git a/mRemoteV1/Connection/Protocol/RDP/RDPSounds.cs b/mRemoteV1/Connection/Protocol/RDP/RDPSounds.cs new file mode 100644 index 00000000..af16d959 --- /dev/null +++ b/mRemoteV1/Connection/Protocol/RDP/RDPSounds.cs @@ -0,0 +1,16 @@ +using mRemoteNG.Tools; + +namespace mRemoteNG.Connection.Protocol.RDP +{ + public enum RDPSounds + { + [LocalizedAttributes.LocalizedDescription("strRDPSoundBringToThisComputer")] + BringToThisComputer = 0, + + [LocalizedAttributes.LocalizedDescription("strRDPSoundLeaveAtRemoteComputer")] + LeaveAtRemoteComputer = 1, + + [LocalizedAttributes.LocalizedDescription("strRDPSoundDoNotPlay")] + DoNotPlay = 2 + } +} \ No newline at end of file diff --git a/mRemoteV1/Connection/Protocol/RDP/RdpProtocol.cs b/mRemoteV1/Connection/Protocol/RDP/RdpProtocol.cs index e6f6ed1a..2a72dec2 100644 --- a/mRemoteV1/Connection/Protocol/RDP/RdpProtocol.cs +++ b/mRemoteV1/Connection/Protocol/RDP/RdpProtocol.cs @@ -1,5 +1,4 @@ using System; -using System.ComponentModel; using System.Diagnostics; using System.Drawing; using System.Threading; @@ -15,7 +14,7 @@ using MSTSCLib; namespace mRemoteNG.Connection.Protocol.RDP { - public class RdpProtocol : ProtocolBase, ISupportsViewOnly + public partial class RdpProtocol : ProtocolBase, ISupportsViewOnly { /* RDP v8 requires Windows 7 with: * https://support.microsoft.com/en-us/kb/2592687 @@ -819,131 +818,6 @@ namespace mRemoteNG.Connection.Protocol.RDP Port = 3389 } - public enum RDPColors - { - [LocalizedAttributes.LocalizedDescription("strRDP256Colors")] - Colors256 = 8, - - [LocalizedAttributes.LocalizedDescription("strRDP32768Colors")] - Colors15Bit = 15, - - [LocalizedAttributes.LocalizedDescription("strRDP65536Colors")] - Colors16Bit = 16, - - [LocalizedAttributes.LocalizedDescription("strRDP16777216Colors")] - Colors24Bit = 24, - - [LocalizedAttributes.LocalizedDescription("strRDP4294967296Colors")] - Colors32Bit = 32 - } - - public enum RDPSounds - { - [LocalizedAttributes.LocalizedDescription("strRDPSoundBringToThisComputer")] - BringToThisComputer = 0, - - [LocalizedAttributes.LocalizedDescription("strRDPSoundLeaveAtRemoteComputer")] - LeaveAtRemoteComputer = 1, - - [LocalizedAttributes.LocalizedDescription("strRDPSoundDoNotPlay")] - DoNotPlay = 2 - } - - public enum RDPSoundQuality - { - [LocalizedAttributes.LocalizedDescription("strRDPSoundQualityDynamic")] - Dynamic = 0, - - [LocalizedAttributes.LocalizedDescription("strRDPSoundQualityMedium")] - Medium = 1, - - [LocalizedAttributes.LocalizedDescription("strRDPSoundQualityHigh")] - High = 2 - } - - private enum RDPPerformanceFlags - { - [Description("strRDPDisableWallpaper")] - DisableWallpaper = 0x1, - -// [Description("strRDPDisableFullWindowdrag")]DisableFullWindowDrag = 0x2, -// [Description("strRDPDisableMenuAnimations")]DisableMenuAnimations = 0x4, - [Description("strRDPDisableThemes")] DisableThemes = 0x8, - -// [Description("strRDPDisableCursorShadow")]DisableCursorShadow = 0x20, -// [Description("strRDPDisableCursorblinking")]DisableCursorBlinking = 0x40, - [Description("strRDPEnableFontSmoothing")] - EnableFontSmoothing = 0x80, - - [Description("strRDPEnableDesktopComposition")] - EnableDesktopComposition = 0x100 - } - - public enum RDPResolutions - { - [LocalizedAttributes.LocalizedDescription("strRDPFitToPanel")] - FitToWindow, - - [LocalizedAttributes.LocalizedDescription("strFullscreen")] - Fullscreen, - - [LocalizedAttributes.LocalizedDescription("strRDPSmartSize")] - SmartSize, - [Description("800x600")] Res800x600, - [Description("1024x768")] Res1024x768, - [Description("1152x864")] Res1152x864, - [Description("1280x800")] Res1280x800, - [Description("1280x1024")] Res1280x1024, - [Description("1366x768")] Res1366x768, - [Description("1440x900")] Res1440x900, - [Description("1600x900")] Res1600x900, - [Description("1600x1200")] Res1600x1200, - [Description("1680x1050")] Res1680x1050, - [Description("1920x1080")] Res1920x1080, - [Description("1920x1200")] Res1920x1200, - [Description("2048x1536")] Res2048x1536, - [Description("2560x1440")] Res2560x1440, - [Description("2560x1600")] Res2560x1600, - [Description("2560x2048")] Res2560x2048, - [Description("3840x2160")] Res3840x2160 - } - - public enum AuthenticationLevel - { - [LocalizedAttributes.LocalizedDescription("strAlwaysConnectEvenIfAuthFails")] - NoAuth = 0, - - [LocalizedAttributes.LocalizedDescription("strDontConnectWhenAuthFails")] - AuthRequired = 1, - - [LocalizedAttributes.LocalizedDescription("strWarnIfAuthFails")] - WarnOnFailedAuth = 2 - } - - public enum RDGatewayUsageMethod - { - [LocalizedAttributes.LocalizedDescription("strNever")] - Never = 0, // TSC_PROXY_MODE_NONE_DIRECT - - [LocalizedAttributes.LocalizedDescription("strAlways")] - Always = 1, // TSC_PROXY_MODE_DIRECT - - [LocalizedAttributes.LocalizedDescription("strDetect")] - Detect = 2 // TSC_PROXY_MODE_DETECT - } - - public enum RDGatewayUseConnectionCredentials - { - [LocalizedAttributes.LocalizedDescription("strUseDifferentUsernameAndPassword")] - No = 0, - - [LocalizedAttributes.LocalizedDescription("strUseSameUsernameAndPassword")] - Yes = 1, - - [LocalizedAttributes.LocalizedDescription("strUseSmartCard")] - SmartCard = 2 - } - #endregion #region Resolution diff --git a/mRemoteV1/Documentation/faq.rst b/mRemoteV1/Documentation/faq.rst index 35226e05..0734338f 100644 --- a/mRemoteV1/Documentation/faq.rst +++ b/mRemoteV1/Documentation/faq.rst @@ -1,4 +1,4 @@ -************************** +************************** Frequently Asked Questions ************************** @@ -12,7 +12,7 @@ You sometimes see PuTTY icons on the side of the terminal (example below). This is a new security feature in PuTTY 0.71. It is meant to signify that PuTTY itself is outputting those lines and not some remote server. Full details are available `here `_. -How can I edit or creat connections in bulk? +How can I edit or create connections in bulk? ============================================ Currently, mRemoteNG does not have a feature to support editing or creating connections in bulk. See :ref:`bulk_connections` for more info on this. diff --git a/mRemoteV1/Documentation/mssql_db_setup.sql b/mRemoteV1/Documentation/mssql_db_setup.sql new file mode 100644 index 00000000..8a6d3a09 --- /dev/null +++ b/mRemoteV1/Documentation/mssql_db_setup.sql @@ -0,0 +1,155 @@ +if exists (select * from dbo.sysobjects + where id = object_id(N'[dbo].[tblCons]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) +drop table [dbo].[tblCons] +GO + +if exists (select * from dbo.sysobjects + where id = object_id(N'[dbo].[tblRoot]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) +drop table [dbo].[tblRoot] +GO + +if exists (select * from dbo.sysobjects + where id = object_id(N'[dbo].[tblUpdate]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) +drop table [dbo].[tblUpdate] +GO + +CREATE TABLE [dbo].[tblCons] ( + [ID] [int] IDENTITY (1001, 1) NOT NULL , + [ConstantID] [varchar] (128) NULL , + [PositionID] [int] NOT NULL , + [ParentID] [varchar] (128) NULL , + [LastChange] [datetime] NOT NULL , + [Name] [varchar] (128) NOT NULL , + [Type] [varchar] (32) NOT NULL , + [Expanded] [bit] NOT NULL , + [Description] [varchar] (1024) NULL , + [Icon] [varchar] (128) NOT NULL , + [Panel] [varchar] (128) NOT NULL , + [Username] [varchar] (512) NULL , + [DomainName] [varchar] (512) NULL , + [Password] [varchar] (1024) NULL , + [Hostname] [varchar] (512) NULL , + [Protocol] [varchar] (32) NOT NULL , + [PuttySession] [varchar] (128) NULL , + [Port] [int] NOT NULL , + [ConnectToConsole] [bit] NOT NULL , + [UseCredSsp] [bit] NOT NULL , + [RenderingEngine] [varchar] (10) NULL , + [ICAEncryptionStrength] [varchar] (32) NOT NULL , + [RDPAuthenticationLevel] [varchar] (32) NOT NULL , + [RDPMinutesToIdleTimeout] [int] NOT NULL, + [RDPAlertIdleTimeout] [bit] NOT NULL, + [Colors] [varchar] (32) NOT NULL , + [Resolution] [varchar] (32) NOT NULL , + [DisplayWallpaper] [bit] NOT NULL , + [DisplayThemes] [bit] NOT NULL , + [EnableFontSmoothing] [bit] NOT NULL , + [EnableDesktopComposition] [bit] NOT NULL , + [CacheBitmaps] [bit] NOT NULL , + [RedirectDiskDrives] [bit] NOT NULL , + [RedirectPorts] [bit] NOT NULL , + [RedirectPrinters] [bit] NOT NULL , + [RedirectSmartCards] [bit] NOT NULL , + [RedirectSound] [varchar] (64) NOT NULL , + [SoundQuality] [varchar] (20) NOT NULL, + [RedirectAudioCapture] [bit] NOT NULL, + [RedirectKeys] [bit] NOT NULL , + [Connected] [bit] NOT NULL , + [PreExtApp] [varchar] (256) NULL , + [PostExtApp] [varchar] (256) NULL , + [MacAddress] [varchar] (32) NULL , + [UserField] [varchar] (256) NULL , + [ExtApp] [varchar] (256) NULL , + [VNCCompression] [varchar] (10) NULL , + [VNCEncoding] [varchar] (20) NULL , + [VNCAuthMode] [varchar] (10) NULL , + [VNCProxyType] [varchar] (20) NULL , + [VNCProxyIP] [varchar] (128) NULL , + [VNCProxyPort] [int] NULL , + [VNCProxyUsername] [varchar] (512) NULL , + [VNCProxyPassword] [varchar] (1024) NULL , + [VNCColors] [varchar] (10) NULL , + [VNCSmartSizeMode] [varchar] (20) NULL , + [VNCViewOnly] [bit] NOT NULL , + [RDGatewayUsageMethod] [varchar] (32) NOT NULL , + [RDGatewayHostname] [varchar] (512) NULL , + [RDGatewayUseConnectionCredentials] [varchar] (32) NOT NULL , + [RDGatewayUsername] [varchar] (512) NULL , + [RDGatewayPassword] [varchar] (1024) NULL , + [RDGatewayDomain] [varchar] (512) NULL , + [InheritCacheBitmaps] [bit] NOT NULL , + [InheritColors] [bit] NOT NULL , + [InheritDescription] [bit] NOT NULL , + [InheritDisplayThemes] [bit] NOT NULL , + [InheritDisplayWallpaper] [bit] NOT NULL , + [InheritEnableFontSmoothing] [bit] NOT NULL , + [InheritEnableDesktopComposition] [bit] NOT NULL , + [InheritDomain] [bit] NOT NULL , + [InheritIcon] [bit] NOT NULL , + [InheritPanel] [bit] NOT NULL , + [InheritPassword] [bit] NOT NULL , + [InheritPort] [bit] NOT NULL , + [InheritProtocol] [bit] NOT NULL , + [InheritPuttySession] [bit] NOT NULL , + [InheritRedirectDiskDrives] [bit] NOT NULL , + [InheritRedirectKeys] [bit] NOT NULL , + [InheritRedirectPorts] [bit] NOT NULL , + [InheritRedirectPrinters] [bit] NOT NULL , + [InheritRedirectSmartCards] [bit] NOT NULL , + [InheritRedirectSound] [bit] NOT NULL , + [InheritSoundQuality] [bit] NOT NULL, + [InheritRedirectAudioCapture] [bit] NOT NULL, + [InheritResolution] [bit] NOT NULL , + [InheritUseConsoleSession] [bit] NOT NULL , + [InheritUseCredSsp] [bit] NOT NULL , + [InheritRenderingEngine] [bit] NOT NULL , + [InheritICAEncryptionStrength] [bit] NOT NULL , + [InheritRDPAuthenticationLevel] [bit] NOT NULL , + [InheritRDPMinutesToIdleTimeout] [bit] NOT NULL, + [InheritRDPAlertIdleTimeout] [bit] NOT NULL, + [InheritUsername] [bit] NOT NULL , + [InheritPreExtApp] [bit] NOT NULL , + [InheritPostExtApp] [bit] NOT NULL , + [InheritMacAddress] [bit] NOT NULL , + [InheritUserField] [bit] NOT NULL , + [InheritExtApp] [bit] NOT NULL , + [InheritVNCCompression] [bit] NOT NULL, + [InheritVNCEncoding] [bit] NOT NULL , + [InheritVNCAuthMode] [bit] NOT NULL , + [InheritVNCProxyType] [bit] NOT NULL , + [InheritVNCProxyIP] [bit] NOT NULL , + [InheritVNCProxyPort] [bit] NOT NULL , + [InheritVNCProxyUsername] [bit] NOT NULL , + [InheritVNCProxyPassword] [bit] NOT NULL , + [InheritVNCColors] [bit] NOT NULL , + [InheritVNCSmartSizeMode] [bit] NOT NULL , + [InheritVNCViewOnly] [bit] NOT NULL , + [InheritRDGatewayUsageMethod] [bit] NOT NULL , + [InheritRDGatewayHostname] [bit] NOT NULL , + [InheritRDGatewayUseConnectionCredentials] [bit] NOT NULL , + [InheritRDGatewayUsername] [bit] NOT NULL , + [InheritRDGatewayPassword] [bit] NOT NULL , + [InheritRDGatewayDomain] [bit] NOT NULL , + [LoadBalanceInfo] [varchar] (1024) NULL , + [AutomaticResize] [bit] NOT NULL DEFAULT 1 , + [InheritLoadBalanceInfo] [bit] NOT NULL DEFAULT 0 , + [InheritAutomaticResize] [bit] NOT NULL DEFAULT 0 , + [RedirectClipboard] [bit] NOT NULL DEFAULT 0 , + [InheritRedirectClipboard] [bit] NOT NULL DEFAULT 0, + [RedirectAudioCapture] [bit] NOT NULL DEFAULT 0, + [InheritRedirectAudioCapture] [bit] NOT NULL DEFAULT 0 +) ON [PRIMARY] +GO + +CREATE TABLE [dbo].[tblRoot] ( + [Name] [varchar] (2048) NOT NULL , + [Export] [bit] NOT NULL , + [Protected] [varchar] (4048) NOT NULL , + [ConfVersion] [float] NOT NULL +) ON [PRIMARY] +GO + +CREATE TABLE [dbo].[tblUpdate] ( + [LastUpdate] [datetime] NULL +) ON [PRIMARY] +GO \ No newline at end of file diff --git a/mRemoteV1/Documentation/mysql_db_setup.sql b/mRemoteV1/Documentation/mysql_db_setup.sql new file mode 100644 index 00000000..66028de7 --- /dev/null +++ b/mRemoteV1/Documentation/mysql_db_setup.sql @@ -0,0 +1,184 @@ +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `tblCons` +-- + +DROP TABLE IF EXISTS `tblCons`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `tblCons` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `ConstantID` varchar(128) DEFAULT NULL, + `PositionID` int(11) NOT NULL, + `ParentID` varchar(128) DEFAULT NULL, + `LastChange` datetime NOT NULL, + `Name` varchar(128) NOT NULL, + `Type` varchar(32) NOT NULL, + `Expanded` tinyint(1) NOT NULL, + `Description` varchar(1024) DEFAULT NULL, + `Icon` varchar(128) NOT NULL, + `Panel` varchar(128) NOT NULL, + `Username` varchar(512) DEFAULT NULL, + `DomainName` varchar(512) DEFAULT NULL, + `Password` varchar(1024) DEFAULT NULL, + `Hostname` varchar(512) DEFAULT NULL, + `Protocol` varchar(32) NOT NULL, + `PuttySession` varchar(128) DEFAULT NULL, + `Port` int(11) NOT NULL, + `ConnectToConsole` tinyint(1) NOT NULL, + `UseCredSsp` tinyint(1) NOT NULL, + `RenderingEngine` varchar(10) DEFAULT NULL, + `ICAEncryptionStrength` varchar(32) NOT NULL, + `RDPAuthenticationLevel` varchar(32) NOT NULL, + `RDPMinutesToIdleTimeout` int(11) NOT NULL, + `RDPAlertIdleTimeout` tinyint(1) NOT NULL, + `Colors` varchar(32) NOT NULL, + `Resolution` varchar(32) NOT NULL, + `DisplayWallpaper` tinyint(1) NOT NULL, + `DisplayThemes` tinyint(1) NOT NULL, + `EnableFontSmoothing` tinyint(1) NOT NULL, + `EnableDesktopComposition` tinyint(1) NOT NULL, + `CacheBitmaps` tinyint(1) NOT NULL, + `RedirectDiskDrives` tinyint(1) NOT NULL, + `RedirectPorts` tinyint(1) NOT NULL, + `RedirectPrinters` tinyint(1) NOT NULL, + `RedirectSmartCards` tinyint(1) NOT NULL, + `RedirectSound` varchar(64) NOT NULL, + `SoundQuality` varchar(20) NOT NULL, + `RedirectAudioCapture` tinyint(1) NOT NULL, + `RedirectKeys` tinyint(1) NOT NULL, + `Connected` tinyint(1) NOT NULL, + `PreExtApp` varchar(256) DEFAULT NULL, + `PostExtApp` varchar(256) DEFAULT NULL, + `MacAddress` varchar(32) DEFAULT NULL, + `UserField` varchar(256) DEFAULT NULL, + `ExtApp` varchar(256) DEFAULT NULL, + `VNCCompression` varchar(10) DEFAULT NULL, + `VNCEncoding` varchar(20) DEFAULT NULL, + `VNCAuthMode` varchar(10) DEFAULT NULL, + `VNCProxyType` varchar(20) DEFAULT NULL, + `VNCProxyIP` varchar(128) DEFAULT NULL, + `VNCProxyPort` int(11) DEFAULT NULL, + `VNCProxyUsername` varchar(512) DEFAULT NULL, + `VNCProxyPassword` varchar(1024) DEFAULT NULL, + `VNCColors` varchar(10) DEFAULT NULL, + `VNCSmartSizeMode` varchar(20) DEFAULT NULL, + `VNCViewOnly` tinyint(1) NOT NULL, + `RDGatewayUsageMethod` varchar(32) NOT NULL, + `RDGatewayHostname` varchar(512) DEFAULT NULL, + `RDGatewayUseConnectionCredentials` varchar(32) NOT NULL, + `RDGatewayUsername` varchar(512) DEFAULT NULL, + `RDGatewayPassword` varchar(1024) DEFAULT NULL, + `RDGatewayDomain` varchar(512) DEFAULT NULL, + `InheritCacheBitmaps` tinyint(1) NOT NULL, + `InheritColors` tinyint(1) NOT NULL, + `InheritDescription` tinyint(1) NOT NULL, + `InheritDisplayThemes` tinyint(1) NOT NULL, + `InheritDisplayWallpaper` tinyint(1) NOT NULL, + `InheritEnableFontSmoothing` tinyint(1) NOT NULL, + `InheritEnableDesktopComposition` tinyint(1) NOT NULL, + `InheritDomain` tinyint(1) NOT NULL, + `InheritIcon` tinyint(1) NOT NULL, + `InheritPanel` tinyint(1) NOT NULL, + `InheritPassword` tinyint(1) NOT NULL, + `InheritPort` tinyint(1) NOT NULL, + `InheritProtocol` tinyint(1) NOT NULL, + `InheritPuttySession` tinyint(1) NOT NULL, + `InheritRedirectDiskDrives` tinyint(1) NOT NULL, + `InheritRedirectKeys` tinyint(1) NOT NULL, + `InheritRedirectPorts` tinyint(1) NOT NULL, + `InheritRedirectPrinters` tinyint(1) NOT NULL, + `InheritRedirectSmartCards` tinyint(1) NOT NULL, + `InheritRedirectSound` tinyint(1) NOT NULL, + `InheritSoundQuality` tinyint(1) NOT NULL, + `InheritRedirectAudioCapture` tinyint(1) NOT NULL, + `InheritResolution` tinyint(1) NOT NULL, + `InheritUseConsoleSession` tinyint(1) NOT NULL, + `InheritUseCredSsp` tinyint(1) NOT NULL, + `InheritRenderingEngine` tinyint(1) NOT NULL, + `InheritICAEncryptionStrength` tinyint(1) NOT NULL, + `InheritRDPAuthenticationLevel` tinyint(1) NOT NULL, + `InheritRDPMinutesToIdleTimeout` tinyint(1) NOT NULL, + `InheritRDPAlertIdleTimeout` tinyint(1) NOT NULL, + `InheritUsername` tinyint(1) NOT NULL, + `InheritPreExtApp` tinyint(1) NOT NULL, + `InheritPostExtApp` tinyint(1) NOT NULL, + `InheritMacAddress` tinyint(1) NOT NULL, + `InheritUserField` tinyint(1) NOT NULL, + `InheritExtApp` tinyint(1) NOT NULL, + `InheritVNCCompression` tinyint(1) NOT NULL, + `InheritVNCEncoding` tinyint(1) NOT NULL, + `InheritVNCAuthMode` tinyint(1) NOT NULL, + `InheritVNCProxyType` tinyint(1) NOT NULL, + `InheritVNCProxyIP` tinyint(1) NOT NULL, + `InheritVNCProxyPort` tinyint(1) NOT NULL, + `InheritVNCProxyUsername` tinyint(1) NOT NULL, + `InheritVNCProxyPassword` tinyint(1) NOT NULL, + `InheritVNCColors` tinyint(1) NOT NULL, + `InheritVNCSmartSizeMode` tinyint(1) NOT NULL, + `InheritVNCViewOnly` tinyint(1) NOT NULL, + `InheritRDGatewayUsageMethod` tinyint(1) NOT NULL, + `InheritRDGatewayHostname` tinyint(1) NOT NULL, + `InheritRDGatewayUseConnectionCredentials` tinyint(1) NOT NULL, + `InheritRDGatewayUsername` tinyint(1) NOT NULL, + `InheritRDGatewayPassword` tinyint(1) NOT NULL, + `InheritRDGatewayDomain` tinyint(1) NOT NULL, + `LoadBalanceInfo` varchar(1024) DEFAULT NULL, + `AutomaticResize` tinyint(1) NOT NULL DEFAULT 1, + `InheritLoadBalanceInfo` tinyint(1) NOT NULL DEFAULT 0, + `InheritAutomaticResize` tinyint(1) NOT NULL DEFAULT 0, + `RedirectClipboard` tinyint(1) NOT NULL DEFAULT 0, + `InheritRedirectClipboard` tinyint(1) NOT NULL DEFAULT 0, + `RedirectAudioCapture` bit NOT NULL DEFAULT 0, + `InheritRedirectAudioCapture` bit NOT NULL DEFAULT 0, + PRIMARY KEY (`ID`) +) ENGINE=InnoDB AUTO_INCREMENT=3324 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `tblRoot` +-- + +DROP TABLE IF EXISTS `tblRoot`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `tblRoot` ( + `Name` varchar(2048) NOT NULL, + `Export` tinyint(1) NOT NULL, + `Protected` varchar(4048) NOT NULL, + `ConfVersion` double NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `tblUpdate` +-- + +DROP TABLE IF EXISTS `tblUpdate`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `tblUpdate` ( + `LastUpdate` datetime(3) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + + +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; \ No newline at end of file diff --git a/mRemoteV1/Documentation/sql_configuration.rst b/mRemoteV1/Documentation/sql_configuration.rst index 6b4c23aa..67d8fb87 100644 --- a/mRemoteV1/Documentation/sql_configuration.rst +++ b/mRemoteV1/Documentation/sql_configuration.rst @@ -6,7 +6,7 @@ SQL Configuration .. warning:: - The SQL feature is in an early beta stage and not intended for use in an productive environment! I recommend you to do a full backup of your connections and settings before switching to SQL Server. + The SQL feature is in an early beta stage and not intended for use in a production environment! I recommend you to do a full backup of your connections and settings before switching to SQL Server. Supported Databases =================== @@ -39,343 +39,12 @@ SQL Table creation Scripts MSSQL ----- -.. code-block:: sql +.. include:: mssql_db_setup.sql + :code: sql - if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tblCons]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) - drop table [dbo].[tblCons] - GO - - if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tblRoot]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) - drop table [dbo].[tblRoot] - GO - - if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tblUpdate]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) - drop table [dbo].[tblUpdate] - GO - - CREATE TABLE [dbo].[tblCons] ( - [ID] [int] IDENTITY (1001, 1) NOT NULL , - [ConstantID] [varchar] (128) NULL , - [PositionID] [int] NOT NULL , - [ParentID] [varchar] (128) NULL , - [LastChange] [datetime] NOT NULL , - [Name] [varchar] (128) NOT NULL , - [Type] [varchar] (32) NOT NULL , - [Expanded] [bit] NOT NULL , - [Description] [varchar] (1024) NULL , - [Icon] [varchar] (128) NOT NULL , - [Panel] [varchar] (128) NOT NULL , - [Username] [varchar] (512) NULL , - [DomainName] [varchar] (512) NULL , - [Password] [varchar] (1024) NULL , - [Hostname] [varchar] (512) NULL , - [Protocol] [varchar] (32) NOT NULL , - [PuttySession] [varchar] (128) NULL , - [Port] [int] NOT NULL , - [ConnectToConsole] [bit] NOT NULL , - [UseCredSsp] [bit] NOT NULL , - [RenderingEngine] [varchar] (10) NULL , - [ICAEncryptionStrength] [varchar] (32) NOT NULL , - [RDPAuthenticationLevel] [varchar] (32) NOT NULL , - [RDPMinutesToIdleTimeout] [int] NOT NULL, - [RDPAlertIdleTimeout] [bit] NOT NULL, - [Colors] [varchar] (32) NOT NULL , - [Resolution] [varchar] (32) NOT NULL , - [DisplayWallpaper] [bit] NOT NULL , - [DisplayThemes] [bit] NOT NULL , - [EnableFontSmoothing] [bit] NOT NULL , - [EnableDesktopComposition] [bit] NOT NULL , - [CacheBitmaps] [bit] NOT NULL , - [RedirectDiskDrives] [bit] NOT NULL , - [RedirectPorts] [bit] NOT NULL , - [RedirectPrinters] [bit] NOT NULL , - [RedirectSmartCards] [bit] NOT NULL , - [RedirectSound] [varchar] (64) NOT NULL , - [SoundQuality] [varchar] (20) NOT NULL, - [RedirectAudioCapture] [bit] NOT NULL, - [RedirectKeys] [bit] NOT NULL , - [Connected] [bit] NOT NULL , - [PreExtApp] [varchar] (256) NULL , - [PostExtApp] [varchar] (256) NULL , - [MacAddress] [varchar] (32) NULL , - [UserField] [varchar] (256) NULL , - [ExtApp] [varchar] (256) NULL , - [VNCCompression] [varchar] (10) NULL , - [VNCEncoding] [varchar] (20) NULL , - [VNCAuthMode] [varchar] (10) NULL , - [VNCProxyType] [varchar] (20) NULL , - [VNCProxyIP] [varchar] (128) NULL , - [VNCProxyPort] [int] NULL , - [VNCProxyUsername] [varchar] (512) NULL , - [VNCProxyPassword] [varchar] (1024) NULL , - [VNCColors] [varchar] (10) NULL , - [VNCSmartSizeMode] [varchar] (20) NULL , - [VNCViewOnly] [bit] NOT NULL , - [RDGatewayUsageMethod] [varchar] (32) NOT NULL , - [RDGatewayHostname] [varchar] (512) NULL , - [RDGatewayUseConnectionCredentials] [varchar] (32) NOT NULL , - [RDGatewayUsername] [varchar] (512) NULL , - [RDGatewayPassword] [varchar] (1024) NULL , - [RDGatewayDomain] [varchar] (512) NULL , - [InheritCacheBitmaps] [bit] NOT NULL , - [InheritColors] [bit] NOT NULL , - [InheritDescription] [bit] NOT NULL , - [InheritDisplayThemes] [bit] NOT NULL , - [InheritDisplayWallpaper] [bit] NOT NULL , - [InheritEnableFontSmoothing] [bit] NOT NULL , - [InheritEnableDesktopComposition] [bit] NOT NULL , - [InheritDomain] [bit] NOT NULL , - [InheritIcon] [bit] NOT NULL , - [InheritPanel] [bit] NOT NULL , - [InheritPassword] [bit] NOT NULL , - [InheritPort] [bit] NOT NULL , - [InheritProtocol] [bit] NOT NULL , - [InheritPuttySession] [bit] NOT NULL , - [InheritRedirectDiskDrives] [bit] NOT NULL , - [InheritRedirectKeys] [bit] NOT NULL , - [InheritRedirectPorts] [bit] NOT NULL , - [InheritRedirectPrinters] [bit] NOT NULL , - [InheritRedirectSmartCards] [bit] NOT NULL , - [InheritRedirectSound] [bit] NOT NULL , - [InheritSoundQuality] [bit] NOT NULL, - [InheritRedirectAudioCapture] [bit] NOT NULL, - [InheritResolution] [bit] NOT NULL , - [InheritUseConsoleSession] [bit] NOT NULL , - [InheritUseCredSsp] [bit] NOT NULL , - [InheritRenderingEngine] [bit] NOT NULL , - [InheritICAEncryptionStrength] [bit] NOT NULL , - [InheritRDPAuthenticationLevel] [bit] NOT NULL , - [InheritRDPMinutesToIdleTimeout] [bit] NOT NULL, - [InheritRDPAlertIdleTimeout] [bit] NOT NULL, - [InheritUsername] [bit] NOT NULL , - [InheritPreExtApp] [bit] NOT NULL , - [InheritPostExtApp] [bit] NOT NULL , - [InheritMacAddress] [bit] NOT NULL , - [InheritUserField] [bit] NOT NULL , - [InheritExtApp] [bit] NOT NULL , - [InheritVNCCompression] [bit] NOT NULL, - [InheritVNCEncoding] [bit] NOT NULL , - [InheritVNCAuthMode] [bit] NOT NULL , - [InheritVNCProxyType] [bit] NOT NULL , - [InheritVNCProxyIP] [bit] NOT NULL , - [InheritVNCProxyPort] [bit] NOT NULL , - [InheritVNCProxyUsername] [bit] NOT NULL , - [InheritVNCProxyPassword] [bit] NOT NULL , - [InheritVNCColors] [bit] NOT NULL , - [InheritVNCSmartSizeMode] [bit] NOT NULL , - [InheritVNCViewOnly] [bit] NOT NULL , - [InheritRDGatewayUsageMethod] [bit] NOT NULL , - [InheritRDGatewayHostname] [bit] NOT NULL , - [InheritRDGatewayUseConnectionCredentials] [bit] NOT NULL , - [InheritRDGatewayUsername] [bit] NOT NULL , - [InheritRDGatewayPassword] [bit] NOT NULL , - [InheritRDGatewayDomain] [bit] NOT NULL , - [LoadBalanceInfo] [varchar] (1024) NULL , - [AutomaticResize] [bit] NOT NULL DEFAULT 1 , - [InheritLoadBalanceInfo] [bit] NOT NULL DEFAULT 0 , - [InheritAutomaticResize] [bit] NOT NULL DEFAULT 0 , - [RedirectClipboard] [bit] NOT NULL DEFAULT 0 , - [InheritRedirectClipboard] [bit] NOT NULL DEFAULT 0 - ) ON [PRIMARY] - GO - - CREATE TABLE [dbo].[tblRoot] ( - [Name] [varchar] (2048) NOT NULL , - [Export] [bit] NOT NULL , - [Protected] [varchar] (4048) NOT NULL , - [ConfVersion] [float] NOT NULL - ) ON [PRIMARY] - GO - - CREATE TABLE [dbo].[tblUpdate] ( - [LastUpdate] [datetime] NULL - ) ON [PRIMARY] - GO MYSQL ----- -.. code-block:: sql - - /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; - /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; - /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; - /*!40101 SET NAMES utf8 */; - /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; - /*!40103 SET TIME_ZONE='+00:00' */; - /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; - /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; - /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; - /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; - - -- - -- Table structure for table `tblCons` - -- - - DROP TABLE IF EXISTS `tblCons`; - /*!40101 SET @saved_cs_client = @@character_set_client */; - /*!40101 SET character_set_client = utf8 */; - CREATE TABLE `tblCons` ( - `ID` int(11) NOT NULL AUTO_INCREMENT, - `ConstantID` varchar(128) DEFAULT NULL, - `PositionID` int(11) NOT NULL, - `ParentID` varchar(128) DEFAULT NULL, - `LastChange` datetime NOT NULL, - `Name` varchar(128) NOT NULL, - `Type` varchar(32) NOT NULL, - `Expanded` tinyint(1) NOT NULL, - `Description` varchar(1024) DEFAULT NULL, - `Icon` varchar(128) NOT NULL, - `Panel` varchar(128) NOT NULL, - `Username` varchar(512) DEFAULT NULL, - `DomainName` varchar(512) DEFAULT NULL, - `Password` varchar(1024) DEFAULT NULL, - `Hostname` varchar(512) DEFAULT NULL, - `Protocol` varchar(32) NOT NULL, - `PuttySession` varchar(128) DEFAULT NULL, - `Port` int(11) NOT NULL, - `ConnectToConsole` tinyint(1) NOT NULL, - `UseCredSsp` tinyint(1) NOT NULL, - `RenderingEngine` varchar(10) DEFAULT NULL, - `ICAEncryptionStrength` varchar(32) NOT NULL, - `RDPAuthenticationLevel` varchar(32) NOT NULL, - `RDPMinutesToIdleTimeout` int(11) NOT NULL, - `RDPAlertIdleTimeout` tinyint(1) NOT NULL, - `Colors` varchar(32) NOT NULL, - `Resolution` varchar(32) NOT NULL, - `DisplayWallpaper` tinyint(1) NOT NULL, - `DisplayThemes` tinyint(1) NOT NULL, - `EnableFontSmoothing` tinyint(1) NOT NULL, - `EnableDesktopComposition` tinyint(1) NOT NULL, - `CacheBitmaps` tinyint(1) NOT NULL, - `RedirectDiskDrives` tinyint(1) NOT NULL, - `RedirectPorts` tinyint(1) NOT NULL, - `RedirectPrinters` tinyint(1) NOT NULL, - `RedirectSmartCards` tinyint(1) NOT NULL, - `RedirectSound` varchar(64) NOT NULL, - `SoundQuality` varchar(20) NOT NULL, - `RedirectAudioCapture` tinyint(1) NOT NULL, - `RedirectKeys` tinyint(1) NOT NULL, - `Connected` tinyint(1) NOT NULL, - `PreExtApp` varchar(256) DEFAULT NULL, - `PostExtApp` varchar(256) DEFAULT NULL, - `MacAddress` varchar(32) DEFAULT NULL, - `UserField` varchar(256) DEFAULT NULL, - `ExtApp` varchar(256) DEFAULT NULL, - `VNCCompression` varchar(10) DEFAULT NULL, - `VNCEncoding` varchar(20) DEFAULT NULL, - `VNCAuthMode` varchar(10) DEFAULT NULL, - `VNCProxyType` varchar(20) DEFAULT NULL, - `VNCProxyIP` varchar(128) DEFAULT NULL, - `VNCProxyPort` int(11) DEFAULT NULL, - `VNCProxyUsername` varchar(512) DEFAULT NULL, - `VNCProxyPassword` varchar(1024) DEFAULT NULL, - `VNCColors` varchar(10) DEFAULT NULL, - `VNCSmartSizeMode` varchar(20) DEFAULT NULL, - `VNCViewOnly` tinyint(1) NOT NULL, - `RDGatewayUsageMethod` varchar(32) NOT NULL, - `RDGatewayHostname` varchar(512) DEFAULT NULL, - `RDGatewayUseConnectionCredentials` varchar(32) NOT NULL, - `RDGatewayUsername` varchar(512) DEFAULT NULL, - `RDGatewayPassword` varchar(1024) DEFAULT NULL, - `RDGatewayDomain` varchar(512) DEFAULT NULL, - `InheritCacheBitmaps` tinyint(1) NOT NULL, - `InheritColors` tinyint(1) NOT NULL, - `InheritDescription` tinyint(1) NOT NULL, - `InheritDisplayThemes` tinyint(1) NOT NULL, - `InheritDisplayWallpaper` tinyint(1) NOT NULL, - `InheritEnableFontSmoothing` tinyint(1) NOT NULL, - `InheritEnableDesktopComposition` tinyint(1) NOT NULL, - `InheritDomain` tinyint(1) NOT NULL, - `InheritIcon` tinyint(1) NOT NULL, - `InheritPanel` tinyint(1) NOT NULL, - `InheritPassword` tinyint(1) NOT NULL, - `InheritPort` tinyint(1) NOT NULL, - `InheritProtocol` tinyint(1) NOT NULL, - `InheritPuttySession` tinyint(1) NOT NULL, - `InheritRedirectDiskDrives` tinyint(1) NOT NULL, - `InheritRedirectKeys` tinyint(1) NOT NULL, - `InheritRedirectPorts` tinyint(1) NOT NULL, - `InheritRedirectPrinters` tinyint(1) NOT NULL, - `InheritRedirectSmartCards` tinyint(1) NOT NULL, - `InheritRedirectSound` tinyint(1) NOT NULL, - `InheritSoundQuality` tinyint(1) NOT NULL, - `InheritRedirectAudioCapture` tinyint(1) NOT NULL, - `InheritResolution` tinyint(1) NOT NULL, - `InheritUseConsoleSession` tinyint(1) NOT NULL, - `InheritUseCredSsp` tinyint(1) NOT NULL, - `InheritRenderingEngine` tinyint(1) NOT NULL, - `InheritICAEncryptionStrength` tinyint(1) NOT NULL, - `InheritRDPAuthenticationLevel` tinyint(1) NOT NULL, - `InheritRDPMinutesToIdleTimeout` tinyint(1) NOT NULL, - `InheritRDPAlertIdleTimeout` tinyint(1) NOT NULL, - `InheritUsername` tinyint(1) NOT NULL, - `InheritPreExtApp` tinyint(1) NOT NULL, - `InheritPostExtApp` tinyint(1) NOT NULL, - `InheritMacAddress` tinyint(1) NOT NULL, - `InheritUserField` tinyint(1) NOT NULL, - `InheritExtApp` tinyint(1) NOT NULL, - `InheritVNCCompression` tinyint(1) NOT NULL, - `InheritVNCEncoding` tinyint(1) NOT NULL, - `InheritVNCAuthMode` tinyint(1) NOT NULL, - `InheritVNCProxyType` tinyint(1) NOT NULL, - `InheritVNCProxyIP` tinyint(1) NOT NULL, - `InheritVNCProxyPort` tinyint(1) NOT NULL, - `InheritVNCProxyUsername` tinyint(1) NOT NULL, - `InheritVNCProxyPassword` tinyint(1) NOT NULL, - `InheritVNCColors` tinyint(1) NOT NULL, - `InheritVNCSmartSizeMode` tinyint(1) NOT NULL, - `InheritVNCViewOnly` tinyint(1) NOT NULL, - `InheritRDGatewayUsageMethod` tinyint(1) NOT NULL, - `InheritRDGatewayHostname` tinyint(1) NOT NULL, - `InheritRDGatewayUseConnectionCredentials` tinyint(1) NOT NULL, - `InheritRDGatewayUsername` tinyint(1) NOT NULL, - `InheritRDGatewayPassword` tinyint(1) NOT NULL, - `InheritRDGatewayDomain` tinyint(1) NOT NULL, - `LoadBalanceInfo` varchar(1024) DEFAULT NULL, - `AutomaticResize` tinyint(1) NOT NULL DEFAULT 1, - `InheritLoadBalanceInfo` tinyint(1) NOT NULL DEFAULT 0, - `InheritAutomaticResize` tinyint(1) NOT NULL DEFAULT 0, - `RedirectClipboard` tinyint(1) NOT NULL DEFAULT 0, - `InheritRedirectClipboard` tinyint(1) NOT NULL DEFAULT 0, - PRIMARY KEY (`ID`) - ) ENGINE=InnoDB AUTO_INCREMENT=3324 DEFAULT CHARSET=latin1; - /*!40101 SET character_set_client = @saved_cs_client */; - - -- - -- Table structure for table `tblRoot` - -- - - DROP TABLE IF EXISTS `tblRoot`; - /*!40101 SET @saved_cs_client = @@character_set_client */; - /*!40101 SET character_set_client = utf8 */; - CREATE TABLE `tblRoot` ( - `Name` varchar(2048) NOT NULL, - `Export` tinyint(1) NOT NULL, - `Protected` varchar(4048) NOT NULL, - `ConfVersion` double NOT NULL - ) ENGINE=InnoDB DEFAULT CHARSET=latin1; - /*!40101 SET character_set_client = @saved_cs_client */; - - -- - -- Table structure for table `tblUpdate` - -- - - DROP TABLE IF EXISTS `tblUpdate`; - /*!40101 SET @saved_cs_client = @@character_set_client */; - /*!40101 SET character_set_client = utf8 */; - CREATE TABLE `tblUpdate` ( - `LastUpdate` datetime(3) DEFAULT NULL - ) ENGINE=InnoDB DEFAULT CHARSET=latin1; - /*!40101 SET character_set_client = @saved_cs_client */; - - - /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; - - /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; - /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; - /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; - /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; - /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; - /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; - /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +.. include:: mysql_db_setup.sql + :code: sql diff --git a/mRemoteV1/Documentation/user_interface/connections.rst b/mRemoteV1/Documentation/user_interface/connections.rst index 9fa9b269..84aa31e4 100644 --- a/mRemoteV1/Documentation/user_interface/connections.rst +++ b/mRemoteV1/Documentation/user_interface/connections.rst @@ -23,7 +23,11 @@ New Connection .. tip:: - You can also duplicate an already created connection if you want to follow some sort of template of a connection. Just right click on folder or connection to duplicate the item. The information is then carried over for editing. This can save a lot of time when the connection list is large. + You can also duplicate an existing connection. Just right click on folder or connection to duplicate the item. The information is then carried over for editing. This can save a lot of time when the connection list is large. + +.. tip:: + + When inside an SSH session you can open the PuTTY menu by holding down the CTRL key while right-clicking into the session window. Creates a new connection item in the connections dialog after where cursor is present. diff --git a/mRemoteV1/Properties/Settings.Designer.cs b/mRemoteV1/Properties/Settings.Designer.cs index 1ebb21b1..5a63c5d6 100644 --- a/mRemoteV1/Properties/Settings.Designer.cs +++ b/mRemoteV1/Properties/Settings.Designer.cs @@ -12,7 +12,7 @@ namespace mRemoteNG { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.0.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); @@ -2295,7 +2295,7 @@ namespace mRemoteNG { [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("1000")] + [global::System.Configuration.DefaultSettingValueAttribute("10000")] public int EncryptionKeyDerivationIterations { get { return ((int)(this["EncryptionKeyDerivationIterations"])); diff --git a/mRemoteV1/Properties/Settings.settings b/mRemoteV1/Properties/Settings.settings index e1dd398d..90374d26 100644 --- a/mRemoteV1/Properties/Settings.settings +++ b/mRemoteV1/Properties/Settings.settings @@ -148,8 +148,8 @@ DoNotPlay - - + + False @@ -256,8 +256,8 @@ False - - + + False @@ -570,7 +570,7 @@ GCM - 1000 + 10000 Dynamic diff --git a/mRemoteV1/Resources/Language/Language.Designer.cs b/mRemoteV1/Resources/Language/Language.Designer.cs index 231ab296..3f01a320 100644 --- a/mRemoteV1/Resources/Language/Language.Designer.cs +++ b/mRemoteV1/Resources/Language/Language.Designer.cs @@ -19,7 +19,7 @@ namespace mRemoteNG { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Language { @@ -212,6 +212,23 @@ namespace mRemoteNG { return ResourceManager.GetString("Edit", resourceCulture); } } + + /// Looks up a localized string similar to Encryption Test. + /// + internal static string EncryptionTest { + get { + return ResourceManager.GetString("EncryptionTest", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Encrypting {0} entries using {1}/{2} and {3} iterations took {4} seconds.. + /// + internal static string EncryptionTestResultMessage { + get { + return ResourceManager.GetString("EncryptionTestResultMessage", resourceCulture); + } + } /// /// Looks up a localized string similar to Environment. @@ -8011,6 +8028,15 @@ namespace mRemoteNG { } } + /// + /// Looks up a localized string similar to Test Settings. + /// + internal static string TestSettings { + get { + return ResourceManager.GetString("TestSettings", resourceCulture); + } + } + /// /// Looks up a localized string similar to An unhandled exception has occurred. /// diff --git a/mRemoteV1/Resources/Language/Language.es.resx b/mRemoteV1/Resources/Language/Language.es.resx index 84542f00..ddcf2a00 100644 --- a/mRemoteV1/Resources/Language/Language.es.resx +++ b/mRemoteV1/Resources/Language/Language.es.resx @@ -1334,7 +1334,7 @@ Arrancando con un nuevo archivo de conexiones. Introduzca su nombre de usuario de autentificación en el proxy. - Nombre dle host/IP + Nombre del host/IP Todo @@ -2068,4 +2068,4 @@ mRemoteNG ahora se cerrará y comenzará la instalación. - \ No newline at end of file + diff --git a/mRemoteV1/Resources/Language/Language.resx b/mRemoteV1/Resources/Language/Language.resx index ff0c190b..510eaacf 100644 --- a/mRemoteV1/Resources/Language/Language.resx +++ b/mRemoteV1/Resources/Language/Language.resx @@ -2802,4 +2802,13 @@ Development Channel includes Alphas, Betas & Release Candidates. Edit + + Encrypting {0} entries using {1}/{2} and {3} iterations took {4} seconds. + + + Encryption Test + + + Test Settings + \ No newline at end of file diff --git a/mRemoteV1/Resources/Language/Language.ru.resx b/mRemoteV1/Resources/Language/Language.ru.resx index 69e7681a..f294419f 100644 --- a/mRemoteV1/Resources/Language/Language.ru.resx +++ b/mRemoteV1/Resources/Language/Language.ru.resx @@ -2446,7 +2446,7 @@ mRemoteNG сейчас прекратит работу и начнет проц Минуты в режим ожидания - Приминить + Применить Добавить diff --git a/mRemoteV1/Resources/Language/Language.zh-CN.resx b/mRemoteV1/Resources/Language/Language.zh-CN.resx index 57f091f2..8cc0ac22 100644 --- a/mRemoteV1/Resources/Language/Language.zh-CN.resx +++ b/mRemoteV1/Resources/Language/Language.zh-CN.resx @@ -2769,7 +2769,7 @@ mRemoteNG 将退出并安装更新。 Multi SSH: - 按 ENTER 发送。 Ctrl+C 立即发送。 + 按 ENTER 发送。Ctrl+C 立即发送。 在收藏夹菜单中显示此连接。 @@ -2792,4 +2792,13 @@ mRemoteNG 将退出并安装更新。 环境 + + 使用 {1}/{2} 和 {3} 迭代加密 {0} 条目花费了 {4} 秒。 + + + 加密测试 + + + 测试设置 + \ No newline at end of file diff --git a/mRemoteV1/UI/Controls/ConnectionInfoPropertyGrid/ConnectionInfoPropertyGrid.cs b/mRemoteV1/UI/Controls/ConnectionInfoPropertyGrid/ConnectionInfoPropertyGrid.cs index edc135c8..67085299 100644 --- a/mRemoteV1/UI/Controls/ConnectionInfoPropertyGrid/ConnectionInfoPropertyGrid.cs +++ b/mRemoteV1/UI/Controls/ConnectionInfoPropertyGrid/ConnectionInfoPropertyGrid.cs @@ -221,7 +221,7 @@ namespace mRemoteNG.UI.Controls.ConnectionInfoPropertyGrid strHide.Add(nameof(AbstractConnectionRecord.RDPAlertIdleTimeout)); } - if (SelectedConnectionInfo.RDGatewayUsageMethod == RdpProtocol.RDGatewayUsageMethod.Never) + if (SelectedConnectionInfo.RDGatewayUsageMethod == RDGatewayUsageMethod.Never) { strHide.Add(nameof(AbstractConnectionRecord.RDGatewayDomain)); strHide.Add(nameof(AbstractConnectionRecord.RDGatewayHostname)); @@ -230,20 +230,20 @@ namespace mRemoteNG.UI.Controls.ConnectionInfoPropertyGrid strHide.Add(nameof(AbstractConnectionRecord.RDGatewayUsername)); } else if (SelectedConnectionInfo.RDGatewayUseConnectionCredentials == - RdpProtocol.RDGatewayUseConnectionCredentials.Yes) + RDGatewayUseConnectionCredentials.Yes) { strHide.Add(nameof(AbstractConnectionRecord.RDGatewayDomain)); strHide.Add(nameof(AbstractConnectionRecord.RDGatewayPassword)); strHide.Add(nameof(AbstractConnectionRecord.RDGatewayUsername)); } - if (!(SelectedConnectionInfo.Resolution == RdpProtocol.RDPResolutions.FitToWindow || - SelectedConnectionInfo.Resolution == RdpProtocol.RDPResolutions.Fullscreen)) + if (!(SelectedConnectionInfo.Resolution == RDPResolutions.FitToWindow || + SelectedConnectionInfo.Resolution == RDPResolutions.Fullscreen)) { strHide.Add(nameof(AbstractConnectionRecord.AutomaticResize)); } - if (SelectedConnectionInfo.RedirectSound != RdpProtocol.RDPSounds.BringToThisComputer) + if (SelectedConnectionInfo.RedirectSound != RDPSounds.BringToThisComputer) { strHide.Add(nameof(AbstractConnectionRecord.SoundQuality)); } diff --git a/mRemoteV1/UI/Controls/QuickConnectComboBox.cs b/mRemoteV1/UI/Controls/QuickConnectComboBox.cs index 2773849b..7380c284 100644 --- a/mRemoteV1/UI/Controls/QuickConnectComboBox.cs +++ b/mRemoteV1/UI/Controls/QuickConnectComboBox.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Drawing; using System.Windows.Forms; using mRemoteNG.App; @@ -20,6 +20,7 @@ namespace mRemoteNG.UI.Controls _comboBox.SelectedIndexChanged += ComboBox_SelectedIndexChanged; _comboBox.DrawItem += ComboBox_DrawItem; _comboBox.DrawMode = DrawMode.OwnerDrawFixed; + CausesValidation = false; // This makes it so that _ignoreEnter works correctly before any items are added to the combo box _comboBox.Items.Clear(); diff --git a/mRemoteV1/UI/Forms/OptionsPages/SecurityPage.Designer.cs b/mRemoteV1/UI/Forms/OptionsPages/SecurityPage.Designer.cs index ef4c347b..497ef280 100644 --- a/mRemoteV1/UI/Forms/OptionsPages/SecurityPage.Designer.cs +++ b/mRemoteV1/UI/Forms/OptionsPages/SecurityPage.Designer.cs @@ -34,12 +34,13 @@ this.labelBlockCipher = new mRemoteNG.UI.Controls.Base.NGLabel(); this.comboBoxBlockCipher = new mRemoteNG.UI.Controls.Base.NGComboBox(); this.groupAdvancedSecurityOptions = new mRemoteNG.UI.Controls.Base.NGGroupBox(); - this.numberBoxKdfIterations = new mRemoteNG.UI.Controls.Base.NGNumericUpDown(); - this.labelKdfIterations = new mRemoteNG.UI.Controls.Base.NGLabel(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.btnTestSettings = new mRemoteNG.UI.Controls.Base.NGButton(); + this.labelKdfIterations = new mRemoteNG.UI.Controls.Base.NGLabel(); + this.numberBoxKdfIterations = new mRemoteNG.UI.Controls.Base.NGNumericUpDown(); this.groupAdvancedSecurityOptions.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.numberBoxKdfIterations)).BeginInit(); this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numberBoxKdfIterations)).BeginInit(); this.SuspendLayout(); // // chkEncryptCompleteFile @@ -60,7 +61,7 @@ this.comboBoxEncryptionEngine.Dock = System.Windows.Forms.DockStyle.Fill; this.comboBoxEncryptionEngine.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBoxEncryptionEngine.FormattingEnabled = true; - this.comboBoxEncryptionEngine.Location = new System.Drawing.Point(223, 3); + this.comboBoxEncryptionEngine.Location = new System.Drawing.Point(190, 3); this.comboBoxEncryptionEngine.Name = "comboBoxEncryptionEngine"; this.comboBoxEncryptionEngine.Size = new System.Drawing.Size(131, 21); this.comboBoxEncryptionEngine.Sorted = true; @@ -72,7 +73,7 @@ this.labelEncryptionEngine.Dock = System.Windows.Forms.DockStyle.Fill; this.labelEncryptionEngine.Location = new System.Drawing.Point(3, 0); this.labelEncryptionEngine.Name = "labelEncryptionEngine"; - this.labelEncryptionEngine.Size = new System.Drawing.Size(214, 26); + this.labelEncryptionEngine.Size = new System.Drawing.Size(181, 27); this.labelEncryptionEngine.TabIndex = 0; this.labelEncryptionEngine.Text = "Encryption Engine"; this.labelEncryptionEngine.TextAlign = System.Drawing.ContentAlignment.MiddleRight; @@ -81,9 +82,9 @@ // this.labelBlockCipher.AutoSize = true; this.labelBlockCipher.Dock = System.Windows.Forms.DockStyle.Fill; - this.labelBlockCipher.Location = new System.Drawing.Point(3, 26); + this.labelBlockCipher.Location = new System.Drawing.Point(3, 27); this.labelBlockCipher.Name = "labelBlockCipher"; - this.labelBlockCipher.Size = new System.Drawing.Size(214, 26); + this.labelBlockCipher.Size = new System.Drawing.Size(181, 27); this.labelBlockCipher.TabIndex = 2; this.labelBlockCipher.Text = "Block Cipher Mode"; this.labelBlockCipher.TextAlign = System.Drawing.ContentAlignment.MiddleRight; @@ -94,21 +95,69 @@ this.comboBoxBlockCipher.Dock = System.Windows.Forms.DockStyle.Fill; this.comboBoxBlockCipher.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBoxBlockCipher.FormattingEnabled = true; - this.comboBoxBlockCipher.Location = new System.Drawing.Point(223, 29); + this.comboBoxBlockCipher.Location = new System.Drawing.Point(190, 30); this.comboBoxBlockCipher.Name = "comboBoxBlockCipher"; this.comboBoxBlockCipher.Size = new System.Drawing.Size(131, 21); - this.comboBoxBlockCipher.TabIndex = 3; + this.comboBoxBlockCipher.TabIndex = 2; // // groupAdvancedSecurityOptions // this.groupAdvancedSecurityOptions.Controls.Add(this.tableLayoutPanel1); this.groupAdvancedSecurityOptions.Location = new System.Drawing.Point(3, 30); this.groupAdvancedSecurityOptions.Name = "groupAdvancedSecurityOptions"; - this.groupAdvancedSecurityOptions.Size = new System.Drawing.Size(604, 112); + this.groupAdvancedSecurityOptions.Size = new System.Drawing.Size(604, 134); this.groupAdvancedSecurityOptions.TabIndex = 1; this.groupAdvancedSecurityOptions.TabStop = false; this.groupAdvancedSecurityOptions.Text = "Advanced Security Options"; // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.AutoSize = true; + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.Controls.Add(this.labelKdfIterations, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.numberBoxKdfIterations, 1, 2); + this.tableLayoutPanel1.Controls.Add(this.labelBlockCipher, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.comboBoxEncryptionEngine, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.labelEncryptionEngine, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.comboBoxBlockCipher, 1, 1); + this.tableLayoutPanel1.Controls.Add(this.btnTestSettings, 1, 3); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Left; + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 18); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 4; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(324, 113); + this.tableLayoutPanel1.TabIndex = 2; + // + // btnTestSettings + // + this.btnTestSettings._mice = mRemoteNG.UI.Controls.Base.NGButton.MouseState.OUT; + this.btnTestSettings.AutoSize = true; + this.btnTestSettings.Dock = System.Windows.Forms.DockStyle.Right; + this.btnTestSettings.Location = new System.Drawing.Point(240, 85); + this.btnTestSettings.Name = "btnTestSettings"; + this.btnTestSettings.Size = new System.Drawing.Size(81, 25); + this.btnTestSettings.TabIndex = 4; + this.btnTestSettings.Text = "Test Settings"; + this.btnTestSettings.UseVisualStyleBackColor = true; + this.btnTestSettings.Click += new System.EventHandler(this.BtnTestSettings_Click); + // + // labelKdfIterations + // + this.labelKdfIterations.AutoSize = true; + this.labelKdfIterations.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelKdfIterations.Location = new System.Drawing.Point(3, 54); + this.labelKdfIterations.Name = "labelKdfIterations"; + this.labelKdfIterations.Size = new System.Drawing.Size(181, 28); + this.labelKdfIterations.TabIndex = 4; + this.labelKdfIterations.Text = "Key Derivation Function Iterations"; + this.labelKdfIterations.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // // numberBoxKdfIterations // this.numberBoxKdfIterations.Dock = System.Windows.Forms.DockStyle.Fill; @@ -117,7 +166,7 @@ 0, 0, 0}); - this.numberBoxKdfIterations.Location = new System.Drawing.Point(223, 55); + this.numberBoxKdfIterations.Location = new System.Drawing.Point(190, 57); this.numberBoxKdfIterations.Maximum = new decimal(new int[] { 50000, 0, @@ -130,7 +179,7 @@ 0}); this.numberBoxKdfIterations.Name = "numberBoxKdfIterations"; this.numberBoxKdfIterations.Size = new System.Drawing.Size(131, 22); - this.numberBoxKdfIterations.TabIndex = 5; + this.numberBoxKdfIterations.TabIndex = 3; this.numberBoxKdfIterations.ThousandsSeparator = true; this.numberBoxKdfIterations.Value = new decimal(new int[] { 1000, @@ -138,38 +187,6 @@ 0, 0}); // - // labelKdfIterations - // - this.labelKdfIterations.AutoSize = true; - this.labelKdfIterations.Dock = System.Windows.Forms.DockStyle.Fill; - this.labelKdfIterations.Location = new System.Drawing.Point(3, 52); - this.labelKdfIterations.Name = "labelKdfIterations"; - this.labelKdfIterations.Size = new System.Drawing.Size(214, 26); - this.labelKdfIterations.TabIndex = 4; - this.labelKdfIterations.Text = "Key Derivation Function Iterations"; - this.labelKdfIterations.TextAlign = System.Drawing.ContentAlignment.MiddleRight; - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.ColumnCount = 2; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 220F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.labelKdfIterations, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.numberBoxKdfIterations, 1, 2); - this.tableLayoutPanel1.Controls.Add(this.labelBlockCipher, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.comboBoxEncryptionEngine, 1, 0); - this.tableLayoutPanel1.Controls.Add(this.labelEncryptionEngine, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.comboBoxBlockCipher, 1, 1); - this.tableLayoutPanel1.Location = new System.Drawing.Point(6, 21); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 4; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 26F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 26F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 26F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(357, 81); - this.tableLayoutPanel1.TabIndex = 2; - // // SecurityPage // this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); @@ -179,9 +196,10 @@ this.Name = "SecurityPage"; this.Size = new System.Drawing.Size(610, 490); this.groupAdvancedSecurityOptions.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.numberBoxKdfIterations)).EndInit(); + this.groupAdvancedSecurityOptions.PerformLayout(); this.tableLayoutPanel1.ResumeLayout(false); this.tableLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numberBoxKdfIterations)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -198,5 +216,6 @@ private Controls.Base.NGNumericUpDown numberBoxKdfIterations; private Controls.Base.NGLabel labelKdfIterations; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private Controls.Base.NGButton btnTestSettings; } } diff --git a/mRemoteV1/UI/Forms/OptionsPages/SecurityPage.cs b/mRemoteV1/UI/Forms/OptionsPages/SecurityPage.cs index 2aca2c0c..cf240151 100644 --- a/mRemoteV1/UI/Forms/OptionsPages/SecurityPage.cs +++ b/mRemoteV1/UI/Forms/OptionsPages/SecurityPage.cs @@ -1,6 +1,12 @@ using System; using System.ComponentModel; +using System.Diagnostics; +using System.Linq; +using System.Windows.Forms; +using mRemoteNG.App; +using mRemoteNG.Config.Serializers.Xml; using mRemoteNG.Security; +using mRemoteNG.Security.Factories; namespace mRemoteNG.UI.Forms.OptionsPages { @@ -30,6 +36,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages labelEncryptionEngine.Text = Language.strEncryptionEngine; labelKdfIterations.Text = Language.strEncryptionKeyDerivationIterations; groupAdvancedSecurityOptions.Text = Language.strAdvancedSecurityOptions; + btnTestSettings.Text = Language.TestSettings; } public override void LoadSettings() @@ -62,5 +69,33 @@ namespace mRemoteNG.UI.Forms.OptionsPages { comboBoxBlockCipher.DataSource = Enum.GetValues(typeof(BlockCipherModes)); } + + private void BtnTestSettings_Click(object sender, EventArgs e) + { + var connectionTree = Runtime.ConnectionsService.ConnectionTreeModel; + if (!connectionTree.RootNodes.Any()) + return; + + var engine = (BlockCipherEngines) comboBoxEncryptionEngine.SelectedItem; + var mode = (BlockCipherModes) comboBoxBlockCipher.SelectedItem; + var cryptographyProvider = new CryptoProviderFactory(engine, mode).Build(); + cryptographyProvider.KeyDerivationIterations = (int) numberBoxKdfIterations.Value; + + var serializerFactory = new XmlConnectionSerializerFactory(); + var serializer = serializerFactory.Build(cryptographyProvider, connectionTree, useFullEncryption: chkEncryptCompleteFile.Checked); + var nodeCount = connectionTree.GetRecursiveChildList().Count; + + var timer = Stopwatch.StartNew(); + var rootNode = connectionTree.RootNodes.First(); + serializer.Serialize(rootNode); + timer.Stop(); + + MessageBox.Show(this, + string.Format(Language.EncryptionTestResultMessage, + nodeCount, engine, mode, numberBoxKdfIterations.Value, timer.Elapsed.TotalSeconds), + Language.EncryptionTest, + MessageBoxButtons.OK, + MessageBoxIcon.Information); + } } } \ No newline at end of file diff --git a/mRemoteV1/UI/Window/ConnectionTreeWindow.Designer.cs b/mRemoteV1/UI/Window/ConnectionTreeWindow.Designer.cs index ff244842..1f819738 100644 --- a/mRemoteV1/UI/Window/ConnectionTreeWindow.Designer.cs +++ b/mRemoteV1/UI/Window/ConnectionTreeWindow.Designer.cs @@ -49,7 +49,6 @@ this.olvConnections.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; this.olvConnections.HideSelection = false; this.olvConnections.IsSimpleDragSource = true; - this.olvConnections.IsSimpleDropSink = true; this.olvConnections.LabelEdit = true; this.olvConnections.Location = new System.Drawing.Point(0, 24); this.olvConnections.MultiSelect = false; diff --git a/mRemoteV1/app.config b/mRemoteV1/app.config index bed2738a..80fca089 100644 --- a/mRemoteV1/app.config +++ b/mRemoteV1/app.config @@ -607,7 +607,7 @@ GCM - 1000 + 10000 Dynamic diff --git a/mRemoteV1/mRemoteV1.csproj b/mRemoteV1/mRemoteV1.csproj index e5b4be9a..e2537c59 100644 --- a/mRemoteV1/mRemoteV1.csproj +++ b/mRemoteV1/mRemoteV1.csproj @@ -172,6 +172,7 @@ + @@ -251,12 +252,20 @@ + + + Component + + + + + @@ -1167,6 +1176,8 @@ + +