public void Save(ConnectionTreeModel connectionTreeModel, string propertyNameTrigger = "") { try { var cryptographyProvider = new CryptoProviderFactoryFromSettings().Build(); var connectionNodeSerializer = new XmlConnectionNodeSerializer27( cryptographyProvider, connectionTreeModel .RootNodes.OfType <RootNodeInfo>() .First().PasswordString .ConvertToSecureString(), _saveFilter); var xmlConnectionsSerializer = new XmlConnectionsSerializer(cryptographyProvider, connectionNodeSerializer) { UseFullEncryption = mRemoteNG.Settings.Default.EncryptCompleteConnectionsFile }; var xml = xmlConnectionsSerializer.Serialize(connectionTreeModel); var fileDataProvider = new FileDataProviderWithRollingBackup(_connectionFileName); fileDataProvider.Save(xml); } catch (Exception ex) { Runtime.MessageCollector?.AddExceptionStackTrace("SaveToXml failed", ex); } }
private static void SaveExportFile(string fileName, SaveFormat saveFormat, SaveFilter saveFilter, ConnectionInfo exportTarget) { try { ISerializer <ConnectionInfo, string> serializer; switch (saveFormat) { case SaveFormat.mRXML: var cryptographyProvider = new CryptoProviderFactoryFromSettings().Build(); var rootNode = exportTarget.GetRootParent() as RootNodeInfo; var connectionNodeSerializer = new XmlConnectionNodeSerializer27( cryptographyProvider, rootNode?.PasswordString .ConvertToSecureString() ?? new RootNodeInfo(RootNodeType .Connection) .PasswordString .ConvertToSecureString(), saveFilter); serializer = new XmlConnectionsSerializer(cryptographyProvider, connectionNodeSerializer); break; case SaveFormat.mRCSV: serializer = new CsvConnectionsSerializerMremotengFormat(saveFilter, Runtime.CredentialProviderCatalog); break; default: throw new ArgumentOutOfRangeException(nameof(saveFormat), saveFormat, null); } var serializedData = serializer.Serialize(exportTarget); var fileDataProvider = new FileDataProvider(fileName); fileDataProvider.Save(serializedData); } catch (Exception ex) { Runtime.MessageCollector.AddExceptionStackTrace($"Export.SaveExportFile(\"{fileName}\") failed.", ex); } finally { Runtime.ConnectionsService.RemoteConnectionsSyncronizer?.Enable(); } }
// When we get a true CompositionRoot we can move this to that class. We should only require 1 instance of this service at a time public CredentialServiceFacade Build() { var cryptoFromSettings = new CryptoProviderFactoryFromSettings(); var credRepoSerializer = new XmlCredentialPasswordEncryptorDecorator( cryptoFromSettings.Build(), new XmlCredentialRecordSerializer()); var credRepoDeserializer = new XmlCredentialPasswordDecryptorDecorator(new XmlCredentialRecordDeserializer()); var credentialRepoListPath = Path.Combine(SettingsFileInfo.SettingsPath, "credentialRepositories.xml"); var repoListDataProvider = new FileDataProvider(credentialRepoListPath); var repoListLoader = new CredentialRepositoryListLoader( repoListDataProvider, new CredentialRepositoryListDeserializer(credRepoSerializer, credRepoDeserializer)); var repoListSaver = new CredentialRepositoryListSaver(repoListDataProvider); return(new CredentialServiceFacade(Runtime.CredentialProviderCatalog, repoListLoader, repoListSaver)); }