From 2a113efe5c74bdbfca8e3fbe29b1a26d124ff9bc Mon Sep 17 00:00:00 2001 From: David Sparer Date: Sat, 11 Feb 2017 12:35:02 -0700 Subject: [PATCH] we can now load the cred repo list --- mRemoteV1/Config/CredentialRepositoryListLoader.cs | 1 + .../CredentialRepositoryListDeserializer.cs | 4 ++-- mRemoteV1/Credential/CredentialRepositoryConfig.cs | 12 ++++++++---- .../Repositories/CredentialRepositoryFactory.cs | 10 ++++++++-- .../KeePassRepositorySelector.cs | 2 +- .../XmlCredentialRepositorySelector.cs | 2 +- mRemoteV1/UI/Forms/frmMain.cs | 3 ++- 7 files changed, 23 insertions(+), 11 deletions(-) diff --git a/mRemoteV1/Config/CredentialRepositoryListLoader.cs b/mRemoteV1/Config/CredentialRepositoryListLoader.cs index bd08811cc..13cce784c 100644 --- a/mRemoteV1/Config/CredentialRepositoryListLoader.cs +++ b/mRemoteV1/Config/CredentialRepositoryListLoader.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using mRemoteNG.Config.DataProviders; +using mRemoteNG.Config.Serializers.CredentialProviderSerializer; using mRemoteNG.Credential; namespace mRemoteNG.Config diff --git a/mRemoteV1/Config/Serializers/CredentialProviderSerializer/CredentialRepositoryListDeserializer.cs b/mRemoteV1/Config/Serializers/CredentialProviderSerializer/CredentialRepositoryListDeserializer.cs index 46c9ca0b7..63878e6f3 100644 --- a/mRemoteV1/Config/Serializers/CredentialProviderSerializer/CredentialRepositoryListDeserializer.cs +++ b/mRemoteV1/Config/Serializers/CredentialProviderSerializer/CredentialRepositoryListDeserializer.cs @@ -4,14 +4,14 @@ using System.Xml.Linq; using mRemoteNG.Credential; using mRemoteNG.Credential.Repositories; -namespace mRemoteNG.Config +namespace mRemoteNG.Config.Serializers.CredentialProviderSerializer { public class CredentialRepositoryListDeserializer { public IEnumerable Deserialize(string xml) { var xdoc = XDocument.Parse(xml); - var repoEntries = xdoc.Descendants("Repository"); + var repoEntries = xdoc.Descendants("CredentialRepository"); return repoEntries.Select(CredentialRepositoryFactory.Build); } } diff --git a/mRemoteV1/Credential/CredentialRepositoryConfig.cs b/mRemoteV1/Credential/CredentialRepositoryConfig.cs index a7d2c69e3..6d380c8e8 100644 --- a/mRemoteV1/Credential/CredentialRepositoryConfig.cs +++ b/mRemoteV1/Credential/CredentialRepositoryConfig.cs @@ -6,14 +6,18 @@ namespace mRemoteNG.Credential { public class CredentialRepositoryConfig : ICredentialRepositoryConfig { - public Guid Id { get; } = Guid.NewGuid(); - public string TypeName { get; } + public Guid Id { get; } + public string TypeName { get; set; } = ""; public string Source { get; set; } = ""; public SecureString Key { get; set; } = new SecureString(); - public CredentialRepositoryConfig(string typeName) + public CredentialRepositoryConfig() : this(Guid.NewGuid()) { - TypeName = typeName; + } + + public CredentialRepositoryConfig(Guid id) + { + Id = id; } } } \ No newline at end of file diff --git a/mRemoteV1/Credential/Repositories/CredentialRepositoryFactory.cs b/mRemoteV1/Credential/Repositories/CredentialRepositoryFactory.cs index f95433bd2..2273204e6 100644 --- a/mRemoteV1/Credential/Repositories/CredentialRepositoryFactory.cs +++ b/mRemoteV1/Credential/Repositories/CredentialRepositoryFactory.cs @@ -9,15 +9,21 @@ namespace mRemoteNG.Credential.Repositories { public static ICredentialRepository Build(XElement repositoryXElement) { - if (repositoryXElement.Name.LocalName == "") + var typeName = repositoryXElement.Attribute("TypeName")?.Value; + if (typeName == "Xml") return BuildXmlRepository(repositoryXElement); throw new Exception("Could not build repository for the specified type"); } private static ICredentialRepository BuildXmlRepository(XElement repositoryXElement) { - var config = new CredentialRepositoryConfig(repositoryXElement.Name.LocalName) + var stringId = repositoryXElement.Attribute("Id")?.Value; + Guid id; + Guid.TryParse(stringId, out id); + if (id.Equals(Guid.Empty)) id = Guid.NewGuid(); + var config = new CredentialRepositoryConfig(id) { + TypeName = repositoryXElement.Attribute("TypeName")?.Value, Source = repositoryXElement.Attribute("Source")?.Value }; var dataProvider = new FileDataProvider(""); diff --git a/mRemoteV1/UI/Forms/CredentialManagerPages/CredentialRepositorySelectors/KeePassRepositorySelector.cs b/mRemoteV1/UI/Forms/CredentialManagerPages/CredentialRepositorySelectors/KeePassRepositorySelector.cs index 52d5b75b6..6092fece8 100644 --- a/mRemoteV1/UI/Forms/CredentialManagerPages/CredentialRepositorySelectors/KeePassRepositorySelector.cs +++ b/mRemoteV1/UI/Forms/CredentialManagerPages/CredentialRepositorySelectors/KeePassRepositorySelector.cs @@ -9,6 +9,6 @@ namespace mRemoteNG.UI.Forms.CredentialManagerPages.CredentialRepositorySelector { public string Text { get; set; } = "KeePass"; public Image Image { get; } = Resources.keepass_32x32; - public ICredentialRepositoryConfig Config { get; } = new CredentialRepositoryConfig("KeePass"); + public ICredentialRepositoryConfig Config { get; } = new CredentialRepositoryConfig {TypeName = "KeePass"}; } } \ No newline at end of file diff --git a/mRemoteV1/UI/Forms/CredentialManagerPages/CredentialRepositorySelectors/XmlCredentialRepositorySelector.cs b/mRemoteV1/UI/Forms/CredentialManagerPages/CredentialRepositorySelectors/XmlCredentialRepositorySelector.cs index 9081e1847..533ea6e55 100644 --- a/mRemoteV1/UI/Forms/CredentialManagerPages/CredentialRepositorySelectors/XmlCredentialRepositorySelector.cs +++ b/mRemoteV1/UI/Forms/CredentialManagerPages/CredentialRepositorySelectors/XmlCredentialRepositorySelector.cs @@ -9,6 +9,6 @@ namespace mRemoteNG.UI.Forms.CredentialManagerPages.CredentialRepositorySelector { public string Text { get; set; } = "XML"; public Image Image { get; } = Resources.xml; - public ICredentialRepositoryConfig Config { get; } = new CredentialRepositoryConfig("XML"); + public ICredentialRepositoryConfig Config { get; } = new CredentialRepositoryConfig {TypeName = "Xml"}; } } \ No newline at end of file diff --git a/mRemoteV1/UI/Forms/frmMain.cs b/mRemoteV1/UI/Forms/frmMain.cs index 77e213ad6..0828703b3 100644 --- a/mRemoteV1/UI/Forms/frmMain.cs +++ b/mRemoteV1/UI/Forms/frmMain.cs @@ -13,6 +13,7 @@ using mRemoteNG.App.Initialization; using mRemoteNG.Config; using mRemoteNG.Config.DataProviders; using mRemoteNG.Config.Putty; +using mRemoteNG.Config.Serializers.CredentialProviderSerializer; using mRemoteNG.Config.Settings; using mRemoteNG.Connection; using mRemoteNG.Credential; @@ -137,7 +138,7 @@ namespace mRemoteNG.UI.Forms Startup.Instance.InitializeProgram(messageCollector); - var repoFilePath = ""; + var repoFilePath = @"C:\Users\David\Documents\Repositories\mRemoteNG\mRemoteV1\bin\Debug Portable\credentialRepositories.xml"; var credRepoListLoader = new CredentialRepositoryListLoader(new FileDataProvider(repoFilePath), new CredentialRepositoryListDeserializer()); foreach (var repository in credRepoListLoader.Load()) Runtime.CredentialProviderCatalog.AddProvider(repository);