diff --git a/mRemoteV1/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsSerializerMremotengFormat.cs b/mRemoteV1/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsSerializerMremotengFormat.cs index 10ae8f12f..3563667ab 100644 --- a/mRemoteV1/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsSerializerMremotengFormat.cs +++ b/mRemoteV1/Config/Serializers/ConnectionSerializers/Csv/CsvConnectionsSerializerMremotengFormat.cs @@ -16,7 +16,6 @@ namespace mRemoteNG.Config.Serializers.Csv private readonly SaveFilter _saveFilter; private readonly ICredentialRepositoryList _credentialRepositoryList; - public CsvConnectionsSerializerMremotengFormat(SaveFilter saveFilter, ICredentialRepositoryList credentialRepositoryList) { saveFilter.ThrowIfNull(nameof(saveFilter)); @@ -79,142 +78,134 @@ namespace mRemoteNG.Config.Serializers.Csv private void SerializeConnectionInfo(ConnectionInfo con, StringBuilder sb) { sb.AppendLine(); - sb.Append(string.Join(";", - CleanStringForCsv(con.Name), - CleanStringForCsv(con.ConstantID), - CleanStringForCsv(con.Parent?.ConstantID ?? ""), - CleanStringForCsv(con.GetTreeNodeType()), - CleanStringForCsv(con.Description), - CleanStringForCsv(con.Icon), - CleanStringForCsv(con.Panel))) - .Append(";"); + sb.Append(FormatForCsv(con.Name)) + .Append(FormatForCsv(con.ConstantID)) + .Append(FormatForCsv(con.Parent?.ConstantID ?? "")) + .Append(FormatForCsv(con.GetTreeNodeType())) + .Append(FormatForCsv(con.Description)) + .Append(FormatForCsv(con.Icon)) + .Append(FormatForCsv(con.Panel)); if (_saveFilter.SaveUsername) - sb.Append($"{CleanStringForCsv(con.Username)};"); + sb.Append(FormatForCsv(con.Username)); if (_saveFilter.SavePassword) - sb.Append($"{CleanStringForCsv(con.Password)};"); + sb.Append(FormatForCsv(con.Password)); if (_saveFilter.SaveDomain) - sb.Append($"{CleanStringForCsv(con.Domain)};"); + sb.Append(FormatForCsv(con.Domain)); - sb.Append(string.Join(";", - CleanStringForCsv(con.Hostname), - CleanStringForCsv(con.Protocol), - CleanStringForCsv(con.PuttySession), - CleanStringForCsv(con.Port), - CleanStringForCsv(con.UseConsoleSession), - CleanStringForCsv(con.UseCredSsp), - CleanStringForCsv(con.RenderingEngine), - CleanStringForCsv(con.ICAEncryptionStrength), - CleanStringForCsv(con.RDPAuthenticationLevel), - CleanStringForCsv(con.LoadBalanceInfo), - CleanStringForCsv(con.Colors), - CleanStringForCsv(con.Resolution), - CleanStringForCsv(con.AutomaticResize), - CleanStringForCsv(con.DisplayWallpaper), - CleanStringForCsv(con.DisplayThemes), - CleanStringForCsv(con.EnableFontSmoothing), - CleanStringForCsv(con.EnableDesktopComposition), - CleanStringForCsv(con.CacheBitmaps), - CleanStringForCsv(con.RedirectDiskDrives), - CleanStringForCsv(con.RedirectPorts), - CleanStringForCsv(con.RedirectPrinters), - CleanStringForCsv(con.RedirectSmartCards), - CleanStringForCsv(con.RedirectSound), - CleanStringForCsv(con.RedirectKeys), - CleanStringForCsv(con.PreExtApp), - CleanStringForCsv(con.PostExtApp), - CleanStringForCsv(con.MacAddress), - CleanStringForCsv(con.UserField), - CleanStringForCsv(con.ExtApp), - CleanStringForCsv(con.VNCCompression), - CleanStringForCsv(con.VNCEncoding), - CleanStringForCsv(con.VNCAuthMode), - CleanStringForCsv(con.VNCProxyType), - CleanStringForCsv(con.VNCProxyIP), - CleanStringForCsv(con.VNCProxyPort), - CleanStringForCsv(con.VNCProxyUsername), - CleanStringForCsv(con.VNCProxyPassword), - CleanStringForCsv(con.VNCColors), - CleanStringForCsv(con.VNCSmartSizeMode), - CleanStringForCsv(con.VNCViewOnly), - CleanStringForCsv(con.RDGatewayUsageMethod), - CleanStringForCsv(con.RDGatewayHostname), - CleanStringForCsv(con.RDGatewayUseConnectionCredentials), - CleanStringForCsv(con.RDGatewayUsername), - CleanStringForCsv(con.RDGatewayPassword), - CleanStringForCsv(con.RDGatewayDomain))) - .Append(";"); + sb.Append(FormatForCsv(con.Hostname)) + .Append(FormatForCsv(con.Protocol)) + .Append(FormatForCsv(con.PuttySession)) + .Append(FormatForCsv(con.Port)) + .Append(FormatForCsv(con.UseConsoleSession)) + .Append(FormatForCsv(con.UseCredSsp)) + .Append(FormatForCsv(con.RenderingEngine)) + .Append(FormatForCsv(con.ICAEncryptionStrength)) + .Append(FormatForCsv(con.RDPAuthenticationLevel)) + .Append(FormatForCsv(con.LoadBalanceInfo)) + .Append(FormatForCsv(con.Colors)) + .Append(FormatForCsv(con.Resolution)) + .Append(FormatForCsv(con.AutomaticResize)) + .Append(FormatForCsv(con.DisplayWallpaper)) + .Append(FormatForCsv(con.DisplayThemes)) + .Append(FormatForCsv(con.EnableFontSmoothing)) + .Append(FormatForCsv(con.EnableDesktopComposition)) + .Append(FormatForCsv(con.CacheBitmaps)) + .Append(FormatForCsv(con.RedirectDiskDrives)) + .Append(FormatForCsv(con.RedirectPorts)) + .Append(FormatForCsv(con.RedirectPrinters)) + .Append(FormatForCsv(con.RedirectSmartCards)) + .Append(FormatForCsv(con.RedirectSound)) + .Append(FormatForCsv(con.RedirectKeys)) + .Append(FormatForCsv(con.PreExtApp)) + .Append(FormatForCsv(con.PostExtApp)) + .Append(FormatForCsv(con.MacAddress)) + .Append(FormatForCsv(con.UserField)) + .Append(FormatForCsv(con.ExtApp)) + .Append(FormatForCsv(con.VNCCompression)) + .Append(FormatForCsv(con.VNCEncoding)) + .Append(FormatForCsv(con.VNCAuthMode)) + .Append(FormatForCsv(con.VNCProxyType)) + .Append(FormatForCsv(con.VNCProxyIP)) + .Append(FormatForCsv(con.VNCProxyPort)) + .Append(FormatForCsv(con.VNCProxyUsername)) + .Append(FormatForCsv(con.VNCProxyPassword)) + .Append(FormatForCsv(con.VNCColors)) + .Append(FormatForCsv(con.VNCSmartSizeMode)) + .Append(FormatForCsv(con.VNCViewOnly)) + .Append(FormatForCsv(con.RDGatewayUsageMethod)) + .Append(FormatForCsv(con.RDGatewayHostname)) + .Append(FormatForCsv(con.RDGatewayUseConnectionCredentials)) + .Append(FormatForCsv(con.RDGatewayUsername)) + .Append(FormatForCsv(con.RDGatewayPassword)) + .Append(FormatForCsv(con.RDGatewayDomain)); if (!_saveFilter.SaveInheritance) return; - sb.Append(string.Join(";", - con.Inheritance.CacheBitmaps, - con.Inheritance.Colors, - con.Inheritance.Description, - con.Inheritance.DisplayThemes, - con.Inheritance.DisplayWallpaper, - con.Inheritance.EnableFontSmoothing, - con.Inheritance.EnableDesktopComposition, - con.Inheritance.Domain, - con.Inheritance.Icon, - con.Inheritance.Panel, - con.Inheritance.Password, - con.Inheritance.Port, - con.Inheritance.Protocol, - con.Inheritance.PuttySession, - con.Inheritance.RedirectDiskDrives, - con.Inheritance.RedirectKeys, - con.Inheritance.RedirectPorts, - con.Inheritance.RedirectPrinters, - con.Inheritance.RedirectSmartCards, - con.Inheritance.RedirectSound, - con.Inheritance.Resolution, - con.Inheritance.AutomaticResize, - con.Inheritance.UseConsoleSession, - con.Inheritance.UseCredSsp, - con.Inheritance.RenderingEngine, - con.Inheritance.Username, - con.Inheritance.ICAEncryptionStrength, - con.Inheritance.RDPAuthenticationLevel, - con.Inheritance.LoadBalanceInfo, - con.Inheritance.PreExtApp, - con.Inheritance.PostExtApp, - con.Inheritance.MacAddress, - con.Inheritance.UserField, - con.Inheritance.ExtApp, - con.Inheritance.VNCCompression, - con.Inheritance.VNCEncoding, - con.Inheritance.VNCAuthMode, - con.Inheritance.VNCProxyType, - con.Inheritance.VNCProxyIP, - con.Inheritance.VNCProxyPort, - con.Inheritance.VNCProxyUsername, - con.Inheritance.VNCProxyPassword, - con.Inheritance.VNCColors, - con.Inheritance.VNCSmartSizeMode, - con.Inheritance.VNCViewOnly, - con.Inheritance.RDGatewayUsageMethod, - con.Inheritance.RDGatewayHostname, - con.Inheritance.RDGatewayUseConnectionCredentials, - con.Inheritance.RDGatewayUsername, - con.Inheritance.RDGatewayPassword, - con.Inheritance.RDGatewayDomain, - con.Inheritance.RDPAlertIdleTimeout, - con.Inheritance.RDPMinutesToIdleTimeout, - con.Inheritance.SoundQuality)); + sb.Append(FormatForCsv(con.Inheritance.CacheBitmaps)) + .Append(FormatForCsv(con.Inheritance.Colors)) + .Append(FormatForCsv(con.Inheritance.Description)) + .Append(FormatForCsv(con.Inheritance.DisplayThemes)) + .Append(FormatForCsv(con.Inheritance.DisplayWallpaper)) + .Append(FormatForCsv(con.Inheritance.EnableFontSmoothing)) + .Append(FormatForCsv(con.Inheritance.EnableDesktopComposition)) + .Append(FormatForCsv(con.Inheritance.Domain)) + .Append(FormatForCsv(con.Inheritance.Icon)) + .Append(FormatForCsv(con.Inheritance.Panel)) + .Append(FormatForCsv(con.Inheritance.Password)) + .Append(FormatForCsv(con.Inheritance.Port)) + .Append(FormatForCsv(con.Inheritance.Protocol)) + .Append(FormatForCsv(con.Inheritance.PuttySession)) + .Append(FormatForCsv(con.Inheritance.RedirectDiskDrives)) + .Append(FormatForCsv(con.Inheritance.RedirectKeys)) + .Append(FormatForCsv(con.Inheritance.RedirectPorts)) + .Append(FormatForCsv(con.Inheritance.RedirectPrinters)) + .Append(FormatForCsv(con.Inheritance.RedirectSmartCards)) + .Append(FormatForCsv(con.Inheritance.RedirectSound)) + .Append(FormatForCsv(con.Inheritance.Resolution)) + .Append(FormatForCsv(con.Inheritance.AutomaticResize)) + .Append(FormatForCsv(con.Inheritance.UseConsoleSession)) + .Append(FormatForCsv(con.Inheritance.UseCredSsp)) + .Append(FormatForCsv(con.Inheritance.RenderingEngine)) + .Append(FormatForCsv(con.Inheritance.Username)) + .Append(FormatForCsv(con.Inheritance.ICAEncryptionStrength)) + .Append(FormatForCsv(con.Inheritance.RDPAuthenticationLevel)) + .Append(FormatForCsv(con.Inheritance.LoadBalanceInfo)) + .Append(FormatForCsv(con.Inheritance.PreExtApp)) + .Append(FormatForCsv(con.Inheritance.PostExtApp)) + .Append(FormatForCsv(con.Inheritance.MacAddress)) + .Append(FormatForCsv(con.Inheritance.UserField)) + .Append(FormatForCsv(con.Inheritance.ExtApp)) + .Append(FormatForCsv(con.Inheritance.VNCCompression)) + .Append(FormatForCsv(con.Inheritance.VNCEncoding)) + .Append(FormatForCsv(con.Inheritance.VNCAuthMode)) + .Append(FormatForCsv(con.Inheritance.VNCProxyType)) + .Append(FormatForCsv(con.Inheritance.VNCProxyIP)) + .Append(FormatForCsv(con.Inheritance.VNCProxyPort)) + .Append(FormatForCsv(con.Inheritance.VNCProxyUsername)) + .Append(FormatForCsv(con.Inheritance.VNCProxyPassword)) + .Append(FormatForCsv(con.Inheritance.VNCColors)) + .Append(FormatForCsv(con.Inheritance.VNCSmartSizeMode)) + .Append(FormatForCsv(con.Inheritance.VNCViewOnly)) + .Append(FormatForCsv(con.Inheritance.RDGatewayUsageMethod)) + .Append(FormatForCsv(con.Inheritance.RDGatewayHostname)) + .Append(FormatForCsv(con.Inheritance.RDGatewayUseConnectionCredentials)) + .Append(FormatForCsv(con.Inheritance.RDGatewayUsername)) + .Append(FormatForCsv(con.Inheritance.RDGatewayPassword)) + .Append(FormatForCsv(con.Inheritance.RDGatewayDomain)) + .Append(FormatForCsv(con.Inheritance.RDPAlertIdleTimeout)) + .Append(FormatForCsv(con.Inheritance.RDPMinutesToIdleTimeout)) + .Append(FormatForCsv(con.Inheritance.SoundQuality)); } - /// - /// Remove text that is unsafe for use in CSV files - /// - /// - private string CleanStringForCsv(object text) + private string FormatForCsv(object value) { - return text.ToString().Replace(";", ""); + var cleanedString = value.ToString().Replace(";", ""); + return cleanedString + ";"; } } } \ No newline at end of file