From 30df947365f9c4e418f1902fb2094c595e357f12 Mon Sep 17 00:00:00 2001 From: David Sparer Date: Thu, 2 Mar 2017 08:55:10 -0700 Subject: [PATCH 1/6] resolved issue when clicking in connection tree white space #422 --- mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.cs b/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.cs index ea0769394..4cf2e2d8b 100644 --- a/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.cs +++ b/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.cs @@ -264,7 +264,7 @@ namespace mRemoteNG.UI.Controls if (mouseEventArgs.Clicks > 1) return; OLVColumn column; var listItem = GetItemAt(mouseEventArgs.X, mouseEventArgs.Y, out column); - var clickedNode = listItem.RowObject as ConnectionInfo; + var clickedNode = listItem?.RowObject as ConnectionInfo; if (clickedNode == null) return; SingleClickHandler.Execute(clickedNode); } From 35b4564644b4698b237ff0c7b767714aff87d378 Mon Sep 17 00:00:00 2001 From: David Sparer Date: Thu, 2 Mar 2017 13:02:51 -0700 Subject: [PATCH 2/6] turned off a feature of ObjectListView that was stealing focus from keepass autotype events. resolves #312 --- mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.cs b/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.cs index 4cf2e2d8b..cb640ba05 100644 --- a/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.cs +++ b/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.cs @@ -48,6 +48,7 @@ namespace mRemoteNG.UI.Controls { InitializeComponent(); SetupConnectionTreeView(); + UseOverlays = false; } #region ConnectionTree Setup From 7b118995ea72e803022c750cd16d992601c5fd96 Mon Sep 17 00:00:00 2001 From: David Sparer Date: Thu, 2 Mar 2017 13:26:40 -0700 Subject: [PATCH 3/6] updated changelog --- CHANGELOG.TXT | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.TXT b/CHANGELOG.TXT index 8fa19fbea..dfcd1154f 100644 --- a/CHANGELOG.TXT +++ b/CHANGELOG.TXT @@ -1,3 +1,12 @@ +1.75 hotfix 1 (2017-03-XX): + +Fixes: +------ +#422: Uncaught exception when clicking in connection tree whitespace +#312: Resolved KeePass auto-type issue + + + 1.75 (2017-03-01): Known Issue: From 6a67e0ea8b9bf1c72be1c0e595681969ae32f3a7 Mon Sep 17 00:00:00 2001 From: David Sparer Date: Thu, 2 Mar 2017 16:42:00 -0700 Subject: [PATCH 4/6] resolved issue with export filter not being respected. resolves #427 --- .../XmlConnectionNodeSerializerTests.cs | 11 ++++----- .../XmlConnectionsDocumentCompilerTests.cs | 3 ++- .../XmlConnectionsDocumentEncryptorTests.cs | 3 ++- .../XmlConnectionsSerializerTests.cs | 23 +++++++++++++++++++ .../XmlConnectionNodeSerializer.cs | 16 +++++++------ .../XmlConnectionsDocumentCompiler.cs | 14 ++++++++--- .../Serializers/XmlConnectionsSerializer.cs | 2 +- 7 files changed, 53 insertions(+), 19 deletions(-) diff --git a/mRemoteNGTests/Config/Serializers/XmlConnectionNodeSerializerTests.cs b/mRemoteNGTests/Config/Serializers/XmlConnectionNodeSerializerTests.cs index 9136450e7..dc63d79e5 100644 --- a/mRemoteNGTests/Config/Serializers/XmlConnectionNodeSerializerTests.cs +++ b/mRemoteNGTests/Config/Serializers/XmlConnectionNodeSerializerTests.cs @@ -12,13 +12,14 @@ namespace mRemoteNGTests.Config.Serializers public class XmlConnectionNodeSerializerTests { private XmlConnectionNodeSerializer _connectionNodeSerializer; + private ICryptographyProvider _cryptographyProvider; [SetUp] public void Setup() { - var cryptoProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider( + _cryptographyProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider( BlockCipherEngines.AES, BlockCipherModes.GCM); - _connectionNodeSerializer = new XmlConnectionNodeSerializer(cryptoProvider, "myPassword1".ConvertToSecureString()); + _connectionNodeSerializer = new XmlConnectionNodeSerializer(_cryptographyProvider, "myPassword1".ConvertToSecureString(), new SaveFilter()); } [Test] @@ -48,8 +49,7 @@ namespace mRemoteNGTests.Config.Serializers public void AttributesNotSerializedWhenFiltered(string attributeName, ConnectionInfo connectionInfo) { var saveFilter = new SaveFilter(true); - var cryptoProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider(BlockCipherEngines.AES, BlockCipherModes.GCM); - _connectionNodeSerializer = new XmlConnectionNodeSerializer(cryptoProvider, "myPassword1".ConvertToSecureString(), saveFilter); + _connectionNodeSerializer = new XmlConnectionNodeSerializer(_cryptographyProvider, "myPassword1".ConvertToSecureString(), saveFilter); var returnVal = _connectionNodeSerializer.SerializeConnectionInfo(connectionInfo); var targetAttribute = returnVal.Attribute(XName.Get(attributeName)); Assert.That(targetAttribute?.Value, Is.EqualTo(string.Empty)); @@ -59,8 +59,7 @@ namespace mRemoteNGTests.Config.Serializers public void InheritanceNotSerialiedWhenFiltered(string attributeName, ConnectionInfo connectionInfo) { var saveFilter = new SaveFilter(true); - var cryptoProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider(BlockCipherEngines.AES, BlockCipherModes.GCM); - _connectionNodeSerializer = new XmlConnectionNodeSerializer(cryptoProvider, "myPassword1".ConvertToSecureString(), saveFilter); + _connectionNodeSerializer = new XmlConnectionNodeSerializer(_cryptographyProvider, "myPassword1".ConvertToSecureString(), saveFilter); var returnVal = _connectionNodeSerializer.SerializeConnectionInfo(connectionInfo); var targetAttribute = returnVal.Attribute(XName.Get(attributeName)); Assert.That(targetAttribute?.Value, Is.EqualTo(false.ToString())); diff --git a/mRemoteNGTests/Config/Serializers/XmlConnectionsDocumentCompilerTests.cs b/mRemoteNGTests/Config/Serializers/XmlConnectionsDocumentCompilerTests.cs index e7ba07be3..69292cc27 100644 --- a/mRemoteNGTests/Config/Serializers/XmlConnectionsDocumentCompilerTests.cs +++ b/mRemoteNGTests/Config/Serializers/XmlConnectionsDocumentCompilerTests.cs @@ -28,7 +28,8 @@ namespace mRemoteNGTests.Config.Serializers public void Setup() { _cryptographyProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider(BlockCipherEngines.AES, BlockCipherModes.GCM); - _documentCompiler = new XmlConnectionsDocumentCompiler(_cryptographyProvider); + var saveFilter = new SaveFilter(); + _documentCompiler = new XmlConnectionsDocumentCompiler(_cryptographyProvider, saveFilter); _connectionTreeModel = SetupConnectionTreeModel(); } diff --git a/mRemoteNGTests/Config/Serializers/XmlConnectionsDocumentEncryptorTests.cs b/mRemoteNGTests/Config/Serializers/XmlConnectionsDocumentEncryptorTests.cs index ec17d85de..2fbe93311 100644 --- a/mRemoteNGTests/Config/Serializers/XmlConnectionsDocumentEncryptorTests.cs +++ b/mRemoteNGTests/Config/Serializers/XmlConnectionsDocumentEncryptorTests.cs @@ -20,7 +20,8 @@ namespace mRemoteNGTests.Config.Serializers { var connectionTreeModel = SetupConnectionTreeModel(); var cryptoProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider(BlockCipherEngines.AES, BlockCipherModes.GCM); - _originalDocument = new XmlConnectionsDocumentCompiler(cryptoProvider).CompileDocument(connectionTreeModel, false, false); + var saveFilter = new SaveFilter(); + _originalDocument = new XmlConnectionsDocumentCompiler(cryptoProvider, saveFilter).CompileDocument(connectionTreeModel, false, false); _documentEncryptor = new XmlConnectionsDocumentEncryptor(cryptoProvider); } diff --git a/mRemoteNGTests/Config/Serializers/XmlConnectionsSerializerTests.cs b/mRemoteNGTests/Config/Serializers/XmlConnectionsSerializerTests.cs index 078a1b9b0..8604ef473 100644 --- a/mRemoteNGTests/Config/Serializers/XmlConnectionsSerializerTests.cs +++ b/mRemoteNGTests/Config/Serializers/XmlConnectionsSerializerTests.cs @@ -1,7 +1,9 @@ using System.Xml; +using System.Xml.Linq; using mRemoteNG.Config.Serializers; using mRemoteNG.Connection; using mRemoteNG.Container; +using mRemoteNG.Security; using mRemoteNG.Security.SymmetricEncryption; using mRemoteNG.Tree; using mRemoteNG.Tree.Root; @@ -45,6 +47,27 @@ namespace mRemoteNGTests.Config.Serializers Assert.That(connectionNode, Is.Not.Null); } + [TestCase("Username", "")] + [TestCase("Domain", "")] + [TestCase("Password", "")] + [TestCase("InheritAutomaticResize", "False")] + public void SerializerRespectsSaveFilterSettings(string attributeName, string expectedValue) + { + _serializer.SaveFilter = new SaveFilter(true); + var connectionInfo = new ConnectionInfo + { + Name = "myConnection", + Username = "somefilteredstuff", + Domain = "somefilteredstuff", + Password = "somefilteredstuff", + Inheritance = {AutomaticResize = true} + }; + var serializedConnections = _serializer.Serialize(connectionInfo); + var xdoc = XDocument.Parse(serializedConnections); + var attributeValue = xdoc.Root?.Element("Node")?.Attribute(attributeName)?.Value; + Assert.That(attributeValue, Is.EqualTo(expectedValue)); + } + private ConnectionTreeModel SetupConnectionTreeModel() { /* diff --git a/mRemoteV1/Config/Serializers/XmlConnectionNodeSerializer.cs b/mRemoteV1/Config/Serializers/XmlConnectionNodeSerializer.cs index 0ec493f24..01b6345bb 100644 --- a/mRemoteV1/Config/Serializers/XmlConnectionNodeSerializer.cs +++ b/mRemoteV1/Config/Serializers/XmlConnectionNodeSerializer.cs @@ -1,4 +1,5 @@ -using System.Security; +using System; +using System.Security; using System.Xml.Linq; using mRemoteNG.Connection; using mRemoteNG.Container; @@ -13,14 +14,15 @@ namespace mRemoteNG.Config.Serializers private readonly SecureString _encryptionKey; private readonly SaveFilter _saveFilter = new SaveFilter(); - public XmlConnectionNodeSerializer(ICryptographyProvider cryptographyProvider, SecureString encryptionKey) - { - _cryptographyProvider = cryptographyProvider; - _encryptionKey = encryptionKey; - } - public XmlConnectionNodeSerializer(ICryptographyProvider cryptographyProvider, SecureString encryptionKey, SaveFilter saveFilter) { + if (cryptographyProvider == null) + throw new ArgumentNullException(nameof(cryptographyProvider)); + if (encryptionKey == null) + throw new ArgumentNullException(nameof(encryptionKey)); + if (saveFilter == null) + throw new ArgumentNullException(nameof(saveFilter)); + _cryptographyProvider = cryptographyProvider; _encryptionKey = encryptionKey; _saveFilter = saveFilter; diff --git a/mRemoteV1/Config/Serializers/XmlConnectionsDocumentCompiler.cs b/mRemoteV1/Config/Serializers/XmlConnectionsDocumentCompiler.cs index 15e14e198..224348e01 100644 --- a/mRemoteV1/Config/Serializers/XmlConnectionsDocumentCompiler.cs +++ b/mRemoteV1/Config/Serializers/XmlConnectionsDocumentCompiler.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System; +using System.Linq; using System.Security; using System.Xml.Linq; using mRemoteNG.Connection; @@ -14,10 +15,17 @@ namespace mRemoteNG.Config.Serializers { private readonly ICryptographyProvider _cryptographyProvider; private SecureString _encryptionKey; + private readonly SaveFilter _saveFilter; - public XmlConnectionsDocumentCompiler(ICryptographyProvider cryptographyProvider) + public XmlConnectionsDocumentCompiler(ICryptographyProvider cryptographyProvider, SaveFilter saveFilter) { + if (cryptographyProvider == null) + throw new ArgumentNullException(nameof(cryptographyProvider)); + if (saveFilter == null) + throw new ArgumentNullException(nameof(saveFilter)); + _cryptographyProvider = cryptographyProvider; + _saveFilter = saveFilter; } public XDocument CompileDocument(ConnectionTreeModel connectionTreeModel, bool fullFileEncryption, bool export) @@ -77,7 +85,7 @@ namespace mRemoteNG.Config.Serializers private XElement CompileConnectionInfoNode(ConnectionInfo connectionInfo) { - var connectionSerializer = new XmlConnectionNodeSerializer(_cryptographyProvider, _encryptionKey); + var connectionSerializer = new XmlConnectionNodeSerializer(_cryptographyProvider, _encryptionKey, _saveFilter); return connectionSerializer.SerializeConnectionInfo(connectionInfo); } } diff --git a/mRemoteV1/Config/Serializers/XmlConnectionsSerializer.cs b/mRemoteV1/Config/Serializers/XmlConnectionsSerializer.cs index 72a6682fc..183d82c14 100644 --- a/mRemoteV1/Config/Serializers/XmlConnectionsSerializer.cs +++ b/mRemoteV1/Config/Serializers/XmlConnectionsSerializer.cs @@ -41,7 +41,7 @@ namespace mRemoteNG.Config.Serializers var xml = ""; try { - var documentCompiler = new XmlConnectionsDocumentCompiler(_cryptographyProvider); + var documentCompiler = new XmlConnectionsDocumentCompiler(_cryptographyProvider, SaveFilter); var xmlDocument = documentCompiler.CompileDocument(serializationTarget, UseFullEncryption, Export); xml = WriteXmlToString(xmlDocument); } From 9b22254b6cce9e8b196de66acfc17c3c7bd4c244 Mon Sep 17 00:00:00 2001 From: David Sparer Date: Mon, 6 Mar 2017 10:24:41 -0700 Subject: [PATCH 5/6] update changelog --- CHANGELOG.TXT | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.TXT b/CHANGELOG.TXT index dfcd1154f..85249743e 100644 --- a/CHANGELOG.TXT +++ b/CHANGELOG.TXT @@ -1,10 +1,10 @@ -1.75 hotfix 1 (2017-03-XX): +1.75 hotfix 1 (2017-03-06): Fixes: ------ #422: Uncaught exception when clicking in connection tree whitespace #312: Resolved KeePass auto-type issue - +#427: Export does not respect filtering user/password/domain 1.75 (2017-03-01): From 5347e5a3aaad9e123df85795f644bf32ca03890f Mon Sep 17 00:00:00 2001 From: David Sparer Date: Mon, 6 Mar 2017 10:27:25 -0700 Subject: [PATCH 6/6] implemented new versioning scheme. resolves #437 --- CHANGELOG.TXT | 4 ++++ mRemoteV1/Properties/AssemblyInfo.cs | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.TXT b/CHANGELOG.TXT index 85249743e..558cb9463 100644 --- a/CHANGELOG.TXT +++ b/CHANGELOG.TXT @@ -1,5 +1,9 @@ 1.75 hotfix 1 (2017-03-06): +General Changes: +---------------- +#437: Modify version numbering scheme + Fixes: ------ #422: Uncaught exception when clicking in connection tree whitespace diff --git a/mRemoteV1/Properties/AssemblyInfo.cs b/mRemoteV1/Properties/AssemblyInfo.cs index 16ac88715..78163846f 100644 --- a/mRemoteV1/Properties/AssemblyInfo.cs +++ b/mRemoteV1/Properties/AssemblyInfo.cs @@ -33,7 +33,7 @@ using System.Runtime.InteropServices; // by using the '*' as shown below: // -[assembly: AssemblyVersion("1.75.*")] +[assembly: AssemblyVersion("1.75.7000.*")] [assembly:NeutralResourcesLanguageAttribute("en")]