using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; using mRemoteNG.Credential; using mRemoteNG.Credential.Repositories; namespace mRemoteNG.Config.Serializers.CredentialProviderSerializer { public class CredentialRepositoryListDeserializer { private readonly ISecureSerializer, string> _serializer; private readonly ISecureDeserializer> _deserializer; public CredentialRepositoryListDeserializer(ISecureSerializer, string> serializer, ISecureDeserializer> deserializer) { if (serializer == null) throw new ArgumentNullException(nameof(serializer)); if (deserializer == null) throw new ArgumentNullException(nameof(deserializer)); _serializer = serializer; _deserializer = deserializer; } public IEnumerable Deserialize(string xml) { if (string.IsNullOrEmpty(xml)) return new ICredentialRepository[0]; var xdoc = XDocument.Parse(xml); var repoEntries = xdoc.Descendants("CredentialRepository"); var xmlRepoFactory = new XmlCredentialRepositoryFactory(_serializer, _deserializer); return repoEntries.Select(xmlRepoFactory.Build); } } }