mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-23 17:48:39 +08:00
fix csv serialization bug where some empty fields would not be included
related to #911
This commit is contained in:
@@ -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));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove text that is unsafe for use in CSV files
|
||||
/// </summary>
|
||||
/// <param name="text"></param>
|
||||
private string CleanStringForCsv(object text)
|
||||
private string FormatForCsv(object value)
|
||||
{
|
||||
return text.ToString().Replace(";", "");
|
||||
var cleanedString = value.ToString().Replace(";", "");
|
||||
return cleanedString + ";";
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user