mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-17 22:11:48 +08:00
Compare commits
42 Commits
v1.76Alpha
...
v1.76Alpha
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
575dae446f | ||
|
|
9b438576f2 | ||
|
|
cbd32f1a07 | ||
|
|
516182ec40 | ||
|
|
4ad3a68d80 | ||
|
|
2f9ba32c07 | ||
|
|
dfc45a2904 | ||
|
|
563fdffb67 | ||
|
|
f2e9c5e2c0 | ||
|
|
86a591364c | ||
|
|
2a82485f81 | ||
|
|
e13549d361 | ||
|
|
a85c1bd7d3 | ||
|
|
946679f490 | ||
|
|
b6f27eac18 | ||
|
|
2cc82145a3 | ||
|
|
2dae0f2d8e | ||
|
|
412f6edc36 | ||
|
|
764791b8e5 | ||
|
|
bd20d6ae7d | ||
|
|
8db0bf7bea | ||
|
|
cff6aa72fc | ||
|
|
63ddf06057 | ||
|
|
3d9d57b7fa | ||
|
|
2c1734aea6 | ||
|
|
301c39aad0 | ||
|
|
5be346c89d | ||
|
|
e4eaf0037e | ||
|
|
8f97be82cb | ||
|
|
4ab7f92b82 | ||
|
|
0ec95a7729 | ||
|
|
98c38716cd | ||
|
|
6a46df780c | ||
|
|
7788198f26 | ||
|
|
3010963283 | ||
|
|
6522524c0f | ||
|
|
160434c114 | ||
|
|
36acb9ac12 | ||
|
|
ddbf6a2e7a | ||
|
|
8567e912a3 | ||
|
|
7c98f2809c | ||
|
|
0898ed8c00 |
@@ -1,3 +1,22 @@
|
||||
1.76.2 Alpha 4 (2018-03-03):
|
||||
|
||||
Fixes:
|
||||
------
|
||||
#899: DoNotPlay is Case Sensitive in XML Serialization
|
||||
|
||||
|
||||
1.76.1 Alpha 3 (2018-02-24):
|
||||
|
||||
Features/Enhancements:
|
||||
----------------------
|
||||
#625: Added ability to import mRemoteNG formatted CSV files
|
||||
#648: The port scan ping timeout is now configurable
|
||||
|
||||
Fixes:
|
||||
------
|
||||
Fixed a few Xml serialization bugs that would occur if boolean values weren't capitalized
|
||||
|
||||
|
||||
1.76.0 Alpha 2 (2018-02-01):
|
||||
|
||||
Features/Enhancements:
|
||||
@@ -24,6 +43,7 @@ Features/Enhancements:
|
||||
#671: Revamped UI theme system
|
||||
#611: Added multi-ssh toolbar for sending commands to many SSH clients at once
|
||||
#558: Connection tree now shows customizable icons instead of play/pause icon
|
||||
#519: You can now import normal mRemoteNG files - they do not have to be exports
|
||||
#504: Added Korean translation
|
||||
#485: The Domain field is now visible/editable for connection with the IntApp protocol
|
||||
#468: Default connection info Panel property is now saved
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
| ---------------|--------------|-----------|
|
||||
| Stable | [](https://ci.appveyor.com/project/mremoteng/mremoteng/branch/master) | [](https://github.com/mRemoteNG/mRemoteNG/releases/tag/v1.75.7011) |
|
||||
| Beta | | [](https://github.com/mRemoteNG/mRemoteNG/releases/tag/v1.75.7011) |
|
||||
| Development | [](https://ci.appveyor.com/project/mremoteng/mremoteng/branch/develop) | - |
|
||||
| Development | [](https://ci.appveyor.com/project/mremoteng/mremoteng/branch/develop) | [](https://github.com/mRemoteNG/mRemoteNG/releases/tag/v1.76Alpha3) |
|
||||
|
||||
mRemoteNG is the next generation of mRemote, a full-featured, multi-tab remote connections manager.
|
||||
|
||||
|
||||
106
Tools/CreateBulkConnections_ConfCons2_6.ps1
Normal file
106
Tools/CreateBulkConnections_ConfCons2_6.ps1
Normal file
@@ -0,0 +1,106 @@
|
||||
$EncryptionKey = (Get-Credential -Message "Enter the encryption key you would like to use. This must match the encryption key used by the rest of the confCons file." -UserName "DontNeedUsername").Password
|
||||
$PathToMrngFolder = "C:\Users\SparerD\Downloads\mRemoteNG-Portable-1.75.7012.16846"
|
||||
|
||||
if ($PathToMrngFolder -eq "") {
|
||||
Write-Error -Message 'You must set the $PathToMrngFolder variable in this script to the folder which contains mRemoteNG.exe'
|
||||
}
|
||||
|
||||
$assembly = [System.Reflection.Assembly]::LoadFile((Join-Path -Path $PathToMrngFolder -ChildPath "mRemoteNG.exe"))
|
||||
$assembly = [System.Reflection.Assembly]::LoadFile((Join-Path -Path $PathToMrngFolder -ChildPath "BouncyCastle.Crypto.dll"))
|
||||
|
||||
function New-mRemoteNGXmlSerializer {
|
||||
[CmdletBinding()]
|
||||
param (
|
||||
[SecureString]
|
||||
$EncryptionKey
|
||||
)
|
||||
|
||||
PROCESS {
|
||||
$cryptoProvider = New-Object -TypeName mRemoteNG.Security.SymmetricEncryption.AeadCryptographyProvider
|
||||
$saveFilter = New-Object -TypeName mRemoteNG.Security.SaveFilter -ArgumentList @($false)
|
||||
$xmlSerializer = New-Object -TypeName mRemoteNG.Config.Serializers.XmlConnectionNodeSerializer -ArgumentList @($cryptoProvider, $encryptionKey, $saveFilter)
|
||||
Write-Output $xmlSerializer
|
||||
}
|
||||
}
|
||||
|
||||
function New-mRemoteNGConnectionInfo {
|
||||
[CmdletBinding()]
|
||||
param (
|
||||
)
|
||||
|
||||
PROCESS {
|
||||
$connectionInfo = New-Object -TypeName mRemoteNG.Connection.ConnectionInfo
|
||||
Write-Output $connectionInfo
|
||||
}
|
||||
}
|
||||
|
||||
function New-mRemoteNGContainerInfo {
|
||||
[CmdletBinding()]
|
||||
param (
|
||||
)
|
||||
|
||||
PROCESS {
|
||||
$connectionInfo = New-Object -TypeName mRemoteNG.Container.ContainerInfo
|
||||
Write-Output $connectionInfo
|
||||
}
|
||||
}
|
||||
|
||||
# Setup the services needed to do serialization
|
||||
$xmlSerializer = New-mRemoteNGXmlSerializer -EncryptionKey $EncryptionKey
|
||||
|
||||
|
||||
|
||||
#----------------------------------------------------------------
|
||||
# Example 1: serialize many connections
|
||||
# Here you can define the number of connection info objects to create
|
||||
# You can also provide a list of desired hostnames and iterate over those
|
||||
$xml = ""
|
||||
foreach($i in 1..5)
|
||||
{
|
||||
$connectionInfo = New-mRemoteNGConnectionInfo
|
||||
|
||||
# Set connection info properties
|
||||
$connectionInfo.Name = "server-$i"
|
||||
$connectionInfo.Hostname = "some-win-server-$i"
|
||||
$connectionInfo.Protocol = [mRemoteNG.Connection.Protocol.ProtocolType]::RDP
|
||||
$connectionInfo.Inheritance.Username = $true
|
||||
$connectionInfo.Inheritance.Domain = $true
|
||||
$connectionInfo.Inheritance.Password = $true
|
||||
|
||||
$serializedConnection = $xmlSerializer.SerializeConnectionInfo($connectionInfo).ToString()
|
||||
$xml += $serializedConnection + [System.Environment]::NewLine
|
||||
}
|
||||
|
||||
Write-Output $xml
|
||||
|
||||
|
||||
|
||||
|
||||
#----------------------------------------------------------------
|
||||
# Example 2: serialize a container which has connections
|
||||
# You can also create containers and add connections to them, which will be nested correctly when serialized
|
||||
$xml = ""
|
||||
$container = New-mRemoteNGContainerInfo
|
||||
$container.Name = "ProductionServers"
|
||||
$serializedContainer = $xmlSerializer.SerializeConnectionInfo($container)
|
||||
|
||||
foreach($i in 1..3)
|
||||
{
|
||||
$connectionInfo = New-mRemoteNGConnectionInfo
|
||||
|
||||
# Set connection info properties
|
||||
$connectionInfo.Name = "server-$i"
|
||||
$connectionInfo.Hostname = "some-linux-server-$i"
|
||||
$connectionInfo.Protocol = [mRemoteNG.Connection.Protocol.ProtocolType]::SSH2
|
||||
$connectionInfo.Inheritance.Username = $true
|
||||
$connectionInfo.Inheritance.Domain = $true
|
||||
$connectionInfo.Inheritance.Password = $true
|
||||
|
||||
# serialize the connection
|
||||
$serializedConnection = $xmlSerializer.SerializeConnectionInfo($connectionInfo)
|
||||
# add the connection to the container
|
||||
$serializedContainer.Add($serializedConnection)
|
||||
}
|
||||
|
||||
# get the raw xml text
|
||||
Write-Output $serializedContainer.ToString()
|
||||
@@ -5,7 +5,7 @@ setlocal enabledelayedexpansion
|
||||
set SOLUTIONDIR=%~dp0..
|
||||
|
||||
rem Windows Sysinternals Sigcheck from http://technet.microsoft.com/en-us/sysinternals/bb897441
|
||||
set SIGCHECK="%SOLUTIONDIR%\Tools\sigcheck.exe"
|
||||
set SIGCHECK="%SOLUTIONDIR%\Tools\exes\sigcheck.exe"
|
||||
set SEVENZIP="%SOLUTIONDIR%\Tools\7zip\7za.exe"
|
||||
|
||||
set VCVARSALL="%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
|
||||
|
||||
BIN
Tools/exes/dumpbin.exe
Normal file
BIN
Tools/exes/dumpbin.exe
Normal file
Binary file not shown.
BIN
Tools/exes/editbin.exe
Normal file
BIN
Tools/exes/editbin.exe
Normal file
Binary file not shown.
BIN
Tools/exes/link.exe
Normal file
BIN
Tools/exes/link.exe
Normal file
Binary file not shown.
BIN
Tools/exes/mspdbcore.dll
Normal file
BIN
Tools/exes/mspdbcore.dll
Normal file
Binary file not shown.
@@ -1,3 +1,5 @@
|
||||
[CmdletBinding()]
|
||||
|
||||
param (
|
||||
[string]
|
||||
# Name of the file to find
|
||||
@@ -46,6 +48,7 @@ $rootSearchPaths = @(
|
||||
# Returns the first full path to the $FileName that our search can find
|
||||
foreach ($searchPath in $rootSearchPaths) {
|
||||
foreach ($visualStudioFolder in $searchPath) {
|
||||
Write-Verbose "Searching in folder '$visualStudioFolder'"
|
||||
$matchingExes = [System.IO.Directory]::EnumerateFileSystemEntries($visualStudioFolder, $FileName, [System.IO.SearchOption]::AllDirectories)
|
||||
foreach ($matchingExe in $matchingExes) {
|
||||
if ((EditBinCertificateIsValid -Path $matchingExe) -and (ToolCanBeExecuted -Path $matchingExe)) {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
$githubUrl = 'https://api.github.com'
|
||||
|
||||
# GitHub doesn't support the default powershell protocol (TLS 1.0)
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
||||
|
||||
function Publish-GitHubRelease {
|
||||
param (
|
||||
|
||||
@@ -45,5 +45,5 @@ Format-Table -AutoSize -Wrap -InputObject @{
|
||||
& "$PSScriptRoot\verify_LargeAddressAware.ps1" -TargetDir $TargetDir -TargetFileName $TargetFileName
|
||||
& "$PSScriptRoot\tidy_files_for_release.ps1" -TargetDir $TargetDir -ConfigurationName $ConfigurationName
|
||||
& "$PSScriptRoot\sign_binaries.ps1" -TargetDir $TargetDir -CertificatePath $CertificatePath -CertificatePassword $CertificatePassword -ConfigurationName $ConfigurationName -Exclude $ExcludeFromSigning
|
||||
& "$PSScriptRoot\verify_binary_signatures.ps1" -TargetDir $TargetDir -ConfigurationName $ConfigurationName
|
||||
& "$PSScriptRoot\verify_binary_signatures.ps1" -TargetDir $TargetDir -ConfigurationName $ConfigurationName -CertificatePath $CertificatePath
|
||||
& "$PSScriptRoot\zip_portable_files.ps1" -SolutionDir $SolutionDir -TargetDir $TargetDir -ConfigurationName $ConfigurationName
|
||||
@@ -9,7 +9,7 @@ Write-Host $SolutionDir
|
||||
Write-Host $renameTarget
|
||||
|
||||
$targetVersionedFile = "$SolutionDir\mRemoteV1\bin\Release\mRemoteNG.exe"
|
||||
$version = &"$SolutionDir\Tools\sigcheck.exe" /accepteula -q -n $targetVersionedFile
|
||||
$version = &"$SolutionDir\Tools\exes\sigcheck.exe" /accepteula -q -n $targetVersionedFile
|
||||
|
||||
|
||||
$renameTargetFileObject = Get-Item -Path $renameTarget -ErrorAction SilentlyContinue
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
[CmdletBinding()]
|
||||
|
||||
param (
|
||||
[string]
|
||||
[Parameter(Mandatory=$true)]
|
||||
@@ -10,13 +12,11 @@ param (
|
||||
|
||||
Write-Output "===== Beginning $($PSCmdlet.MyInvocation.MyCommand) ====="
|
||||
|
||||
# Find editbin.exe
|
||||
$path_editBin = & "$PSScriptRoot\find_vstool.ps1" -FileName "editbin.exe"
|
||||
|
||||
$path_editBin = Join-Path -Path $PSScriptRoot -ChildPath "exes\editbin.exe"
|
||||
$path_outputExe = Join-Path -Path $TargetDir -ChildPath $TargetFileName
|
||||
|
||||
# Set LargeAddressAware
|
||||
Write-Output "Setting LargeAddressAware on binary file:`n`"$path_outputExe`" `nwith:`n`"$path_editBin`""
|
||||
& $path_editBin "/largeaddressaware" "$path_outputExe"
|
||||
& "$path_editBin" /largeaddressaware "$path_outputExe"
|
||||
|
||||
Write-Output ""
|
||||
@@ -1,3 +1,5 @@
|
||||
[CmdletBinding()]
|
||||
|
||||
param (
|
||||
[string]
|
||||
[Parameter(Mandatory=$true)]
|
||||
@@ -10,13 +12,11 @@ param (
|
||||
|
||||
Write-Output "===== Beginning $($PSCmdlet.MyInvocation.MyCommand) ====="
|
||||
|
||||
# Find editbin.exe
|
||||
$path_dumpBin = & "$PSScriptRoot\find_vstool.ps1" -FileName "dumpbin.exe"
|
||||
|
||||
$path_dumpBin = Join-Path -Path $PSScriptRoot -ChildPath "exes\dumpbin.exe"
|
||||
$path_outputExe = Join-Path -Path $TargetDir -ChildPath $TargetFileName
|
||||
|
||||
# Dump exe header
|
||||
$output = & "$path_dumpBin" /NOLOGO /HEADERS $path_outputExe | Select-String large
|
||||
$output = & "$path_dumpBin" /NOLOGO /HEADERS "$path_outputExe" | Select-String large
|
||||
|
||||
if ($output -eq $null)
|
||||
{
|
||||
@@ -27,6 +27,4 @@ else
|
||||
Write-Output $output.ToString().TrimStart(" ")
|
||||
}
|
||||
|
||||
|
||||
|
||||
Write-Output ""
|
||||
@@ -8,6 +8,7 @@ param (
|
||||
$ConfigurationName,
|
||||
|
||||
[string]
|
||||
[Parameter(Mandatory=$true)]
|
||||
# The code signing certificate to use when signing the files.
|
||||
$CertificatePath
|
||||
)
|
||||
@@ -17,11 +18,11 @@ Write-Output "===== Beginning $($PSCmdlet.MyInvocation.MyCommand) ====="
|
||||
# validate release versions and if the certificate is available
|
||||
if ($ConfigurationName -match "Release") {
|
||||
|
||||
if ($CertificatePath -eq "" -or !(Test-Path -Path $CertificatePath -PathType Leaf))
|
||||
{
|
||||
if ($CertificatePath -eq "" -or !(Test-Path -Path $CertificatePath -PathType Leaf))
|
||||
{
|
||||
Write-Output "Certificate is not present - files likely not signed - we won't verify file signatures."
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
Write-Output "Verifying signature of binaries"
|
||||
Write-Output "Getting files from path: $TargetDir"
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.Security;
|
||||
using System.Xml.Linq;
|
||||
using mRemoteNG.Config;
|
||||
using mRemoteNG.Config.Serializers;
|
||||
using mRemoteNG.Config.Serializers.Xml;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Security;
|
||||
|
||||
@@ -0,0 +1,186 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using mRemoteNG.Config.Serializers.Csv;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Connection.Protocol;
|
||||
using mRemoteNG.Connection.Protocol.Http;
|
||||
using mRemoteNG.Connection.Protocol.ICA;
|
||||
using mRemoteNG.Connection.Protocol.RDP;
|
||||
using mRemoteNG.Connection.Protocol.VNC;
|
||||
using mRemoteNG.Credential;
|
||||
using mRemoteNG.Security;
|
||||
using mRemoteNGTests.TestHelpers;
|
||||
using NSubstitute;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace mRemoteNGTests.Config.Serializers.ConnectionSerializers.Csv
|
||||
{
|
||||
public class CsvConnectionsDeserializerMremotengFormatTests
|
||||
{
|
||||
private CsvConnectionsDeserializerMremotengFormat _deserializer;
|
||||
private ICredentialRepositoryList _credentialRepositoryList;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_deserializer = new CsvConnectionsDeserializerMremotengFormat();
|
||||
_credentialRepositoryList = Substitute.For<ICredentialRepositoryList>();
|
||||
}
|
||||
|
||||
[TestCaseSource(typeof(DeserializationTestSource), nameof(DeserializationTestSource.ConnectionPropertyTestCases))]
|
||||
public object ConnectionPropertiesDeserializedCorrectly(string propertyToCheck)
|
||||
{
|
||||
var serializer = new CsvConnectionsSerializerMremotengFormat(new SaveFilter(), _credentialRepositoryList);
|
||||
var csv = serializer.Serialize(GetTestConnection());
|
||||
var deserializedConnections = _deserializer.Deserialize(csv);
|
||||
var connection = deserializedConnections.GetRecursiveChildList().FirstOrDefault();
|
||||
var propertyValue = typeof(ConnectionInfo).GetProperty(propertyToCheck)?.GetValue(connection);
|
||||
return propertyValue;
|
||||
}
|
||||
|
||||
[TestCaseSource(typeof(DeserializationTestSource), nameof(DeserializationTestSource.InheritanceTestCases))]
|
||||
public object InheritancePropertiesDeserializedCorrectly(string propertyToCheck)
|
||||
{
|
||||
var serializer = new CsvConnectionsSerializerMremotengFormat(new SaveFilter(), _credentialRepositoryList);
|
||||
var csv = serializer.Serialize(GetTestConnectionWithAllInherited());
|
||||
var deserializedConnections = _deserializer.Deserialize(csv);
|
||||
var connection = deserializedConnections.GetRecursiveChildList().FirstOrDefault();
|
||||
var propertyValue = typeof(ConnectionInfoInheritance).GetProperty(propertyToCheck)?.GetValue(connection?.Inheritance);
|
||||
return propertyValue;
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TreeStructureDeserializedCorrectly()
|
||||
{
|
||||
//Root
|
||||
// |- folder1
|
||||
// | |- Con1
|
||||
// |- Con2
|
||||
var treeModel = new ConnectionTreeModelBuilder().Build();
|
||||
var serializer = new CsvConnectionsSerializerMremotengFormat(new SaveFilter(), _credentialRepositoryList);
|
||||
var csv = serializer.Serialize(treeModel);
|
||||
var deserializedConnections = _deserializer.Deserialize(csv);
|
||||
var con1 = deserializedConnections.GetRecursiveChildList().First(info => info.Name == "Con1");
|
||||
var folder1 = deserializedConnections.GetRecursiveChildList().First(info => info.Name == "folder1");
|
||||
Assert.That(con1.Parent, Is.EqualTo(folder1));
|
||||
}
|
||||
|
||||
internal static ConnectionInfo GetTestConnection()
|
||||
{
|
||||
return new ConnectionInfo
|
||||
{
|
||||
Name = "SomeName",
|
||||
Description = "SomeDescription",
|
||||
Icon = "SomeIcon",
|
||||
Panel = "SomePanel",
|
||||
Username = "SomeUsername",
|
||||
Password = "SomePassword",
|
||||
Domain = "SomeDomain",
|
||||
Hostname = "SomeHostname",
|
||||
PuttySession = "SomePuttySession",
|
||||
LoadBalanceInfo = "SomeLoadBalanceInfo",
|
||||
PreExtApp = "SomePreExtApp",
|
||||
PostExtApp = "SomePostExtApp",
|
||||
MacAddress = "SomeMacAddress",
|
||||
UserField = "SomeUserField",
|
||||
ExtApp = "SomeExtApp",
|
||||
VNCProxyUsername = "SomeVNCProxyUsername",
|
||||
VNCProxyPassword = "SomeVNCProxyPassword",
|
||||
RDGatewayUsername = "SomeRDGatewayUsername",
|
||||
RDGatewayPassword = "SomeRDGatewayPassword",
|
||||
RDGatewayDomain = "SomeRDGatewayDomain",
|
||||
VNCProxyIP = "SomeVNCProxyIP",
|
||||
RDGatewayHostname = "SomeRDGatewayHostname",
|
||||
Protocol = ProtocolType.ICA,
|
||||
Port = 999,
|
||||
UseConsoleSession = true,
|
||||
UseCredSsp = true,
|
||||
RenderingEngine = HTTPBase.RenderingEngine.Gecko,
|
||||
ICAEncryptionStrength = IcaProtocol.EncryptionStrength.Encr40Bit,
|
||||
RDPAuthenticationLevel = RdpProtocol.AuthenticationLevel.WarnOnFailedAuth,
|
||||
Colors = RdpProtocol.RDPColors.Colors16Bit,
|
||||
Resolution = RdpProtocol.RDPResolutions.Res1366x768,
|
||||
AutomaticResize = true,
|
||||
DisplayWallpaper = true,
|
||||
DisplayThemes = true,
|
||||
EnableFontSmoothing = true,
|
||||
EnableDesktopComposition = true,
|
||||
CacheBitmaps = true,
|
||||
RedirectDiskDrives = true,
|
||||
RedirectPorts = true,
|
||||
RedirectPrinters = true,
|
||||
RedirectSmartCards = true,
|
||||
RedirectSound = RdpProtocol.RDPSounds.LeaveAtRemoteComputer,
|
||||
RedirectKeys = true,
|
||||
VNCCompression = ProtocolVNC.Compression.Comp4,
|
||||
VNCEncoding = ProtocolVNC.Encoding.EncRRE,
|
||||
VNCAuthMode = ProtocolVNC.AuthMode.AuthVNC,
|
||||
VNCProxyType = ProtocolVNC.ProxyType.ProxySocks5,
|
||||
VNCProxyPort = 123,
|
||||
VNCColors = ProtocolVNC.Colors.Col8Bit,
|
||||
VNCSmartSizeMode = ProtocolVNC.SmartSizeMode.SmartSAspect,
|
||||
VNCViewOnly = true,
|
||||
RDGatewayUsageMethod = RdpProtocol.RDGatewayUsageMethod.Detect,
|
||||
RDGatewayUseConnectionCredentials = RdpProtocol.RDGatewayUseConnectionCredentials.SmartCard
|
||||
};
|
||||
}
|
||||
|
||||
internal static ConnectionInfo GetTestConnectionWithAllInherited()
|
||||
{
|
||||
var connectionInfo = new ConnectionInfo();
|
||||
connectionInfo.Inheritance.TurnOnInheritanceCompletely();
|
||||
return connectionInfo;
|
||||
}
|
||||
|
||||
private class DeserializationTestSource
|
||||
{
|
||||
public static IEnumerable ConnectionPropertyTestCases()
|
||||
{
|
||||
var ignoreProperties = new[]
|
||||
{
|
||||
nameof(ConnectionInfo.Inheritance),
|
||||
nameof(ConnectionInfo.ConstantID),
|
||||
nameof(ConnectionInfo.Parent)
|
||||
};
|
||||
var properties = typeof(ConnectionInfo)
|
||||
.GetProperties()
|
||||
.Where(property => !ignoreProperties.Contains(property.Name));
|
||||
var testCases = new List<TestCaseData>();
|
||||
var testConnectionInfo = GetTestConnection();
|
||||
|
||||
foreach (var property in properties)
|
||||
{
|
||||
testCases.Add(
|
||||
new TestCaseData(property.Name)
|
||||
.Returns(property.GetValue(testConnectionInfo)));
|
||||
}
|
||||
|
||||
return testCases;
|
||||
}
|
||||
|
||||
public static IEnumerable InheritanceTestCases()
|
||||
{
|
||||
var ignoreProperties = new[]
|
||||
{
|
||||
nameof(ConnectionInfoInheritance.EverythingInherited),
|
||||
nameof(ConnectionInfoInheritance.Parent)
|
||||
};
|
||||
var properties = typeof(ConnectionInfoInheritance)
|
||||
.GetProperties()
|
||||
.Where(property => !ignoreProperties.Contains(property.Name));
|
||||
var testCases = new List<TestCaseData>();
|
||||
var testInheritance = GetTestConnectionWithAllInherited().Inheritance;
|
||||
|
||||
foreach (var property in properties)
|
||||
{
|
||||
testCases.Add(
|
||||
new TestCaseData(property.Name)
|
||||
.Returns(property.GetValue(testInheritance)));
|
||||
}
|
||||
|
||||
return testCases;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,17 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using mRemoteNG.Config.Serializers;
|
||||
using mRemoteNG.Config.Serializers.Csv;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Credential;
|
||||
using mRemoteNG.Security;
|
||||
using mRemoteNG.Tree;
|
||||
using mRemoteNGTests.TestHelpers;
|
||||
using NSubstitute;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace mRemoteNGTests.Config.Serializers.MiscSerializers
|
||||
namespace mRemoteNGTests.Config.Serializers.ConnectionSerializers.Csv
|
||||
{
|
||||
public class CsvConnectionsSerializerMremotengFormatTests
|
||||
{
|
||||
@@ -28,6 +32,24 @@ namespace mRemoteNGTests.Config.Serializers.MiscSerializers
|
||||
_credentialRepositoryList.GetCredentialRecord(new Guid()).ReturnsForAnyArgs(credRecord);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SerializesNodeId()
|
||||
{
|
||||
var serializer = new CsvConnectionsSerializerMremotengFormat(new SaveFilter(), _credentialRepositoryList);
|
||||
var connectionInfo = BuildConnectionInfo();
|
||||
var csv = serializer.Serialize(connectionInfo);
|
||||
Assert.That(csv, Does.Match(connectionInfo.ConstantID));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void DoesntSerializeTheRootNode()
|
||||
{
|
||||
var serializer = new CsvConnectionsSerializerMremotengFormat(new SaveFilter(), _credentialRepositoryList);
|
||||
var treeModel = new ConnectionTreeModelBuilder().Build();
|
||||
var csv = serializer.Serialize(treeModel);
|
||||
Assert.That(csv, Does.Not.Match($"{treeModel.RootNodes[0].ConstantID};.*;{TreeNodeType.Root}"));
|
||||
}
|
||||
|
||||
[TestCase(Username)]
|
||||
[TestCase(Domain)]
|
||||
[TestCase(Password)]
|
||||
@@ -82,6 +104,32 @@ namespace mRemoteNGTests.Config.Serializers.MiscSerializers
|
||||
Assert.Throws<ArgumentNullException>(() => serializer.Serialize((ConnectionTreeModel)null));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void FoldersAreSerialized()
|
||||
{
|
||||
var serializer = new CsvConnectionsSerializerMremotengFormat(new SaveFilter(), _credentialRepositoryList);
|
||||
var container = BuildContainer();
|
||||
var csv = serializer.Serialize(container);
|
||||
Assert.That(csv, Does.Match(container.Name));
|
||||
Assert.That(csv, Does.Match(container.Username));
|
||||
Assert.That(csv, Does.Match(container.Domain));
|
||||
Assert.That(csv, Does.Match(container.Password));
|
||||
Assert.That(csv, Does.Contain(TreeNodeType.Container.ToString()));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SerializationIncludesRawInheritedValuesIfObjectInheritsFromParentOutsideOfSerializationScope()
|
||||
{
|
||||
var serializer = new CsvConnectionsSerializerMremotengFormat(new SaveFilter(), _credentialRepositoryList);
|
||||
var treeModel = new ConnectionTreeModelBuilder().Build();
|
||||
var serializationTarget = treeModel.GetRecursiveChildList().First(info => info.Name == "folder3");
|
||||
var csv = serializer.Serialize(serializationTarget);
|
||||
var lineWithFolder3 = csv.Split(new[] {Environment.NewLine}, StringSplitOptions.None).First(s => s.Contains(serializationTarget.Name));
|
||||
Assert.That(lineWithFolder3, Does.Contain(serializationTarget.Username));
|
||||
Assert.That(lineWithFolder3, Does.Contain(serializationTarget.Domain));
|
||||
Assert.That(lineWithFolder3, Does.Contain(serializationTarget.Password));
|
||||
}
|
||||
|
||||
private ConnectionInfo BuildConnectionInfo()
|
||||
{
|
||||
return new ConnectionInfo
|
||||
@@ -93,5 +141,16 @@ namespace mRemoteNGTests.Config.Serializers.MiscSerializers
|
||||
Inheritance = {Colors = true}
|
||||
};
|
||||
}
|
||||
|
||||
private ContainerInfo BuildContainer()
|
||||
{
|
||||
return new ContainerInfo
|
||||
{
|
||||
Name = "MyFolder",
|
||||
Username = "BlahBlah1",
|
||||
Domain = "aklkskkksh8",
|
||||
Password = "qweraslkdjf87"
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
using System.Xml;
|
||||
using System.Xml.Schema;
|
||||
using mRemoteNG.Config.Serializers.Xml;
|
||||
using mRemoteNG.Security;
|
||||
using mRemoteNG.Security.SymmetricEncryption;
|
||||
using mRemoteNG.Tree;
|
||||
using mRemoteNG.Tree.Root;
|
||||
using mRemoteNGTests.TestHelpers;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace mRemoteNGTests.Config.Serializers.ConnectionSerializers.Xml
|
||||
{
|
||||
public class ValidateXmlSchemas
|
||||
{
|
||||
private XmlConnectionsSerializer _serializer;
|
||||
private ConnectionTreeModel _connectionTreeModel;
|
||||
private ICryptographyProvider _cryptographyProvider;
|
||||
private XmlReaderSettings _xmlReaderSettings;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_connectionTreeModel = new ConnectionTreeModelBuilder().Build();
|
||||
_cryptographyProvider = new AeadCryptographyProvider();
|
||||
var connectionNodeSerializer = new XmlConnectionNodeSerializer26(
|
||||
_cryptographyProvider,
|
||||
_connectionTreeModel.RootNodes.OfType<RootNodeInfo>().First().PasswordString.ConvertToSecureString(),
|
||||
new SaveFilter());
|
||||
_serializer = new XmlConnectionsSerializer(_cryptographyProvider, connectionNodeSerializer);
|
||||
_xmlReaderSettings = new XmlReaderSettings
|
||||
{
|
||||
ValidationType = ValidationType.Schema,
|
||||
ValidationFlags = XmlSchemaValidationFlags.ProcessInlineSchema |
|
||||
XmlSchemaValidationFlags.ProcessSchemaLocation |
|
||||
XmlSchemaValidationFlags.ReportValidationWarnings
|
||||
};
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ValidateSchema()
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
var xml = _serializer.Serialize(_connectionTreeModel);
|
||||
|
||||
var schemaFile = GetTargetPath("mremoteng_confcons_v2_6.xsd");
|
||||
_xmlReaderSettings.Schemas.Add("http://mremoteng.org", schemaFile);
|
||||
_xmlReaderSettings.ValidationEventHandler += (sender, args) =>
|
||||
{
|
||||
sb.AppendLine($"{args.Severity}: {args.Message}");
|
||||
};
|
||||
|
||||
using (var stream = GenerateStreamFromString(xml))
|
||||
{
|
||||
var reader = XmlReader.Create(stream, _xmlReaderSettings);
|
||||
while (reader.Read()) ;
|
||||
}
|
||||
|
||||
Assert.That(sb.ToString(), Is.Empty);
|
||||
}
|
||||
|
||||
public string GetTargetPath(string fileName, [CallerFilePath] string sourceFilePath = "")
|
||||
{
|
||||
const string debugOrRelease =
|
||||
#if DEBUG
|
||||
"Debug";
|
||||
#else
|
||||
"Release";
|
||||
#endif
|
||||
|
||||
const string normalOrPortable =
|
||||
#if PORTABLE
|
||||
" Portable";
|
||||
#else
|
||||
"";
|
||||
#endif
|
||||
var path = Path.GetDirectoryName(sourceFilePath);
|
||||
var filePath = $@"{path}\..\..\..\..\bin\{debugOrRelease}{normalOrPortable}\Schemas\{fileName}";
|
||||
return filePath;
|
||||
}
|
||||
|
||||
private Stream GenerateStreamFromString(string s)
|
||||
{
|
||||
var stream = new MemoryStream();
|
||||
var writer = new StreamWriter(stream);
|
||||
writer.Write(s);
|
||||
writer.Flush();
|
||||
stream.Position = 0;
|
||||
return stream;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using mRemoteNG.Config.Serializers;
|
||||
using mRemoteNG.Config.Serializers.Xml;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Security;
|
||||
@@ -9,7 +10,7 @@ using mRemoteNG.Tree;
|
||||
using mRemoteNGTests.Properties;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace mRemoteNGTests.Config.Serializers.ConnectionSerializers
|
||||
namespace mRemoteNGTests.Config.Serializers.ConnectionSerializers.Xml
|
||||
{
|
||||
public class XmlConnectionsDeserializerTests
|
||||
{
|
||||
@@ -104,6 +105,14 @@ namespace mRemoteNGTests.Config.Serializers.ConnectionSerializers
|
||||
Assert.That(folder22.Inheritance.Username, Is.True);
|
||||
}
|
||||
|
||||
[TestCaseSource(typeof(XmlConnectionsDeserializerFixtureData), nameof(XmlConnectionsDeserializerFixtureData.FixtureParams))]
|
||||
public void ExpandedPropertyGetsDeserialized(Datagram testData)
|
||||
{
|
||||
Setup(testData.ConfCons, testData.Password);
|
||||
var folder1 = GetFolderNamed("Folder1", _connectionTreeModel.GetRecursiveChildList());
|
||||
Assert.That(folder1.IsExpanded, Is.True);
|
||||
}
|
||||
|
||||
private bool ContainsNodeNamed(string name, IEnumerable<ConnectionInfo> list)
|
||||
{
|
||||
return list.Any(node => node.Name == name);
|
||||
@@ -1,6 +1,7 @@
|
||||
using System.Linq;
|
||||
using System.Xml.XPath;
|
||||
using mRemoteNG.Config.Serializers;
|
||||
using mRemoteNG.Config.Serializers.Xml;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Security;
|
||||
@@ -9,7 +10,7 @@ using mRemoteNG.Tree;
|
||||
using mRemoteNG.Tree.Root;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace mRemoteNGTests.Config.Serializers.ConnectionSerializers
|
||||
namespace mRemoteNGTests.Config.Serializers.ConnectionSerializers.Xml
|
||||
{
|
||||
public class XmlConnectionsDocumentCompilerTests
|
||||
{
|
||||
@@ -1,6 +1,7 @@
|
||||
using System.Linq;
|
||||
using System.Xml.Linq;
|
||||
using mRemoteNG.Config.Serializers;
|
||||
using mRemoteNG.Config.Serializers.Xml;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Security;
|
||||
@@ -9,7 +10,7 @@ using mRemoteNG.Tree;
|
||||
using mRemoteNG.Tree.Root;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace mRemoteNGTests.Config.Serializers.ConnectionSerializers
|
||||
namespace mRemoteNGTests.Config.Serializers.ConnectionSerializers.Xml
|
||||
{
|
||||
public class XmlConnectionsDocumentEncryptorTests
|
||||
{
|
||||
@@ -2,6 +2,7 @@
|
||||
using System.Xml;
|
||||
using System.Xml.Linq;
|
||||
using mRemoteNG.Config.Serializers;
|
||||
using mRemoteNG.Config.Serializers.Xml;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Security;
|
||||
@@ -10,7 +11,7 @@ using mRemoteNG.Tree;
|
||||
using mRemoteNG.Tree.Root;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace mRemoteNGTests.Config.Serializers.ConnectionSerializers
|
||||
namespace mRemoteNGTests.Config.Serializers.ConnectionSerializers.Xml
|
||||
{
|
||||
public class XmlConnectionsSerializerTests
|
||||
{
|
||||
@@ -55,7 +56,7 @@ namespace mRemoteNGTests.Config.Serializers.ConnectionSerializers
|
||||
[TestCase("Username", "")]
|
||||
[TestCase("Domain", "")]
|
||||
[TestCase("Password", "")]
|
||||
[TestCase("InheritAutomaticResize", "False")]
|
||||
[TestCase("InheritAutomaticResize", "false")]
|
||||
public void SerializerRespectsSaveFilterSettings(string attributeName, string expectedValue)
|
||||
{
|
||||
var connectionNodeSerializer = new XmlConnectionNodeSerializer26(
|
||||
@@ -2,13 +2,14 @@
|
||||
using System.Collections;
|
||||
using System.Xml.Linq;
|
||||
using mRemoteNG.Config.Serializers;
|
||||
using mRemoteNG.Config.Serializers.Xml;
|
||||
using mRemoteNG.Security;
|
||||
using mRemoteNG.Security.Factories;
|
||||
using mRemoteNG.Security.SymmetricEncryption;
|
||||
using mRemoteNG.Tree.Root;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace mRemoteNGTests.Config.Serializers.ConnectionSerializers
|
||||
namespace mRemoteNGTests.Config.Serializers.ConnectionSerializers.Xml
|
||||
{
|
||||
public class XmlRootNodeSerializerTests
|
||||
{
|
||||
@@ -75,7 +76,7 @@ namespace mRemoteNGTests.Config.Serializers.ConnectionSerializers
|
||||
{
|
||||
var element = _rootNodeSerializer.SerializeRootNodeInfo(_rootNodeInfo, _cryptographyProvider, fullFileEncryption);
|
||||
var attributeValue = element.Attribute(XName.Get("FullFileEncryption"))?.Value;
|
||||
Assert.That(attributeValue, Is.EqualTo(fullFileEncryption.ToString()));
|
||||
Assert.That(bool.Parse(attributeValue), Is.EqualTo(fullFileEncryption));
|
||||
}
|
||||
|
||||
[TestCase("", "ThisIsNotProtected")]
|
||||
@@ -1,4 +1,5 @@
|
||||
using mRemoteNG.Config.Serializers;
|
||||
using System.Linq;
|
||||
using mRemoteNG.Config.Serializers;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Security;
|
||||
@@ -26,7 +27,7 @@ namespace mRemoteNGTests.Config.Serializers
|
||||
{
|
||||
var model = CreateConnectionTreeModel();
|
||||
var dataTable = _dataTableSerializer.Serialize(model);
|
||||
Assert.That(dataTable.Rows.Count, Is.EqualTo(3));
|
||||
Assert.That(dataTable.Rows.Count, Is.EqualTo(model.GetRecursiveChildList().Count()));
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using mRemoteNG.Connection;
|
||||
using System;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Connection.Protocol;
|
||||
using mRemoteNG.Connection.Protocol.Http;
|
||||
using mRemoteNG.Connection.Protocol.ICA;
|
||||
@@ -9,10 +10,14 @@ using NUnit.Framework;
|
||||
|
||||
namespace mRemoteNGTests.Connection
|
||||
{
|
||||
public class AbstractConnectionInfoDataTests
|
||||
public class AbstractConnectionInfoDataTests
|
||||
{
|
||||
#pragma warning disable 618
|
||||
private class TestAbstractConnectionInfoData : AbstractConnectionRecord {}
|
||||
private class TestAbstractConnectionInfoData : AbstractConnectionRecord {
|
||||
public TestAbstractConnectionInfoData() : base(Guid.NewGuid().ToString())
|
||||
{
|
||||
}
|
||||
}
|
||||
#pragma warning restore 618
|
||||
private TestAbstractConnectionInfoData _testAbstractConnectionInfoData;
|
||||
|
||||
|
||||
@@ -27,22 +27,6 @@ namespace mRemoteNGTests.Connection
|
||||
_connectionInfo = null;
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CreatingConnectionInfoWithParentSetsTheParentProperty()
|
||||
{
|
||||
var container = new ContainerInfo();
|
||||
var connectionInfo = new ConnectionInfo(container);
|
||||
Assert.That(connectionInfo.Parent, Is.EqualTo(container));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CreatingConnectionInfoWithParentAddsToTheParentsChildList()
|
||||
{
|
||||
var container = new ContainerInfo();
|
||||
var connectionInfo = new ConnectionInfo(container);
|
||||
Assert.That(container.Children, Does.Contain(connectionInfo));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CopyCreatesMemberwiseCopy()
|
||||
{
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.Linq;
|
||||
using mRemoteNG.Config.Serializers;
|
||||
using mRemoteNG.Config.Serializers.Xml;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Security;
|
||||
|
||||
@@ -34,8 +34,9 @@
|
||||
|
||||
using System.Collections;
|
||||
using System.Windows.Forms;
|
||||
using NUnit.Extensions.Forms;
|
||||
|
||||
namespace NUnit.Extensions.Forms
|
||||
namespace mRemoteNGTests
|
||||
{
|
||||
/// <summary>
|
||||
/// A ControlTester for testing List Views.
|
||||
|
||||
@@ -7,17 +7,52 @@ namespace mRemoteNGTests.TestHelpers
|
||||
{
|
||||
public class ConnectionTreeModelBuilder
|
||||
{
|
||||
/// <summary>
|
||||
/// Builds a tree which looks like:
|
||||
/// Root
|
||||
/// |- folder1
|
||||
/// | |- con1
|
||||
/// |- con2
|
||||
/// |- folder2
|
||||
/// |- folder3
|
||||
/// |- con3
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ConnectionTreeModel Build()
|
||||
{
|
||||
var model = new ConnectionTreeModel();
|
||||
var root = new RootNodeInfo(RootNodeType.Connection);
|
||||
var folder1 = new ContainerInfo { Name = "folder1", Username = "user1", Domain = "domain1", Password = "password1" };
|
||||
var folder2 = new ContainerInfo { Name = "folder2", Username = "user2", Domain = "domain2", Password = "password2" };
|
||||
var folder3 = new ContainerInfo
|
||||
{
|
||||
Name = "folder3",
|
||||
Inheritance =
|
||||
{
|
||||
Username = true,
|
||||
Domain = true,
|
||||
Password = true
|
||||
}
|
||||
};
|
||||
var con1 = new ConnectionInfo { Name = "Con1", Username = "user1", Domain = "domain1", Password = "password1" };
|
||||
var con2 = new ConnectionInfo { Name = "Con2", Username = "user2", Domain = "domain2", Password = "password2" };
|
||||
var con3 = new ContainerInfo
|
||||
{
|
||||
Name = "con3",
|
||||
Inheritance =
|
||||
{
|
||||
Username = true,
|
||||
Domain = true,
|
||||
Password = true
|
||||
}
|
||||
};
|
||||
|
||||
root.AddChild(folder1);
|
||||
root.AddChild(con2);
|
||||
folder1.AddChild(con1);
|
||||
root.AddChild(folder2);
|
||||
folder2.AddChild(folder3);
|
||||
folder3.AddChild(con3);
|
||||
model.AddRootNode(root);
|
||||
return model;
|
||||
}
|
||||
|
||||
@@ -3,12 +3,12 @@ using NUnit.Framework;
|
||||
|
||||
namespace mRemoteNGTests.Tools
|
||||
{
|
||||
public class MaybeTests
|
||||
public class OptionalTests
|
||||
{
|
||||
[Test]
|
||||
public void MaybeReturnsEmptyListWhenGivenNullValue()
|
||||
{
|
||||
var sut = new Maybe<object>(null);
|
||||
var sut = new Optional<object>(null);
|
||||
Assert.That(sut, Is.Empty);
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace mRemoteNGTests.Tools
|
||||
public void MaybeReturnsValueIfNotNull()
|
||||
{
|
||||
var expected = new object();
|
||||
var sut = new Maybe<object>(expected);
|
||||
var sut = new Optional<object>(expected);
|
||||
Assert.That(sut, Has.Member(expected));
|
||||
}
|
||||
|
||||
@@ -114,6 +114,7 @@
|
||||
<Compile Include="Config\DataProviders\FileBackupCreatorTests.cs" />
|
||||
<Compile Include="Config\DataProviders\FileDataProviderTests.cs" />
|
||||
<Compile Include="Config\DataProviders\FileDataProviderWithRollingBackupTests.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\Xml\ValidateXmlSchemas.cs" />
|
||||
<Compile Include="Config\Serializers\DataTableDeserializerTests.cs" />
|
||||
<Compile Include="Config\CredentialHarvesterTests.cs" />
|
||||
<Compile Include="Config\CredentialRecordLoaderTests.cs" />
|
||||
@@ -121,20 +122,21 @@
|
||||
<Compile Include="Config\Serializers\CredentialProviderSerializerTests.cs" />
|
||||
<Compile Include="Config\Serializers\CredentialSerializers\XmlCredentialPasswordDecryptorDecoratorTests.cs" />
|
||||
<Compile Include="Config\Serializers\CredentialSerializers\XmlCredentialPasswordEncryptorDecoratorTests.cs" />
|
||||
<Compile Include="Config\Serializers\MiscSerializers\CsvConnectionsSerializerMremotengFormatTests.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\Csv\CsvConnectionsDeserializerMremotengFormatTests.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\Csv\CsvConnectionsSerializerMremotengFormatTests.cs" />
|
||||
<Compile Include="Config\Serializers\DataTableSerializerTests.cs" />
|
||||
<Compile Include="Config\Serializers\MiscSerializers\PortScanDeserializerTests.cs" />
|
||||
<Compile Include="Config\Serializers\MiscSerializers\PuttyConnectionManagerDeserializerTests.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\XmlConnectionsDeserializerTests.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\Xml\XmlConnectionsDeserializerTests.cs" />
|
||||
<Compile Include="Config\Serializers\MiscSerializers\RemoteDesktopConnectionDeserializerTests.cs" />
|
||||
<Compile Include="Config\Serializers\MiscSerializers\RemoteDesktopConnectionManager27DeserializerTests.cs" />
|
||||
<Compile Include="Config\Serializers\MiscSerializers\RemoteDesktopConnectionManagerDeserializerTests.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\XmlConnectionsDocumentCompilerTests.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\XmlConnectionsDocumentEncryptorTests.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\XmlConnectionsSerializerTests.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\Xml\XmlConnectionsDocumentCompilerTests.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\Xml\XmlConnectionsDocumentEncryptorTests.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\Xml\XmlConnectionsSerializerTests.cs" />
|
||||
<Compile Include="Config\Serializers\CredentialSerializers\XmlCredentialRecordDeserializerTests.cs" />
|
||||
<Compile Include="Config\Serializers\CredentialSerializers\XmlCredentialSerializerTests.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\XmlRootNodeSerializerTests.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\Xml\XmlRootNodeSerializerTests.cs" />
|
||||
<Compile Include="Config\Serializers\Versioning\SqlVersion22To23UpgraderTests.cs" />
|
||||
<Compile Include="Config\Serializers\Versioning\SqlVersion23To24UpgraderTests.cs" />
|
||||
<Compile Include="Config\Serializers\Versioning\SqlVersion24To25UpgraderTests.cs" />
|
||||
@@ -172,7 +174,7 @@
|
||||
<Compile Include="TestHelpers\FileTestHelpers.cs" />
|
||||
<Compile Include="Tools\ExternalToolsArgumentParserTests.cs" />
|
||||
<Compile Include="Tools\FullyObservableCollectionTests.cs" />
|
||||
<Compile Include="Tools\MaybeTests.cs" />
|
||||
<Compile Include="Tools\OptionalTests.cs" />
|
||||
<Compile Include="Tree\ClickHandlers\TreeNodeCompositeClickHandlerTests.cs" />
|
||||
<Compile Include="Tree\ConnectionTreeDragAndDropHandlerTests.cs" />
|
||||
<Compile Include="Tree\ConnectionTreeModelTests.cs" />
|
||||
|
||||
@@ -4,6 +4,8 @@ using System.Windows.Forms;
|
||||
using mRemoteNG.Config.Connections;
|
||||
using mRemoteNG.Config.DataProviders;
|
||||
using mRemoteNG.Config.Serializers;
|
||||
using mRemoteNG.Config.Serializers.Csv;
|
||||
using mRemoteNG.Config.Serializers.Xml;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Security;
|
||||
|
||||
@@ -7,22 +7,10 @@ using mRemoteNG.Connection.Protocol;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Tools;
|
||||
|
||||
|
||||
namespace mRemoteNG.App
|
||||
{
|
||||
public static class Import
|
||||
{
|
||||
private enum FileType
|
||||
{
|
||||
Unknown = 0,
|
||||
// ReSharper disable once InconsistentNaming
|
||||
mRemoteXml,
|
||||
RemoteDesktopConnection,
|
||||
RemoteDesktopConnectionManager,
|
||||
PuttyConnectionManager
|
||||
}
|
||||
|
||||
#region Public Methods
|
||||
public static void ImportFromFile(ContainerInfo importDestinationContainer)
|
||||
{
|
||||
try
|
||||
@@ -34,8 +22,9 @@ namespace mRemoteNG.App
|
||||
openFileDialog.Multiselect = true;
|
||||
|
||||
var fileTypes = new List<string>();
|
||||
fileTypes.AddRange(new[] {Language.strFilterAllImportable, "*.xml;*.rdp;*.rdg;*.dat"});
|
||||
fileTypes.AddRange(new[] {Language.strFilterAllImportable, "*.xml;*.rdp;*.rdg;*.dat;*.csv"});
|
||||
fileTypes.AddRange(new[] {Language.strFiltermRemoteXML, "*.xml"});
|
||||
fileTypes.AddRange(new[] {Language.strFiltermRemoteCSV, "*.csv"});
|
||||
fileTypes.AddRange(new[] {Language.strFilterRDP, "*.rdp"});
|
||||
fileTypes.AddRange(new[] {Language.strFilterRdgFiles, "*.rdg"});
|
||||
fileTypes.AddRange(new[] {Language.strFilterPuttyConnectionManager, "*.dat"});
|
||||
@@ -50,32 +39,14 @@ namespace mRemoteNG.App
|
||||
{
|
||||
try
|
||||
{
|
||||
IConnectionImporter importer;
|
||||
// ReSharper disable once SwitchStatementMissingSomeCases
|
||||
switch (DetermineFileType(fileName))
|
||||
{
|
||||
case FileType.mRemoteXml:
|
||||
importer = new mRemoteNGImporter();
|
||||
break;
|
||||
case FileType.RemoteDesktopConnection:
|
||||
importer = new RemoteDesktopConnectionImporter();
|
||||
break;
|
||||
case FileType.RemoteDesktopConnectionManager:
|
||||
importer = new RemoteDesktopConnectionManagerImporter();
|
||||
break;
|
||||
case FileType.PuttyConnectionManager:
|
||||
importer = new PuttyConnectionManagerImporter();
|
||||
break;
|
||||
default:
|
||||
throw new FileFormatException("Unrecognized file format.");
|
||||
}
|
||||
var importer = BuildConnectionImporterFromFileExtension(fileName);
|
||||
importer.Import(fileName, importDestinationContainer);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(string.Format(Language.strImportFileFailedContent, fileName), Language.strImportFileFailedMainInstruction,
|
||||
MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
|
||||
Runtime.MessageCollector.AddExceptionMessage("App.Import.ImportFromFile() failed:1", ex);
|
||||
Runtime.MessageCollector.AddExceptionMessage("Unable to import file.", ex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,15 +55,15 @@ namespace mRemoteNG.App
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Runtime.MessageCollector.AddExceptionMessage("App.Import.ImportFromFile() failed:2", ex);
|
||||
Runtime.MessageCollector.AddExceptionMessage("Unable to import file.", ex);
|
||||
}
|
||||
}
|
||||
|
||||
public static void ImportFromActiveDirectory(string ldapPath, ContainerInfo importDestinationContainer, bool importSubOU)
|
||||
public static void ImportFromActiveDirectory(string ldapPath, ContainerInfo importDestinationContainer, bool importSubOu)
|
||||
{
|
||||
try
|
||||
{
|
||||
ActiveDirectoryImporter.Import(ldapPath, importDestinationContainer, importSubOU);
|
||||
ActiveDirectoryImporter.Import(ldapPath, importDestinationContainer, importSubOu);
|
||||
Runtime.ConnectionsService.SaveConnectionsAsync();
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -114,25 +85,25 @@ namespace mRemoteNG.App
|
||||
Runtime.MessageCollector.AddExceptionMessage("App.Import.ImportFromPortScan() failed.", ex);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
private static FileType DetermineFileType(string fileName)
|
||||
private static IConnectionImporter<string> BuildConnectionImporterFromFileExtension(string fileName)
|
||||
{
|
||||
// TODO: Use the file contents to determine the file type instead of trusting the extension
|
||||
var extension = Path.GetExtension(fileName);
|
||||
if (extension == null) return FileType.Unknown;
|
||||
var extension = Path.GetExtension(fileName) ?? "";
|
||||
switch (extension.ToLowerInvariant())
|
||||
{
|
||||
case ".xml":
|
||||
return FileType.mRemoteXml;
|
||||
return new MRemoteNGXmlImporter();
|
||||
case ".csv":
|
||||
return new MRemoteNGCsvImporter();
|
||||
case ".rdp":
|
||||
return FileType.RemoteDesktopConnection;
|
||||
return new RemoteDesktopConnectionImporter();
|
||||
case ".rdg":
|
||||
return FileType.RemoteDesktopConnectionManager;
|
||||
return new RemoteDesktopConnectionManagerImporter();
|
||||
case ".dat":
|
||||
return FileType.PuttyConnectionManager;
|
||||
return new PuttyConnectionManagerImporter();
|
||||
default:
|
||||
return FileType.Unknown;
|
||||
throw new FileFormatException("Unrecognized file format.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,7 +147,14 @@ namespace mRemoteNG.App
|
||||
{
|
||||
try
|
||||
{
|
||||
CTaskDialog.ShowTaskDialogBox(GeneralAppInfo.ProductName, Language.ConfigurationFileNotFound, "", "", "", "", "", string.Join(" | ", commandButtons), ETaskDialogButtons.None, ESysIcons.Question, ESysIcons.Question);
|
||||
CTaskDialog.ShowTaskDialogBox(
|
||||
GeneralAppInfo.ProductName,
|
||||
Language.ConnectionFileNotFound,
|
||||
"", "", "", "", "",
|
||||
string.Join(" | ", commandButtons),
|
||||
ETaskDialogButtons.None,
|
||||
ESysIcons.Question,
|
||||
ESysIcons.Question);
|
||||
|
||||
switch (CTaskDialog.CommandButtonResult)
|
||||
{
|
||||
|
||||
@@ -10,7 +10,7 @@ namespace mRemoteNG.Config.Connections
|
||||
/// The previous <see cref="ConnectionTreeModel"/> that is being
|
||||
/// unloaded.
|
||||
/// </summary>
|
||||
public Maybe<ConnectionTreeModel> PreviousConnectionTreeModel { get; }
|
||||
public Optional<ConnectionTreeModel> PreviousConnectionTreeModel { get; }
|
||||
|
||||
/// <summary>
|
||||
/// True if the previous <see cref="ConnectionTreeModel"/> was loaded from
|
||||
@@ -37,7 +37,7 @@ namespace mRemoteNG.Config.Connections
|
||||
public string NewSourcePath { get; }
|
||||
|
||||
public ConnectionsLoadedEventArgs(
|
||||
Maybe<ConnectionTreeModel> previousTreeModelModel, ConnectionTreeModel newTreeModelModel,
|
||||
Optional<ConnectionTreeModel> previousTreeModelModel, ConnectionTreeModel newTreeModelModel,
|
||||
bool previousSourceWasDatabase, bool newSourceIsDatabase,
|
||||
string newSourcePath)
|
||||
{
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using mRemoteNG.App;
|
||||
using mRemoteNG.Config.DataProviders;
|
||||
using mRemoteNG.Config.Serializers;
|
||||
using mRemoteNG.Config.Serializers.Csv;
|
||||
using mRemoteNG.Security;
|
||||
using mRemoteNG.Tree;
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ using mRemoteNG.Config.Serializers;
|
||||
using mRemoteNG.Tools;
|
||||
using mRemoteNG.Tree;
|
||||
using System.IO;
|
||||
using mRemoteNG.Config.Serializers.Xml;
|
||||
|
||||
namespace mRemoteNG.Config.Connections
|
||||
{
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.Linq;
|
||||
using mRemoteNG.App;
|
||||
using mRemoteNG.Config.DataProviders;
|
||||
using mRemoteNG.Config.Serializers;
|
||||
using mRemoteNG.Config.Serializers.Xml;
|
||||
using mRemoteNG.Security;
|
||||
using mRemoteNG.Security.Factories;
|
||||
using mRemoteNG.Tree;
|
||||
|
||||
@@ -20,6 +20,10 @@ namespace mRemoteNG.Config.DataProviders
|
||||
{
|
||||
fileContents = File.ReadAllText(FilePath);
|
||||
}
|
||||
catch (FileNotFoundException ex)
|
||||
{
|
||||
Runtime.MessageCollector.AddExceptionStackTrace($"Could not load file. File does not exist '{FilePath}'", ex);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Runtime.MessageCollector.AddExceptionStackTrace($"Failed to load file {FilePath}", ex);
|
||||
|
||||
@@ -3,24 +3,23 @@ using System.Linq;
|
||||
using mRemoteNG.App;
|
||||
using mRemoteNG.Config.Serializers;
|
||||
using mRemoteNG.Container;
|
||||
|
||||
using mRemoteNG.Tools;
|
||||
|
||||
namespace mRemoteNG.Config.Import
|
||||
{
|
||||
public class ActiveDirectoryImporter : IConnectionImporter
|
||||
public class ActiveDirectoryImporter : IConnectionImporter<string>
|
||||
{
|
||||
public void Import(object ldapPath, ContainerInfo destinationContainer)
|
||||
public void Import(string ldapPath, ContainerInfo destinationContainer)
|
||||
{
|
||||
var ldapPathAsString = ldapPath as string;
|
||||
if (ldapPathAsString == null) return;
|
||||
Import(ldapPathAsString, destinationContainer);
|
||||
Import(ldapPath, destinationContainer, false);
|
||||
}
|
||||
|
||||
public static void Import(string ldapPath, ContainerInfo destinationContainer, bool importSubOU = false)
|
||||
public static void Import(string ldapPath, ContainerInfo destinationContainer, bool importSubOu)
|
||||
{
|
||||
try
|
||||
{
|
||||
var deserializer = new ActiveDirectoryDeserializer(ldapPath, importSubOU);
|
||||
ldapPath.ThrowIfNullOrEmpty(nameof(ldapPath));
|
||||
var deserializer = new ActiveDirectoryDeserializer(ldapPath, importSubOu);
|
||||
var connectionTreeModel = deserializer.Deserialize();
|
||||
var importedRootNode = connectionTreeModel.RootNodes.First();
|
||||
if (importedRootNode == null) return;
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
using mRemoteNG.Container;
|
||||
|
||||
|
||||
namespace mRemoteNG.Config.Import
|
||||
{
|
||||
public interface IConnectionImporter
|
||||
public interface IConnectionImporter<in TSource>
|
||||
where TSource : class
|
||||
{
|
||||
void Import(object source, ContainerInfo destinationContainer);
|
||||
void Import(TSource source, ContainerInfo destinationContainer);
|
||||
}
|
||||
}
|
||||
@@ -1,42 +1,34 @@
|
||||
using System.IO;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using mRemoteNG.App;
|
||||
using mRemoteNG.Config.DataProviders;
|
||||
using mRemoteNG.Config.Serializers;
|
||||
using mRemoteNG.Config.Serializers.Csv;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Messages;
|
||||
|
||||
|
||||
namespace mRemoteNG.Config.Import
|
||||
{
|
||||
// ReSharper disable once InconsistentNaming
|
||||
public class mRemoteNGImporter : IConnectionImporter
|
||||
{
|
||||
public void Import(object filePath, ContainerInfo destinationContainer)
|
||||
{
|
||||
var filePathAsString = filePath as string;
|
||||
if (filePathAsString == null)
|
||||
{
|
||||
public class MRemoteNGCsvImporter : IConnectionImporter<string>
|
||||
{
|
||||
public void Import(string filePath, ContainerInfo destinationContainer)
|
||||
{
|
||||
if (string.IsNullOrEmpty(filePath))
|
||||
{
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, "Unable to import file. File path is null.");
|
||||
return;
|
||||
}
|
||||
|
||||
if(File.Exists(filePathAsString))
|
||||
Import(filePathAsString, destinationContainer);
|
||||
else
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, $"Unable to import file. File does not exist. Path: {filePathAsString}");
|
||||
}
|
||||
if (!File.Exists(filePath))
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, $"Unable to import file. File does not exist. Path: {filePath}");
|
||||
|
||||
public void Import(string fileName, ContainerInfo destinationContainer)
|
||||
{
|
||||
var dataProvider = new FileDataProvider(fileName);
|
||||
var dataProvider = new FileDataProvider(filePath);
|
||||
var xmlString = dataProvider.Load();
|
||||
var xmlConnectionsDeserializer = new XmlConnectionsDeserializer();
|
||||
var connectionTreeModel = xmlConnectionsDeserializer.Deserialize(xmlString, true);
|
||||
var xmlConnectionsDeserializer = new CsvConnectionsDeserializerMremotengFormat();
|
||||
var connectionTreeModel = xmlConnectionsDeserializer.Deserialize(xmlString);
|
||||
|
||||
var rootImportContainer = new ContainerInfo { Name = Path.GetFileNameWithoutExtension(fileName) };
|
||||
var rootImportContainer = new ContainerInfo { Name = Path.GetFileNameWithoutExtension(filePath) };
|
||||
rootImportContainer.AddChildRange(connectionTreeModel.RootNodes.First().Children.ToArray());
|
||||
destinationContainer.AddChild(rootImportContainer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
37
mRemoteV1/Config/Import/MRemoteNGXmlImporter.cs
Normal file
37
mRemoteV1/Config/Import/MRemoteNGXmlImporter.cs
Normal file
@@ -0,0 +1,37 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using mRemoteNG.App;
|
||||
using mRemoteNG.Config.DataProviders;
|
||||
using mRemoteNG.Config.Serializers;
|
||||
using mRemoteNG.Config.Serializers.Xml;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Messages;
|
||||
|
||||
|
||||
namespace mRemoteNG.Config.Import
|
||||
{
|
||||
// ReSharper disable once InconsistentNaming
|
||||
public class MRemoteNGXmlImporter : IConnectionImporter<string>
|
||||
{
|
||||
public void Import(string fileName, ContainerInfo destinationContainer)
|
||||
{
|
||||
if (fileName == null)
|
||||
{
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, "Unable to import file. File path is null.");
|
||||
return;
|
||||
}
|
||||
|
||||
if(!File.Exists(fileName))
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, $"Unable to import file. File does not exist. Path: {fileName}");
|
||||
|
||||
var dataProvider = new FileDataProvider(fileName);
|
||||
var xmlString = dataProvider.Load();
|
||||
var xmlConnectionsDeserializer = new XmlConnectionsDeserializer();
|
||||
var connectionTreeModel = xmlConnectionsDeserializer.Deserialize(xmlString, true);
|
||||
|
||||
var rootImportContainer = new ContainerInfo { Name = Path.GetFileNameWithoutExtension(fileName) };
|
||||
rootImportContainer.AddChildRange(connectionTreeModel.RootNodes.First().Children.ToArray());
|
||||
destinationContainer.AddChild(rootImportContainer);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@ using mRemoteNG.Tools;
|
||||
|
||||
namespace mRemoteNG.Config.Import
|
||||
{
|
||||
public class PortScanImporter : IConnectionImporter
|
||||
public class PortScanImporter : IConnectionImporter<IEnumerable<ScanHost>>
|
||||
{
|
||||
private readonly ProtocolType _targetProtocolType;
|
||||
|
||||
@@ -17,13 +17,6 @@ namespace mRemoteNG.Config.Import
|
||||
_targetProtocolType = targetProtocolType;
|
||||
}
|
||||
|
||||
public void Import(object hosts, ContainerInfo destinationContainer)
|
||||
{
|
||||
var hostsAsEnumerableScanHost = hosts as IEnumerable<ScanHost>;
|
||||
if (hostsAsEnumerableScanHost == null) return;
|
||||
Import(hostsAsEnumerableScanHost, destinationContainer);
|
||||
}
|
||||
|
||||
public void Import(IEnumerable<ScanHost> hosts, ContainerInfo destinationContainer)
|
||||
{
|
||||
var deserializer = new PortScanDeserializer(_targetProtocolType);
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using mRemoteNG.Config.DataProviders;
|
||||
using mRemoteNG.Config.Serializers;
|
||||
@@ -7,17 +6,8 @@ using mRemoteNG.Container;
|
||||
|
||||
namespace mRemoteNG.Config.Import
|
||||
{
|
||||
public class PuttyConnectionManagerImporter : IConnectionImporter
|
||||
public class PuttyConnectionManagerImporter : IConnectionImporter<string>
|
||||
{
|
||||
public void Import(object filePath, ContainerInfo destinationContainer)
|
||||
{
|
||||
var filePathAsString = filePath as string;
|
||||
if (filePathAsString == null)
|
||||
return;
|
||||
if (File.Exists(filePathAsString))
|
||||
Import(filePathAsString, destinationContainer);
|
||||
}
|
||||
|
||||
public void Import(string filePath, ContainerInfo destinationContainer)
|
||||
{
|
||||
var dataProvider = new FileDataProvider(filePath);
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using mRemoteNG.Config.DataProviders;
|
||||
@@ -8,17 +7,8 @@ using mRemoteNG.Container;
|
||||
|
||||
namespace mRemoteNG.Config.Import
|
||||
{
|
||||
public class RemoteDesktopConnectionImporter : IConnectionImporter
|
||||
public class RemoteDesktopConnectionImporter : IConnectionImporter<string>
|
||||
{
|
||||
public void Import(object fileName, ContainerInfo destinationContainer)
|
||||
{
|
||||
var fileNameAsString = fileName as string;
|
||||
if(fileNameAsString == null)
|
||||
return;
|
||||
if (File.Exists(fileNameAsString))
|
||||
Import(fileNameAsString, destinationContainer);
|
||||
}
|
||||
|
||||
public void Import(string fileName, ContainerInfo destinationContainer)
|
||||
{
|
||||
var dataProvider = new FileDataProvider(fileName);
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using mRemoteNG.Config.DataProviders;
|
||||
using mRemoteNG.Config.Serializers;
|
||||
@@ -7,18 +6,9 @@ using mRemoteNG.Container;
|
||||
|
||||
namespace mRemoteNG.Config.Import
|
||||
{
|
||||
public class RemoteDesktopConnectionManagerImporter : IConnectionImporter
|
||||
public class RemoteDesktopConnectionManagerImporter : IConnectionImporter<string>
|
||||
{
|
||||
public void Import(object filePath, ContainerInfo destinationContainer)
|
||||
{
|
||||
var fileNameAsString = filePath as string;
|
||||
if (fileNameAsString == null)
|
||||
return;
|
||||
if (File.Exists(fileNameAsString))
|
||||
Import(fileNameAsString, destinationContainer);
|
||||
}
|
||||
|
||||
private static void Import(string filePath, ContainerInfo destinationContainer)
|
||||
public void Import(string filePath, ContainerInfo destinationContainer)
|
||||
{
|
||||
var dataProvider = new FileDataProvider(filePath);
|
||||
var fileContent = dataProvider.Load();
|
||||
|
||||
@@ -0,0 +1,709 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Connection.Protocol;
|
||||
using mRemoteNG.Connection.Protocol.Http;
|
||||
using mRemoteNG.Connection.Protocol.ICA;
|
||||
using mRemoteNG.Connection.Protocol.RDP;
|
||||
using mRemoteNG.Connection.Protocol.VNC;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Tree;
|
||||
using mRemoteNG.Tree.Root;
|
||||
|
||||
namespace mRemoteNG.Config.Serializers.Csv
|
||||
{
|
||||
public class CsvConnectionsDeserializerMremotengFormat : IDeserializer<string, ConnectionTreeModel>
|
||||
{
|
||||
public ConnectionTreeModel Deserialize(string serializedData)
|
||||
{
|
||||
var lines = serializedData.Split(new []{"\r\n", "\r", "\n"}, StringSplitOptions.RemoveEmptyEntries);
|
||||
var csvHeaders = new List<string>();
|
||||
// used to map a connectioninfo to it's parent's GUID
|
||||
var parentMapping = new Dictionary<ConnectionInfo, string>();
|
||||
|
||||
for (var lineNumber = 0; lineNumber < lines.Length; lineNumber++)
|
||||
{
|
||||
var line = lines[lineNumber].Split(';');
|
||||
if (lineNumber == 0)
|
||||
csvHeaders = line.ToList();
|
||||
else
|
||||
{
|
||||
var connectionInfo = ParseConnectionInfo(csvHeaders, line);
|
||||
parentMapping.Add(connectionInfo, line[csvHeaders.IndexOf("Parent")]);
|
||||
}
|
||||
}
|
||||
|
||||
var root = CreateTreeStructure(parentMapping);
|
||||
var connectionTreeModel = new ConnectionTreeModel();
|
||||
connectionTreeModel.AddRootNode(root);
|
||||
return connectionTreeModel;
|
||||
}
|
||||
|
||||
private RootNodeInfo CreateTreeStructure(Dictionary<ConnectionInfo, string> parentMapping)
|
||||
{
|
||||
var root = new RootNodeInfo(RootNodeType.Connection);
|
||||
|
||||
foreach (var node in parentMapping)
|
||||
{
|
||||
// no parent mapped, add to root
|
||||
if (string.IsNullOrEmpty(node.Value))
|
||||
root.AddChild(node.Key);
|
||||
|
||||
// search for parent in the list by GUID
|
||||
var parent = parentMapping
|
||||
.Keys
|
||||
.OfType<ContainerInfo>()
|
||||
.FirstOrDefault(info => info.ConstantID == node.Value);
|
||||
|
||||
if (parent != null)
|
||||
{
|
||||
parent.AddChild(node.Key);
|
||||
}
|
||||
else
|
||||
{
|
||||
root.AddChild(node.Key);
|
||||
}
|
||||
}
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
private ConnectionInfo ParseConnectionInfo(IList<string> headers, string[] connectionCsv)
|
||||
{
|
||||
var nodeType = headers.Contains("NodeType")
|
||||
? (TreeNodeType)Enum.Parse(typeof(TreeNodeType), connectionCsv[headers.IndexOf("NodeType")], true)
|
||||
: TreeNodeType.Connection;
|
||||
|
||||
var nodeId = headers.Contains("Id")
|
||||
? connectionCsv[headers.IndexOf("Id")]
|
||||
: Guid.NewGuid().ToString();
|
||||
|
||||
var connectionRecord = nodeType == TreeNodeType.Connection
|
||||
? new ConnectionInfo(nodeId)
|
||||
: new ContainerInfo(nodeId);
|
||||
|
||||
connectionRecord.Name = headers.Contains("Name") ? connectionCsv[headers.IndexOf("Name")] : "";
|
||||
connectionRecord.Description = headers.Contains("Description") ? connectionCsv[headers.IndexOf("Description")] : "";
|
||||
connectionRecord.Icon = headers.Contains("Icon") ? connectionCsv[headers.IndexOf("Icon")] : "";
|
||||
connectionRecord.Panel = headers.Contains("Panel") ? connectionCsv[headers.IndexOf("Panel")] : "";
|
||||
connectionRecord.Username = headers.Contains("Username") ? connectionCsv[headers.IndexOf("Username")] : "";
|
||||
connectionRecord.Password = headers.Contains("Password") ? connectionCsv[headers.IndexOf("Password")] : "";
|
||||
connectionRecord.Domain = headers.Contains("Domain") ? connectionCsv[headers.IndexOf("Domain")] : "";
|
||||
connectionRecord.Hostname = headers.Contains("Hostname") ? connectionCsv[headers.IndexOf("Hostname")] : "";
|
||||
connectionRecord.PuttySession = headers.Contains("PuttySession") ? connectionCsv[headers.IndexOf("PuttySession")] : "";
|
||||
connectionRecord.LoadBalanceInfo = headers.Contains("LoadBalanceInfo") ? connectionCsv[headers.IndexOf("LoadBalanceInfo")] : "";
|
||||
connectionRecord.PreExtApp = headers.Contains("PreExtApp") ? connectionCsv[headers.IndexOf("PreExtApp")] : "";
|
||||
connectionRecord.PostExtApp = headers.Contains("PostExtApp") ? connectionCsv[headers.IndexOf("PostExtApp")] : "";
|
||||
connectionRecord.MacAddress = headers.Contains("MacAddress") ? connectionCsv[headers.IndexOf("MacAddress")] : "";
|
||||
connectionRecord.UserField = headers.Contains("UserField") ? connectionCsv[headers.IndexOf("UserField")] : "";
|
||||
connectionRecord.ExtApp = headers.Contains("ExtApp") ? connectionCsv[headers.IndexOf("ExtApp")] : "";
|
||||
connectionRecord.VNCProxyUsername = headers.Contains("VNCProxyUsername") ? connectionCsv[headers.IndexOf("VNCProxyUsername")] : "";
|
||||
connectionRecord.VNCProxyPassword = headers.Contains("VNCProxyPassword") ? connectionCsv[headers.IndexOf("VNCProxyPassword")] : "";
|
||||
connectionRecord.RDGatewayUsername = headers.Contains("RDGatewayUsername") ? connectionCsv[headers.IndexOf("RDGatewayUsername")] : "";
|
||||
connectionRecord.RDGatewayPassword = headers.Contains("RDGatewayPassword") ? connectionCsv[headers.IndexOf("RDGatewayPassword")] : "";
|
||||
connectionRecord.RDGatewayDomain = headers.Contains("RDGatewayDomain") ? connectionCsv[headers.IndexOf("RDGatewayDomain")] : "";
|
||||
connectionRecord.VNCProxyIP = headers.Contains("VNCProxyIP") ? connectionCsv[headers.IndexOf("VNCProxyIP")] : "";
|
||||
connectionRecord.RDGatewayHostname = headers.Contains("RDGatewayHostname") ? connectionCsv[headers.IndexOf("RDGatewayHostname")] : "";
|
||||
|
||||
if (headers.Contains("Protocol"))
|
||||
{
|
||||
ProtocolType protocolType;
|
||||
if (Enum.TryParse(connectionCsv[headers.IndexOf("Protocol")], out protocolType))
|
||||
connectionRecord.Protocol = protocolType;
|
||||
}
|
||||
|
||||
if (headers.Contains("Port"))
|
||||
{
|
||||
int port;
|
||||
if (int.TryParse(connectionCsv[headers.IndexOf("Port")], out port))
|
||||
connectionRecord.Port = port;
|
||||
}
|
||||
|
||||
if (headers.Contains("ConnectToConsole"))
|
||||
{
|
||||
bool useConsoleSession;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("ConnectToConsole")], out useConsoleSession))
|
||||
connectionRecord.UseConsoleSession = useConsoleSession;
|
||||
}
|
||||
|
||||
if (headers.Contains("UseCredSsp"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("UseCredSsp")], out value))
|
||||
connectionRecord.UseCredSsp = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("RenderingEngine"))
|
||||
{
|
||||
HTTPBase.RenderingEngine value;
|
||||
if (Enum.TryParse(connectionCsv[headers.IndexOf("RenderingEngine")], out value))
|
||||
connectionRecord.RenderingEngine = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("ICAEncryptionStrength"))
|
||||
{
|
||||
IcaProtocol.EncryptionStrength value;
|
||||
if (Enum.TryParse(connectionCsv[headers.IndexOf("ICAEncryptionStrength")], out value))
|
||||
connectionRecord.ICAEncryptionStrength = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("RDPAuthenticationLevel"))
|
||||
{
|
||||
RdpProtocol.AuthenticationLevel value;
|
||||
if (Enum.TryParse(connectionCsv[headers.IndexOf("RDPAuthenticationLevel")], out value))
|
||||
connectionRecord.RDPAuthenticationLevel = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("Colors"))
|
||||
{
|
||||
RdpProtocol.RDPColors value;
|
||||
if (Enum.TryParse(connectionCsv[headers.IndexOf("Colors")], out value))
|
||||
connectionRecord.Colors = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("Resolution"))
|
||||
{
|
||||
RdpProtocol.RDPResolutions value;
|
||||
if (Enum.TryParse(connectionCsv[headers.IndexOf("Resolution")], out value))
|
||||
connectionRecord.Resolution = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("AutomaticResize"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("AutomaticResize")], out value))
|
||||
connectionRecord.AutomaticResize = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("DisplayWallpaper"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("DisplayWallpaper")], out value))
|
||||
connectionRecord.DisplayWallpaper = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("DisplayThemes"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("DisplayThemes")], out value))
|
||||
connectionRecord.DisplayThemes = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("EnableFontSmoothing"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("EnableFontSmoothing")], out value))
|
||||
connectionRecord.EnableFontSmoothing = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("EnableDesktopComposition"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("EnableDesktopComposition")], out value))
|
||||
connectionRecord.EnableDesktopComposition = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("CacheBitmaps"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("CacheBitmaps")], out value))
|
||||
connectionRecord.CacheBitmaps = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("RedirectDiskDrives"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("RedirectDiskDrives")], out value))
|
||||
connectionRecord.RedirectDiskDrives = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("RedirectPorts"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("RedirectPorts")], out value))
|
||||
connectionRecord.RedirectPorts = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("RedirectPrinters"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("RedirectPrinters")], out value))
|
||||
connectionRecord.RedirectPrinters = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("RedirectSmartCards"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("RedirectSmartCards")], out value))
|
||||
connectionRecord.RedirectSmartCards = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("RedirectSound"))
|
||||
{
|
||||
RdpProtocol.RDPSounds value;
|
||||
if (Enum.TryParse(connectionCsv[headers.IndexOf("RedirectSound")], out value))
|
||||
connectionRecord.RedirectSound = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("RedirectKeys"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("RedirectKeys")], out value))
|
||||
connectionRecord.RedirectKeys = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("VNCCompression"))
|
||||
{
|
||||
ProtocolVNC.Compression value;
|
||||
if (Enum.TryParse(connectionCsv[headers.IndexOf("VNCCompression")], out value))
|
||||
connectionRecord.VNCCompression = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("VNCEncoding"))
|
||||
{
|
||||
ProtocolVNC.Encoding value;
|
||||
if (Enum.TryParse(connectionCsv[headers.IndexOf("VNCEncoding")], out value))
|
||||
connectionRecord.VNCEncoding = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("VNCAuthMode"))
|
||||
{
|
||||
ProtocolVNC.AuthMode value;
|
||||
if (Enum.TryParse(connectionCsv[headers.IndexOf("VNCAuthMode")], out value))
|
||||
connectionRecord.VNCAuthMode = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("VNCProxyType"))
|
||||
{
|
||||
ProtocolVNC.ProxyType value;
|
||||
if (Enum.TryParse(connectionCsv[headers.IndexOf("VNCProxyType")], out value))
|
||||
connectionRecord.VNCProxyType = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("VNCProxyPort"))
|
||||
{
|
||||
int value;
|
||||
if (int.TryParse(connectionCsv[headers.IndexOf("VNCProxyPort")], out value))
|
||||
connectionRecord.VNCProxyPort = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("VNCColors"))
|
||||
{
|
||||
ProtocolVNC.Colors value;
|
||||
if (Enum.TryParse(connectionCsv[headers.IndexOf("VNCColors")], out value))
|
||||
connectionRecord.VNCColors = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("VNCSmartSizeMode"))
|
||||
{
|
||||
ProtocolVNC.SmartSizeMode value;
|
||||
if (Enum.TryParse(connectionCsv[headers.IndexOf("VNCSmartSizeMode")], out value))
|
||||
connectionRecord.VNCSmartSizeMode = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("VNCViewOnly"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("VNCViewOnly")], out value))
|
||||
connectionRecord.VNCViewOnly = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("RDGatewayUsageMethod"))
|
||||
{
|
||||
RdpProtocol.RDGatewayUsageMethod value;
|
||||
if (Enum.TryParse(connectionCsv[headers.IndexOf("RDGatewayUsageMethod")], out value))
|
||||
connectionRecord.RDGatewayUsageMethod = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("RDGatewayUseConnectionCredentials"))
|
||||
{
|
||||
RdpProtocol.RDGatewayUseConnectionCredentials value;
|
||||
if (Enum.TryParse(connectionCsv[headers.IndexOf("RDGatewayUseConnectionCredentials")], out value))
|
||||
connectionRecord.RDGatewayUseConnectionCredentials = value;
|
||||
}
|
||||
|
||||
#region Inheritance
|
||||
if (headers.Contains("InheritCacheBitmaps"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritCacheBitmaps")], out value))
|
||||
connectionRecord.Inheritance.CacheBitmaps = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritColors"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritColors")], out value))
|
||||
connectionRecord.Inheritance.Colors = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritDescription"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritDescription")], out value))
|
||||
connectionRecord.Inheritance.Description = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritDisplayThemes"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritDisplayThemes")], out value))
|
||||
connectionRecord.Inheritance.DisplayThemes = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritDisplayWallpaper"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritDisplayWallpaper")], out value))
|
||||
connectionRecord.Inheritance.DisplayWallpaper = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritEnableFontSmoothing"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritEnableFontSmoothing")], out value))
|
||||
connectionRecord.Inheritance.EnableFontSmoothing = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritEnableDesktopComposition"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritEnableDesktopComposition")], out value))
|
||||
connectionRecord.Inheritance.EnableDesktopComposition = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritDomain"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritDomain")], out value))
|
||||
connectionRecord.Inheritance.Domain = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritIcon"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritIcon")], out value))
|
||||
connectionRecord.Inheritance.Icon = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritPanel"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritPanel")], out value))
|
||||
connectionRecord.Inheritance.Panel = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritPassword"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritPassword")], out value))
|
||||
connectionRecord.Inheritance.Password = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritPort"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritPort")], out value))
|
||||
connectionRecord.Inheritance.Port = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritProtocol"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritProtocol")], out value))
|
||||
connectionRecord.Inheritance.Protocol = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritPuttySession"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritPuttySession")], out value))
|
||||
connectionRecord.Inheritance.PuttySession = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritRedirectDiskDrives"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritRedirectDiskDrives")], out value))
|
||||
connectionRecord.Inheritance.RedirectDiskDrives = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritRedirectKeys"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritRedirectKeys")], out value))
|
||||
connectionRecord.Inheritance.RedirectKeys = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritRedirectPorts"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritRedirectPorts")], out value))
|
||||
connectionRecord.Inheritance.RedirectPorts = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritRedirectPrinters"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritRedirectPrinters")], out value))
|
||||
connectionRecord.Inheritance.RedirectPrinters = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritRedirectSmartCards"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritRedirectSmartCards")], out value))
|
||||
connectionRecord.Inheritance.RedirectSmartCards = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritRedirectSound"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritRedirectSound")], out value))
|
||||
connectionRecord.Inheritance.RedirectSound = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritResolution"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritResolution")], out value))
|
||||
connectionRecord.Inheritance.Resolution = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritAutomaticResize"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritAutomaticResize")], out value))
|
||||
connectionRecord.Inheritance.AutomaticResize = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritUseConsoleSession"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritUseConsoleSession")], out value))
|
||||
connectionRecord.Inheritance.UseConsoleSession = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritUseCredSsp"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritUseCredSsp")], out value))
|
||||
connectionRecord.Inheritance.UseCredSsp = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritRenderingEngine"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritRenderingEngine")], out value))
|
||||
connectionRecord.Inheritance.RenderingEngine = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritUsername"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritUsername")], out value))
|
||||
connectionRecord.Inheritance.Username = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritICAEncryptionStrength"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritICAEncryptionStrength")], out value))
|
||||
connectionRecord.Inheritance.ICAEncryptionStrength = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritRDPAuthenticationLevel"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritRDPAuthenticationLevel")], out value))
|
||||
connectionRecord.Inheritance.RDPAuthenticationLevel = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritLoadBalanceInfo"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritLoadBalanceInfo")], out value))
|
||||
connectionRecord.Inheritance.LoadBalanceInfo = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritPreExtApp"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritPreExtApp")], out value))
|
||||
connectionRecord.Inheritance.PreExtApp = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritPostExtApp"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritPostExtApp")], out value))
|
||||
connectionRecord.Inheritance.PostExtApp = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritMacAddress"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritMacAddress")], out value))
|
||||
connectionRecord.Inheritance.MacAddress = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritUserField"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritUserField")], out value))
|
||||
connectionRecord.Inheritance.UserField = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritExtApp"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritExtApp")], out value))
|
||||
connectionRecord.Inheritance.ExtApp = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritVNCCompression"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritVNCCompression")], out value))
|
||||
connectionRecord.Inheritance.VNCCompression = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritVNCEncoding"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritVNCEncoding")], out value))
|
||||
connectionRecord.Inheritance.VNCEncoding = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritVNCAuthMode"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritVNCAuthMode")], out value))
|
||||
connectionRecord.Inheritance.VNCAuthMode = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritVNCProxyType"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritVNCProxyType")], out value))
|
||||
connectionRecord.Inheritance.VNCProxyType = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritVNCProxyIP"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritVNCProxyIP")], out value))
|
||||
connectionRecord.Inheritance.VNCProxyIP = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritVNCProxyPort"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritVNCProxyPort")], out value))
|
||||
connectionRecord.Inheritance.VNCProxyPort = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritVNCProxyUsername"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritVNCProxyUsername")], out value))
|
||||
connectionRecord.Inheritance.VNCProxyUsername = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritVNCProxyPassword"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritVNCProxyPassword")], out value))
|
||||
connectionRecord.Inheritance.VNCProxyPassword = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritVNCColors"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritVNCColors")], out value))
|
||||
connectionRecord.Inheritance.VNCColors = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritVNCSmartSizeMode"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritVNCSmartSizeMode")], out value))
|
||||
connectionRecord.Inheritance.VNCSmartSizeMode = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritVNCViewOnly"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritVNCViewOnly")], out value))
|
||||
connectionRecord.Inheritance.VNCViewOnly = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritRDGatewayUsageMethod"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritRDGatewayUsageMethod")], out value))
|
||||
connectionRecord.Inheritance.RDGatewayUsageMethod = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritRDGatewayHostname"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritRDGatewayHostname")], out value))
|
||||
connectionRecord.Inheritance.RDGatewayHostname = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritRDGatewayUseConnectionCredentials"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritRDGatewayUseConnectionCredentials")], out value))
|
||||
connectionRecord.Inheritance.RDGatewayUseConnectionCredentials = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritRDGatewayUsername"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritRDGatewayUsername")], out value))
|
||||
connectionRecord.Inheritance.RDGatewayUsername = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritRDGatewayPassword"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritRDGatewayPassword")], out value))
|
||||
connectionRecord.Inheritance.RDGatewayPassword = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritRDGatewayDomain"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritRDGatewayDomain")], out value))
|
||||
connectionRecord.Inheritance.RDGatewayDomain = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritRDPAlertIdleTimeout"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritRDPAlertIdleTimeout")], out value))
|
||||
connectionRecord.Inheritance.RDPAlertIdleTimeout = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritRDPMinutesToIdleTimeout"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritRDPMinutesToIdleTimeout")], out value))
|
||||
connectionRecord.Inheritance.RDPMinutesToIdleTimeout = value;
|
||||
}
|
||||
|
||||
if (headers.Contains("InheritSoundQuality"))
|
||||
{
|
||||
bool value;
|
||||
if (bool.TryParse(connectionCsv[headers.IndexOf("InheritSoundQuality")], out value))
|
||||
connectionRecord.Inheritance.SoundQuality = value;
|
||||
}
|
||||
#endregion
|
||||
|
||||
return connectionRecord;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,220 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Credential;
|
||||
using mRemoteNG.Security;
|
||||
using mRemoteNG.Tools;
|
||||
using mRemoteNG.Tree;
|
||||
using mRemoteNG.Tree.Root;
|
||||
|
||||
namespace mRemoteNG.Config.Serializers.Csv
|
||||
{
|
||||
public class CsvConnectionsSerializerMremotengFormat : ISerializer<ConnectionInfo,string>
|
||||
{
|
||||
private readonly SaveFilter _saveFilter;
|
||||
private readonly ICredentialRepositoryList _credentialRepositoryList;
|
||||
|
||||
|
||||
public CsvConnectionsSerializerMremotengFormat(SaveFilter saveFilter, ICredentialRepositoryList credentialRepositoryList)
|
||||
{
|
||||
saveFilter.ThrowIfNull(nameof(saveFilter));
|
||||
credentialRepositoryList.ThrowIfNull(nameof(credentialRepositoryList));
|
||||
|
||||
_saveFilter = saveFilter;
|
||||
_credentialRepositoryList = credentialRepositoryList;
|
||||
}
|
||||
|
||||
public string Serialize(ConnectionTreeModel connectionTreeModel)
|
||||
{
|
||||
connectionTreeModel.ThrowIfNull(nameof(connectionTreeModel));
|
||||
|
||||
var rootNode = connectionTreeModel.RootNodes.First(node => node is RootNodeInfo);
|
||||
return Serialize(rootNode);
|
||||
}
|
||||
|
||||
public string Serialize(ConnectionInfo serializationTarget)
|
||||
{
|
||||
serializationTarget.ThrowIfNull(nameof(serializationTarget));
|
||||
var sb = new StringBuilder();
|
||||
|
||||
WriteCsvHeader(sb);
|
||||
SerializeNodesRecursive(serializationTarget, sb);
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
private void WriteCsvHeader(StringBuilder sb)
|
||||
{
|
||||
sb.Append("Name;Id;Parent;NodeType;Description;Icon;Panel;");
|
||||
if (_saveFilter.SaveUsername)
|
||||
sb.Append("Username;");
|
||||
if (_saveFilter.SavePassword)
|
||||
sb.Append("Password;");
|
||||
if (_saveFilter.SaveDomain)
|
||||
sb.Append("Domain;");
|
||||
sb.Append("Hostname;Protocol;PuttySession;Port;ConnectToConsole;UseCredSsp;RenderingEngine;ICAEncryptionStrength;RDPAuthenticationLevel;LoadBalanceInfo;Colors;Resolution;AutomaticResize;DisplayWallpaper;DisplayThemes;EnableFontSmoothing;EnableDesktopComposition;CacheBitmaps;RedirectDiskDrives;RedirectPorts;RedirectPrinters;RedirectSmartCards;RedirectSound;RedirectKeys;PreExtApp;PostExtApp;MacAddress;UserField;ExtApp;VNCCompression;VNCEncoding;VNCAuthMode;VNCProxyType;VNCProxyIP;VNCProxyPort;VNCProxyUsername;VNCProxyPassword;VNCColors;VNCSmartSizeMode;VNCViewOnly;RDGatewayUsageMethod;RDGatewayHostname;RDGatewayUseConnectionCredentials;RDGatewayUsername;RDGatewayPassword;RDGatewayDomain;");
|
||||
if (_saveFilter.SaveInheritance)
|
||||
sb.Append("InheritCacheBitmaps;InheritColors;InheritDescription;InheritDisplayThemes;InheritDisplayWallpaper;InheritEnableFontSmoothing;InheritEnableDesktopComposition;InheritDomain;InheritIcon;InheritPanel;InheritPassword;InheritPort;InheritProtocol;InheritPuttySession;InheritRedirectDiskDrives;InheritRedirectKeys;InheritRedirectPorts;InheritRedirectPrinters;InheritRedirectSmartCards;InheritRedirectSound;InheritResolution;InheritAutomaticResize;InheritUseConsoleSession;InheritUseCredSsp;InheritRenderingEngine;InheritUsername;InheritICAEncryptionStrength;InheritRDPAuthenticationLevel;InheritLoadBalanceInfo;InheritPreExtApp;InheritPostExtApp;InheritMacAddress;InheritUserField;InheritExtApp;InheritVNCCompression;InheritVNCEncoding;InheritVNCAuthMode;InheritVNCProxyType;InheritVNCProxyIP;InheritVNCProxyPort;InheritVNCProxyUsername;InheritVNCProxyPassword;InheritVNCColors;InheritVNCSmartSizeMode;InheritVNCViewOnly;InheritRDGatewayUsageMethod;InheritRDGatewayHostname;InheritRDGatewayUseConnectionCredentials;InheritRDGatewayUsername;InheritRDGatewayPassword;InheritRDGatewayDomain;InheritRDPAlertIdleTimeout;InheritRDPMinutesToIdleTimeout;InheritSoundQuality");
|
||||
}
|
||||
|
||||
private void SerializeNodesRecursive(ConnectionInfo node, StringBuilder sb)
|
||||
{
|
||||
var nodeAsContainer = node as ContainerInfo;
|
||||
if (nodeAsContainer != null)
|
||||
{
|
||||
foreach (var child in nodeAsContainer.Children)
|
||||
{
|
||||
SerializeNodesRecursive(child, sb);
|
||||
}
|
||||
}
|
||||
|
||||
// dont serialize the root node
|
||||
if (node is RootNodeInfo)
|
||||
return;
|
||||
|
||||
SerializeConnectionInfo(node, sb);
|
||||
}
|
||||
|
||||
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(";");
|
||||
|
||||
if (_saveFilter.SaveUsername)
|
||||
sb.Append($"{CleanStringForCsv(con.Username)};");
|
||||
|
||||
if (_saveFilter.SavePassword)
|
||||
sb.Append($"{CleanStringForCsv(con.Password)};");
|
||||
|
||||
if (_saveFilter.SaveDomain)
|
||||
sb.Append($"{CleanStringForCsv(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(";");
|
||||
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove text that is unsafe for use in CSV files
|
||||
/// </summary>
|
||||
/// <param name="text"></param>
|
||||
private string CleanStringForCsv(object text)
|
||||
{
|
||||
return text.ToString().Replace(";", "");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,8 +5,7 @@ using mRemoteNG.Connection;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Security;
|
||||
|
||||
|
||||
namespace mRemoteNG.Config.Serializers
|
||||
namespace mRemoteNG.Config.Serializers.Xml
|
||||
{
|
||||
// ReSharper disable once InconsistentNaming
|
||||
public class XmlConnectionNodeSerializer26 : ISerializer<ConnectionInfo,XElement>
|
||||
@@ -43,7 +42,7 @@ namespace mRemoteNG.Config.Serializers
|
||||
element.Add(new XAttribute("Name", connectionInfo.Name));
|
||||
element.Add(new XAttribute("Type", connectionInfo.GetTreeNodeType().ToString()));
|
||||
if (nodeAsContainer != null)
|
||||
element.Add(new XAttribute("Expanded", nodeAsContainer.IsExpanded.ToString()));
|
||||
element.Add(new XAttribute("Expanded", nodeAsContainer.IsExpanded.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("Descr", connectionInfo.Description));
|
||||
element.Add(new XAttribute("Icon", connectionInfo.Icon));
|
||||
element.Add(new XAttribute("Panel", connectionInfo.Panel));
|
||||
@@ -66,30 +65,30 @@ namespace mRemoteNG.Config.Serializers
|
||||
element.Add(new XAttribute("Protocol", connectionInfo.Protocol));
|
||||
element.Add(new XAttribute("PuttySession", connectionInfo.PuttySession));
|
||||
element.Add(new XAttribute("Port", connectionInfo.Port));
|
||||
element.Add(new XAttribute("ConnectToConsole", connectionInfo.UseConsoleSession.ToString()));
|
||||
element.Add(new XAttribute("UseCredSsp", connectionInfo.UseCredSsp.ToString()));
|
||||
element.Add(new XAttribute("ConnectToConsole", connectionInfo.UseConsoleSession.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("UseCredSsp", connectionInfo.UseCredSsp.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("RenderingEngine", connectionInfo.RenderingEngine));
|
||||
element.Add(new XAttribute("ICAEncryptionStrength", connectionInfo.ICAEncryptionStrength));
|
||||
element.Add(new XAttribute("RDPAuthenticationLevel", connectionInfo.RDPAuthenticationLevel));
|
||||
element.Add(new XAttribute("RDPMinutesToIdleTimeout", connectionInfo.RDPMinutesToIdleTimeout));
|
||||
element.Add(new XAttribute("RDPAlertIdleTimeout", connectionInfo.RDPAlertIdleTimeout));
|
||||
element.Add(new XAttribute("RDPAlertIdleTimeout", connectionInfo.RDPAlertIdleTimeout.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("LoadBalanceInfo", connectionInfo.LoadBalanceInfo));
|
||||
element.Add(new XAttribute("Colors", connectionInfo.Colors));
|
||||
element.Add(new XAttribute("Resolution", connectionInfo.Resolution));
|
||||
element.Add(new XAttribute("AutomaticResize", connectionInfo.AutomaticResize.ToString()));
|
||||
element.Add(new XAttribute("DisplayWallpaper", connectionInfo.DisplayWallpaper.ToString()));
|
||||
element.Add(new XAttribute("DisplayThemes", connectionInfo.DisplayThemes.ToString()));
|
||||
element.Add(new XAttribute("EnableFontSmoothing", connectionInfo.EnableFontSmoothing.ToString()));
|
||||
element.Add(new XAttribute("EnableDesktopComposition", connectionInfo.EnableDesktopComposition.ToString()));
|
||||
element.Add(new XAttribute("CacheBitmaps", connectionInfo.CacheBitmaps.ToString()));
|
||||
element.Add(new XAttribute("RedirectDiskDrives", connectionInfo.RedirectDiskDrives.ToString()));
|
||||
element.Add(new XAttribute("RedirectPorts", connectionInfo.RedirectPorts.ToString()));
|
||||
element.Add(new XAttribute("RedirectPrinters", connectionInfo.RedirectPrinters.ToString()));
|
||||
element.Add(new XAttribute("RedirectSmartCards", connectionInfo.RedirectSmartCards.ToString()));
|
||||
element.Add(new XAttribute("AutomaticResize", connectionInfo.AutomaticResize.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("DisplayWallpaper", connectionInfo.DisplayWallpaper.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("DisplayThemes", connectionInfo.DisplayThemes.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("EnableFontSmoothing", connectionInfo.EnableFontSmoothing.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("EnableDesktopComposition", connectionInfo.EnableDesktopComposition.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("CacheBitmaps", connectionInfo.CacheBitmaps.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("RedirectDiskDrives", connectionInfo.RedirectDiskDrives.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("RedirectPorts", connectionInfo.RedirectPorts.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("RedirectPrinters", connectionInfo.RedirectPrinters.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("RedirectSmartCards", connectionInfo.RedirectSmartCards.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("RedirectSound", connectionInfo.RedirectSound.ToString()));
|
||||
element.Add(new XAttribute("SoundQuality", connectionInfo.SoundQuality.ToString()));
|
||||
element.Add(new XAttribute("RedirectKeys", connectionInfo.RedirectKeys.ToString()));
|
||||
element.Add(new XAttribute("Connected", (connectionInfo.OpenConnections.Count > 0).ToString()));
|
||||
element.Add(new XAttribute("RedirectKeys", connectionInfo.RedirectKeys.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("Connected", (connectionInfo.OpenConnections.Count > 0).ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("PreExtApp", connectionInfo.PreExtApp));
|
||||
element.Add(new XAttribute("PostExtApp", connectionInfo.PostExtApp));
|
||||
element.Add(new XAttribute("MacAddress", connectionInfo.MacAddress));
|
||||
@@ -113,7 +112,7 @@ namespace mRemoteNG.Config.Serializers
|
||||
|
||||
element.Add(new XAttribute("VNCColors", connectionInfo.VNCColors));
|
||||
element.Add(new XAttribute("VNCSmartSizeMode", connectionInfo.VNCSmartSizeMode));
|
||||
element.Add(new XAttribute("VNCViewOnly", connectionInfo.VNCViewOnly.ToString()));
|
||||
element.Add(new XAttribute("VNCViewOnly", connectionInfo.VNCViewOnly.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("RDGatewayUsageMethod", connectionInfo.RDGatewayUsageMethod));
|
||||
element.Add(new XAttribute("RDGatewayHostname", connectionInfo.RDGatewayHostname));
|
||||
element.Add(new XAttribute("RDGatewayUseConnectionCredentials", connectionInfo.RDGatewayUseConnectionCredentials));
|
||||
@@ -136,117 +135,118 @@ namespace mRemoteNG.Config.Serializers
|
||||
{
|
||||
if (_saveFilter.SaveInheritance)
|
||||
{
|
||||
element.Add(new XAttribute("InheritCacheBitmaps", connectionInfo.Inheritance.CacheBitmaps.ToString()));
|
||||
element.Add(new XAttribute("InheritColors", connectionInfo.Inheritance.Colors.ToString()));
|
||||
element.Add(new XAttribute("InheritDescription", connectionInfo.Inheritance.Description.ToString()));
|
||||
element.Add(new XAttribute("InheritDisplayThemes", connectionInfo.Inheritance.DisplayThemes.ToString()));
|
||||
element.Add(new XAttribute("InheritDisplayWallpaper", connectionInfo.Inheritance.DisplayWallpaper.ToString()));
|
||||
element.Add(new XAttribute("InheritEnableFontSmoothing", connectionInfo.Inheritance.EnableFontSmoothing.ToString()));
|
||||
element.Add(new XAttribute("InheritEnableDesktopComposition", connectionInfo.Inheritance.EnableDesktopComposition.ToString()));
|
||||
element.Add(new XAttribute("InheritDomain", connectionInfo.Inheritance.Domain.ToString()));
|
||||
element.Add(new XAttribute("InheritIcon", connectionInfo.Inheritance.Icon.ToString()));
|
||||
element.Add(new XAttribute("InheritPanel", connectionInfo.Inheritance.Panel.ToString()));
|
||||
element.Add(new XAttribute("InheritPassword", connectionInfo.Inheritance.Password.ToString()));
|
||||
element.Add(new XAttribute("InheritPort", connectionInfo.Inheritance.Port.ToString()));
|
||||
element.Add(new XAttribute("InheritProtocol", connectionInfo.Inheritance.Protocol.ToString()));
|
||||
element.Add(new XAttribute("InheritPuttySession", connectionInfo.Inheritance.PuttySession.ToString()));
|
||||
element.Add(new XAttribute("InheritRedirectDiskDrives", connectionInfo.Inheritance.RedirectDiskDrives.ToString()));
|
||||
element.Add(new XAttribute("InheritRedirectKeys", connectionInfo.Inheritance.RedirectKeys.ToString()));
|
||||
element.Add(new XAttribute("InheritRedirectPorts", connectionInfo.Inheritance.RedirectPorts.ToString()));
|
||||
element.Add(new XAttribute("InheritRedirectPrinters", connectionInfo.Inheritance.RedirectPrinters.ToString()));
|
||||
element.Add(new XAttribute("InheritRedirectSmartCards", connectionInfo.Inheritance.RedirectSmartCards.ToString()));
|
||||
element.Add(new XAttribute("InheritRedirectSound", connectionInfo.Inheritance.RedirectSound.ToString()));
|
||||
element.Add(new XAttribute("InheritSoundQuality", connectionInfo.Inheritance.SoundQuality.ToString()));
|
||||
element.Add(new XAttribute("InheritResolution", connectionInfo.Inheritance.Resolution.ToString()));
|
||||
element.Add(new XAttribute("InheritAutomaticResize", connectionInfo.Inheritance.AutomaticResize.ToString()));
|
||||
element.Add(new XAttribute("InheritUseConsoleSession", connectionInfo.Inheritance.UseConsoleSession.ToString()));
|
||||
element.Add(new XAttribute("InheritUseCredSsp", connectionInfo.Inheritance.UseCredSsp.ToString()));
|
||||
element.Add(new XAttribute("InheritRenderingEngine", connectionInfo.Inheritance.RenderingEngine.ToString()));
|
||||
element.Add(new XAttribute("InheritUsername", connectionInfo.Inheritance.Username.ToString()));
|
||||
element.Add(new XAttribute("InheritICAEncryptionStrength", connectionInfo.Inheritance.ICAEncryptionStrength.ToString()));
|
||||
element.Add(new XAttribute("InheritRDPAuthenticationLevel", connectionInfo.Inheritance.RDPAuthenticationLevel.ToString()));
|
||||
element.Add(new XAttribute("InheritRDPMinutesToIdleTimeout", connectionInfo.Inheritance.RDPMinutesToIdleTimeout.ToString()));
|
||||
element.Add(new XAttribute("InheritRDPAlertIdleTimeout", connectionInfo.Inheritance.RDPAlertIdleTimeout.ToString()));
|
||||
element.Add(new XAttribute("InheritLoadBalanceInfo", connectionInfo.Inheritance.LoadBalanceInfo.ToString()));
|
||||
element.Add(new XAttribute("InheritPreExtApp", connectionInfo.Inheritance.PreExtApp.ToString()));
|
||||
element.Add(new XAttribute("InheritPostExtApp", connectionInfo.Inheritance.PostExtApp.ToString()));
|
||||
element.Add(new XAttribute("InheritMacAddress", connectionInfo.Inheritance.MacAddress.ToString()));
|
||||
element.Add(new XAttribute("InheritUserField", connectionInfo.Inheritance.UserField.ToString()));
|
||||
element.Add(new XAttribute("InheritExtApp", connectionInfo.Inheritance.ExtApp.ToString()));
|
||||
element.Add(new XAttribute("InheritVNCCompression", connectionInfo.Inheritance.VNCCompression.ToString()));
|
||||
element.Add(new XAttribute("InheritVNCEncoding", connectionInfo.Inheritance.VNCEncoding.ToString()));
|
||||
element.Add(new XAttribute("InheritVNCAuthMode", connectionInfo.Inheritance.VNCAuthMode.ToString()));
|
||||
element.Add(new XAttribute("InheritVNCProxyType", connectionInfo.Inheritance.VNCProxyType.ToString()));
|
||||
element.Add(new XAttribute("InheritVNCProxyIP", connectionInfo.Inheritance.VNCProxyIP.ToString()));
|
||||
element.Add(new XAttribute("InheritVNCProxyPort", connectionInfo.Inheritance.VNCProxyPort.ToString()));
|
||||
element.Add(new XAttribute("InheritVNCProxyUsername", connectionInfo.Inheritance.VNCProxyUsername.ToString()));
|
||||
element.Add(new XAttribute("InheritVNCProxyPassword", connectionInfo.Inheritance.VNCProxyPassword.ToString()));
|
||||
element.Add(new XAttribute("InheritVNCColors", connectionInfo.Inheritance.VNCColors.ToString()));
|
||||
element.Add(new XAttribute("InheritVNCSmartSizeMode", connectionInfo.Inheritance.VNCSmartSizeMode.ToString()));
|
||||
element.Add(new XAttribute("InheritVNCViewOnly", connectionInfo.Inheritance.VNCViewOnly.ToString()));
|
||||
element.Add(new XAttribute("InheritRDGatewayUsageMethod", connectionInfo.Inheritance.RDGatewayUsageMethod.ToString()));
|
||||
element.Add(new XAttribute("InheritRDGatewayHostname", connectionInfo.Inheritance.RDGatewayHostname.ToString()));
|
||||
element.Add(new XAttribute("InheritRDGatewayUseConnectionCredentials", connectionInfo.Inheritance.RDGatewayUseConnectionCredentials.ToString()));
|
||||
element.Add(new XAttribute("InheritRDGatewayUsername", connectionInfo.Inheritance.RDGatewayUsername.ToString()));
|
||||
element.Add(new XAttribute("InheritRDGatewayPassword", connectionInfo.Inheritance.RDGatewayPassword.ToString()));
|
||||
element.Add(new XAttribute("InheritRDGatewayDomain", connectionInfo.Inheritance.RDGatewayDomain.ToString()));
|
||||
element.Add(new XAttribute("InheritCacheBitmaps", connectionInfo.Inheritance.CacheBitmaps.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritColors", connectionInfo.Inheritance.Colors.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritDescription", connectionInfo.Inheritance.Description.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritDisplayThemes", connectionInfo.Inheritance.DisplayThemes.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritDisplayWallpaper", connectionInfo.Inheritance.DisplayWallpaper.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritEnableFontSmoothing", connectionInfo.Inheritance.EnableFontSmoothing.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritEnableDesktopComposition", connectionInfo.Inheritance.EnableDesktopComposition.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritDomain", connectionInfo.Inheritance.Domain.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritIcon", connectionInfo.Inheritance.Icon.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritPanel", connectionInfo.Inheritance.Panel.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritPassword", connectionInfo.Inheritance.Password.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritPort", connectionInfo.Inheritance.Port.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritProtocol", connectionInfo.Inheritance.Protocol.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritPuttySession", connectionInfo.Inheritance.PuttySession.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritRedirectDiskDrives", connectionInfo.Inheritance.RedirectDiskDrives.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritRedirectKeys", connectionInfo.Inheritance.RedirectKeys.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritRedirectPorts", connectionInfo.Inheritance.RedirectPorts.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritRedirectPrinters", connectionInfo.Inheritance.RedirectPrinters.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritRedirectSmartCards", connectionInfo.Inheritance.RedirectSmartCards.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritRedirectSound", connectionInfo.Inheritance.RedirectSound.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritSoundQuality", connectionInfo.Inheritance.SoundQuality.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritResolution", connectionInfo.Inheritance.Resolution.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritAutomaticResize", connectionInfo.Inheritance.AutomaticResize.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritUseConsoleSession", connectionInfo.Inheritance.UseConsoleSession.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritUseCredSsp", connectionInfo.Inheritance.UseCredSsp.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritRenderingEngine", connectionInfo.Inheritance.RenderingEngine.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritUsername", connectionInfo.Inheritance.Username.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritICAEncryptionStrength", connectionInfo.Inheritance.ICAEncryptionStrength.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritRDPAuthenticationLevel", connectionInfo.Inheritance.RDPAuthenticationLevel.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritRDPMinutesToIdleTimeout", connectionInfo.Inheritance.RDPMinutesToIdleTimeout.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritRDPAlertIdleTimeout", connectionInfo.Inheritance.RDPAlertIdleTimeout.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritLoadBalanceInfo", connectionInfo.Inheritance.LoadBalanceInfo.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritPreExtApp", connectionInfo.Inheritance.PreExtApp.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritPostExtApp", connectionInfo.Inheritance.PostExtApp.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritMacAddress", connectionInfo.Inheritance.MacAddress.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritUserField", connectionInfo.Inheritance.UserField.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritExtApp", connectionInfo.Inheritance.ExtApp.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritVNCCompression", connectionInfo.Inheritance.VNCCompression.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritVNCEncoding", connectionInfo.Inheritance.VNCEncoding.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritVNCAuthMode", connectionInfo.Inheritance.VNCAuthMode.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritVNCProxyType", connectionInfo.Inheritance.VNCProxyType.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritVNCProxyIP", connectionInfo.Inheritance.VNCProxyIP.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritVNCProxyPort", connectionInfo.Inheritance.VNCProxyPort.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritVNCProxyUsername", connectionInfo.Inheritance.VNCProxyUsername.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritVNCProxyPassword", connectionInfo.Inheritance.VNCProxyPassword.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritVNCColors", connectionInfo.Inheritance.VNCColors.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritVNCSmartSizeMode", connectionInfo.Inheritance.VNCSmartSizeMode.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritVNCViewOnly", connectionInfo.Inheritance.VNCViewOnly.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritRDGatewayUsageMethod", connectionInfo.Inheritance.RDGatewayUsageMethod.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritRDGatewayHostname", connectionInfo.Inheritance.RDGatewayHostname.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritRDGatewayUseConnectionCredentials", connectionInfo.Inheritance.RDGatewayUseConnectionCredentials.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritRDGatewayUsername", connectionInfo.Inheritance.RDGatewayUsername.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritRDGatewayPassword", connectionInfo.Inheritance.RDGatewayPassword.ToString().ToLowerInvariant()));
|
||||
element.Add(new XAttribute("InheritRDGatewayDomain", connectionInfo.Inheritance.RDGatewayDomain.ToString().ToLowerInvariant()));
|
||||
}
|
||||
else
|
||||
{
|
||||
element.Add(new XAttribute("InheritCacheBitmaps", false.ToString()));
|
||||
element.Add(new XAttribute("InheritColors", false.ToString()));
|
||||
element.Add(new XAttribute("InheritDescription", false.ToString()));
|
||||
element.Add(new XAttribute("InheritDisplayThemes", false.ToString()));
|
||||
element.Add(new XAttribute("InheritDisplayWallpaper", false.ToString()));
|
||||
element.Add(new XAttribute("InheritEnableFontSmoothing", false.ToString()));
|
||||
element.Add(new XAttribute("InheritEnableDesktopComposition", false.ToString()));
|
||||
element.Add(new XAttribute("InheritDomain", false.ToString()));
|
||||
element.Add(new XAttribute("InheritIcon", false.ToString()));
|
||||
element.Add(new XAttribute("InheritPanel", false.ToString()));
|
||||
element.Add(new XAttribute("InheritPassword", false.ToString()));
|
||||
element.Add(new XAttribute("InheritPort", false.ToString()));
|
||||
element.Add(new XAttribute("InheritProtocol", false.ToString()));
|
||||
element.Add(new XAttribute("InheritPuttySession", false.ToString()));
|
||||
element.Add(new XAttribute("InheritRedirectDiskDrives", false.ToString()));
|
||||
element.Add(new XAttribute("InheritRedirectKeys", false.ToString()));
|
||||
element.Add(new XAttribute("InheritRedirectPorts", false.ToString()));
|
||||
element.Add(new XAttribute("InheritRedirectPrinters", false.ToString()));
|
||||
element.Add(new XAttribute("InheritRedirectSmartCards", false.ToString()));
|
||||
element.Add(new XAttribute("InheritRedirectSound", false.ToString()));
|
||||
element.Add(new XAttribute("InheritSoundQuality", false.ToString()));
|
||||
element.Add(new XAttribute("InheritResolution", false.ToString()));
|
||||
element.Add(new XAttribute("InheritAutomaticResize", false.ToString()));
|
||||
element.Add(new XAttribute("InheritUseConsoleSession", false.ToString()));
|
||||
element.Add(new XAttribute("InheritUseCredSsp", false.ToString()));
|
||||
element.Add(new XAttribute("InheritRenderingEngine", false.ToString()));
|
||||
element.Add(new XAttribute("InheritUsername", false.ToString()));
|
||||
element.Add(new XAttribute("InheritICAEncryptionStrength", false.ToString()));
|
||||
element.Add(new XAttribute("InheritRDPAuthenticationLevel", false.ToString()));
|
||||
element.Add(new XAttribute("InheritRDPMinutesToIdleTimeout", false.ToString()));
|
||||
element.Add(new XAttribute("InheritRDPAlertIdleTimeout", false.ToString()));
|
||||
element.Add(new XAttribute("InheritLoadBalanceInfo", false.ToString()));
|
||||
element.Add(new XAttribute("InheritPreExtApp", false.ToString()));
|
||||
element.Add(new XAttribute("InheritPostExtApp", false.ToString()));
|
||||
element.Add(new XAttribute("InheritMacAddress", false.ToString()));
|
||||
element.Add(new XAttribute("InheritUserField", false.ToString()));
|
||||
element.Add(new XAttribute("InheritExtApp", false.ToString()));
|
||||
element.Add(new XAttribute("InheritVNCCompression", false.ToString()));
|
||||
element.Add(new XAttribute("InheritVNCEncoding", false.ToString()));
|
||||
element.Add(new XAttribute("InheritVNCAuthMode", false.ToString()));
|
||||
element.Add(new XAttribute("InheritVNCProxyType", false.ToString()));
|
||||
element.Add(new XAttribute("InheritVNCProxyIP", false.ToString()));
|
||||
element.Add(new XAttribute("InheritVNCProxyPort", false.ToString()));
|
||||
element.Add(new XAttribute("InheritVNCProxyUsername", false.ToString()));
|
||||
element.Add(new XAttribute("InheritVNCProxyPassword", false.ToString()));
|
||||
element.Add(new XAttribute("InheritVNCColors", false.ToString()));
|
||||
element.Add(new XAttribute("InheritVNCSmartSizeMode", false.ToString()));
|
||||
element.Add(new XAttribute("InheritVNCViewOnly", false.ToString()));
|
||||
element.Add(new XAttribute("InheritRDGatewayUsageMethod", false.ToString()));
|
||||
element.Add(new XAttribute("InheritRDGatewayHostname", false.ToString()));
|
||||
element.Add(new XAttribute("InheritRDGatewayUseConnectionCredentials", false.ToString()));
|
||||
element.Add(new XAttribute("InheritRDGatewayUsername", false.ToString()));
|
||||
element.Add(new XAttribute("InheritRDGatewayPassword", false.ToString()));
|
||||
element.Add(new XAttribute("InheritRDGatewayDomain", false.ToString()));
|
||||
var falseString = false.ToString().ToLowerInvariant();
|
||||
element.Add(new XAttribute("InheritCacheBitmaps", falseString));
|
||||
element.Add(new XAttribute("InheritColors", falseString));
|
||||
element.Add(new XAttribute("InheritDescription", falseString));
|
||||
element.Add(new XAttribute("InheritDisplayThemes", falseString));
|
||||
element.Add(new XAttribute("InheritDisplayWallpaper", falseString));
|
||||
element.Add(new XAttribute("InheritEnableFontSmoothing", falseString));
|
||||
element.Add(new XAttribute("InheritEnableDesktopComposition", falseString));
|
||||
element.Add(new XAttribute("InheritDomain", falseString));
|
||||
element.Add(new XAttribute("InheritIcon", falseString));
|
||||
element.Add(new XAttribute("InheritPanel", falseString));
|
||||
element.Add(new XAttribute("InheritPassword", falseString));
|
||||
element.Add(new XAttribute("InheritPort", falseString));
|
||||
element.Add(new XAttribute("InheritProtocol", falseString));
|
||||
element.Add(new XAttribute("InheritPuttySession", falseString));
|
||||
element.Add(new XAttribute("InheritRedirectDiskDrives", falseString));
|
||||
element.Add(new XAttribute("InheritRedirectKeys", falseString));
|
||||
element.Add(new XAttribute("InheritRedirectPorts", falseString));
|
||||
element.Add(new XAttribute("InheritRedirectPrinters", falseString));
|
||||
element.Add(new XAttribute("InheritRedirectSmartCards", falseString));
|
||||
element.Add(new XAttribute("InheritRedirectSound", falseString));
|
||||
element.Add(new XAttribute("InheritSoundQuality", falseString));
|
||||
element.Add(new XAttribute("InheritResolution", falseString));
|
||||
element.Add(new XAttribute("InheritAutomaticResize", falseString));
|
||||
element.Add(new XAttribute("InheritUseConsoleSession", falseString));
|
||||
element.Add(new XAttribute("InheritUseCredSsp", falseString));
|
||||
element.Add(new XAttribute("InheritRenderingEngine", falseString));
|
||||
element.Add(new XAttribute("InheritUsername", falseString));
|
||||
element.Add(new XAttribute("InheritICAEncryptionStrength", falseString));
|
||||
element.Add(new XAttribute("InheritRDPAuthenticationLevel", falseString));
|
||||
element.Add(new XAttribute("InheritRDPMinutesToIdleTimeout", falseString));
|
||||
element.Add(new XAttribute("InheritRDPAlertIdleTimeout", falseString));
|
||||
element.Add(new XAttribute("InheritLoadBalanceInfo", falseString));
|
||||
element.Add(new XAttribute("InheritPreExtApp", falseString));
|
||||
element.Add(new XAttribute("InheritPostExtApp", falseString));
|
||||
element.Add(new XAttribute("InheritMacAddress", falseString));
|
||||
element.Add(new XAttribute("InheritUserField", falseString));
|
||||
element.Add(new XAttribute("InheritExtApp", falseString));
|
||||
element.Add(new XAttribute("InheritVNCCompression", falseString));
|
||||
element.Add(new XAttribute("InheritVNCEncoding", falseString));
|
||||
element.Add(new XAttribute("InheritVNCAuthMode", falseString));
|
||||
element.Add(new XAttribute("InheritVNCProxyType", falseString));
|
||||
element.Add(new XAttribute("InheritVNCProxyIP", falseString));
|
||||
element.Add(new XAttribute("InheritVNCProxyPort", falseString));
|
||||
element.Add(new XAttribute("InheritVNCProxyUsername", falseString));
|
||||
element.Add(new XAttribute("InheritVNCProxyPassword", falseString));
|
||||
element.Add(new XAttribute("InheritVNCColors", falseString));
|
||||
element.Add(new XAttribute("InheritVNCSmartSizeMode", falseString));
|
||||
element.Add(new XAttribute("InheritVNCViewOnly", falseString));
|
||||
element.Add(new XAttribute("InheritRDGatewayUsageMethod", falseString));
|
||||
element.Add(new XAttribute("InheritRDGatewayHostname", falseString));
|
||||
element.Add(new XAttribute("InheritRDGatewayUseConnectionCredentials", falseString));
|
||||
element.Add(new XAttribute("InheritRDGatewayUsername", falseString));
|
||||
element.Add(new XAttribute("InheritRDGatewayPassword", falseString));
|
||||
element.Add(new XAttribute("InheritRDGatewayDomain", falseString));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,13 +13,12 @@ using mRemoteNG.Connection.Protocol.VNC;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Messages;
|
||||
using mRemoteNG.Security;
|
||||
using mRemoteNG.Tools;
|
||||
using mRemoteNG.Tree;
|
||||
using mRemoteNG.Tree.Root;
|
||||
using mRemoteNG.UI.Forms;
|
||||
using mRemoteNG.UI.TaskDialog;
|
||||
|
||||
namespace mRemoteNG.Config.Serializers
|
||||
namespace mRemoteNG.Config.Serializers.Xml
|
||||
{
|
||||
public class XmlConnectionsDeserializer : IDeserializer<string, ConnectionTreeModel>
|
||||
{
|
||||
@@ -71,7 +70,8 @@ namespace mRemoteNG.Config.Serializers
|
||||
|
||||
if (_confVersion >= 2.6)
|
||||
{
|
||||
if (rootXmlElement?.Attributes["FullFileEncryption"].Value == "True")
|
||||
var fullFileEncryptionValue = rootXmlElement?.Attributes["FullFileEncryption"].Value ?? "";
|
||||
if (bool.Parse(fullFileEncryptionValue))
|
||||
{
|
||||
var decryptedContent = _decryptor.Decrypt(rootXmlElement.InnerText);
|
||||
rootXmlElement.InnerXml = decryptedContent;
|
||||
@@ -143,10 +143,10 @@ namespace mRemoteNG.Config.Serializers
|
||||
if (_confVersion >= 2.6)
|
||||
{
|
||||
BlockCipherEngines engine;
|
||||
Enum.TryParse(connectionsRootElement?.Attributes["EncryptionEngine"].Value, out engine);
|
||||
Enum.TryParse(connectionsRootElement?.Attributes["EncryptionEngine"].Value, true, out engine);
|
||||
|
||||
BlockCipherModes mode;
|
||||
Enum.TryParse(connectionsRootElement?.Attributes["BlockCipherMode"].Value, out mode);
|
||||
Enum.TryParse(connectionsRootElement?.Attributes["BlockCipherMode"].Value, true, out mode);
|
||||
|
||||
int keyDerivationIterations;
|
||||
int.TryParse(connectionsRootElement?.Attributes["KdfIterations"].Value, out keyDerivationIterations);
|
||||
@@ -186,7 +186,10 @@ namespace mRemoteNG.Config.Serializers
|
||||
if (_confVersion >= 0.9)
|
||||
containerInfo.CopyFrom(GetConnectionInfoFromXml(xmlNode));
|
||||
if (_confVersion >= 0.8)
|
||||
containerInfo.IsExpanded = xmlNode.Attributes?["Expanded"].Value == "True";
|
||||
{
|
||||
var expandedValue = xmlNode.Attributes?["Expanded"].Value ?? "";
|
||||
containerInfo.IsExpanded = bool.Parse(expandedValue);
|
||||
}
|
||||
|
||||
parentContainer.AddChild(containerInfo);
|
||||
AddNodesFromXmlRecursive(xmlNode, containerInfo);
|
||||
@@ -204,7 +207,9 @@ namespace mRemoteNG.Config.Serializers
|
||||
private ConnectionInfo GetConnectionInfoFromXml(XmlNode xmlnode)
|
||||
{
|
||||
if (xmlnode.Attributes == null) return null;
|
||||
var connectionInfo = new ConnectionInfo();
|
||||
|
||||
var connectionId = xmlnode.Attributes["Id"]?.Value ?? Guid.NewGuid().ToString();
|
||||
var connectionInfo = new ConnectionInfo(connectionId);
|
||||
|
||||
try
|
||||
{
|
||||
@@ -219,7 +224,9 @@ namespace mRemoteNG.Config.Serializers
|
||||
|
||||
if (_confVersion < 1.1) //1.0 - 0.1
|
||||
{
|
||||
connectionInfo.Resolution = Convert.ToBoolean(xmlnode.Attributes["Fullscreen"].Value) ? RdpProtocol.RDPResolutions.Fullscreen : RdpProtocol.RDPResolutions.FitToWindow;
|
||||
connectionInfo.Resolution = Convert.ToBoolean(xmlnode.Attributes["Fullscreen"].Value)
|
||||
? RdpProtocol.RDPResolutions.Fullscreen
|
||||
: RdpProtocol.RDPResolutions.FitToWindow;
|
||||
}
|
||||
|
||||
if (_confVersion <= 2.6) // 0.2 - 2.6
|
||||
@@ -257,7 +264,9 @@ namespace mRemoteNG.Config.Serializers
|
||||
{
|
||||
if (_confVersion < 0.7)
|
||||
{
|
||||
connectionInfo.Port = Convert.ToInt32(Convert.ToBoolean(xmlnode.Attributes["UseVNC"].Value) ? xmlnode.Attributes["VNCPort"].Value : xmlnode.Attributes["RDPPort"].Value);
|
||||
connectionInfo.Port = Convert.ToInt32(Convert.ToBoolean(xmlnode.Attributes["UseVNC"].Value)
|
||||
? xmlnode.Attributes["VNCPort"].Value
|
||||
: xmlnode.Attributes["RDPPort"].Value);
|
||||
}
|
||||
|
||||
connectionInfo.UseConsoleSession = bool.Parse(xmlnode.Attributes["ConnectToConsole"].Value);
|
||||
@@ -291,7 +300,9 @@ namespace mRemoteNG.Config.Serializers
|
||||
|
||||
if (_confVersion >= 0.7)
|
||||
{
|
||||
connectionInfo.Protocol = (ProtocolType)MiscTools.StringToEnum(typeof(ProtocolType), xmlnode.Attributes["Protocol"].Value);
|
||||
ProtocolType protocolType;
|
||||
Enum.TryParse(xmlnode.Attributes["Protocol"].Value, true, out protocolType);
|
||||
connectionInfo.Protocol = protocolType;
|
||||
connectionInfo.Port = Convert.ToInt32(xmlnode.Attributes["Port"].Value);
|
||||
}
|
||||
|
||||
@@ -307,9 +318,9 @@ namespace mRemoteNG.Config.Serializers
|
||||
|
||||
if (_confVersion >= 1.3)
|
||||
{
|
||||
connectionInfo.Colors = (RdpProtocol.RDPColors)MiscTools.StringToEnum(typeof(RdpProtocol.RDPColors), xmlnode.Attributes["Colors"].Value);
|
||||
connectionInfo.Resolution = (RdpProtocol.RDPResolutions)MiscTools.StringToEnum(typeof(RdpProtocol.RDPResolutions), Convert.ToString(xmlnode.Attributes["Resolution"].Value));
|
||||
connectionInfo.RedirectSound = (RdpProtocol.RDPSounds)MiscTools.StringToEnum(typeof(RdpProtocol.RDPSounds), Convert.ToString(xmlnode.Attributes["RedirectSound"].Value));
|
||||
connectionInfo.Colors = (RdpProtocol.RDPColors)Enum.Parse(typeof(RdpProtocol.RDPColors), xmlnode.Attributes["Colors"].Value, true);
|
||||
connectionInfo.Resolution = (RdpProtocol.RDPResolutions)Enum.Parse(typeof(RdpProtocol.RDPResolutions), xmlnode.Attributes["Resolution"].Value, true);
|
||||
connectionInfo.RedirectSound = (RdpProtocol.RDPSounds)Enum.Parse(typeof(RdpProtocol.RDPSounds), xmlnode.Attributes["RedirectSound"].Value, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -385,7 +396,7 @@ namespace mRemoteNG.Config.Serializers
|
||||
|
||||
if (_confVersion >= 1.6)
|
||||
{
|
||||
connectionInfo.ICAEncryptionStrength = (IcaProtocol.EncryptionStrength)MiscTools.StringToEnum(typeof(IcaProtocol.EncryptionStrength), xmlnode.Attributes["ICAEncryptionStrength"].Value);
|
||||
connectionInfo.ICAEncryptionStrength = (IcaProtocol.EncryptionStrength)Enum.Parse(typeof(IcaProtocol.EncryptionStrength), xmlnode.Attributes["ICAEncryptionStrength"].Value, true);
|
||||
connectionInfo.Inheritance.ICAEncryptionStrength = bool.Parse(xmlnode.Attributes["InheritICAEncryptionStrength"].Value);
|
||||
connectionInfo.PreExtApp = xmlnode.Attributes["PreExtApp"].Value;
|
||||
connectionInfo.PostExtApp = xmlnode.Attributes["PostExtApp"].Value;
|
||||
@@ -395,16 +406,16 @@ namespace mRemoteNG.Config.Serializers
|
||||
|
||||
if (_confVersion >= 1.7)
|
||||
{
|
||||
connectionInfo.VNCCompression = (ProtocolVNC.Compression)MiscTools.StringToEnum(typeof(ProtocolVNC.Compression), xmlnode.Attributes["VNCCompression"].Value);
|
||||
connectionInfo.VNCEncoding = (ProtocolVNC.Encoding)MiscTools.StringToEnum(typeof(ProtocolVNC.Encoding), Convert.ToString(xmlnode.Attributes["VNCEncoding"].Value));
|
||||
connectionInfo.VNCAuthMode = (ProtocolVNC.AuthMode)MiscTools.StringToEnum(typeof(ProtocolVNC.AuthMode), xmlnode.Attributes["VNCAuthMode"].Value);
|
||||
connectionInfo.VNCProxyType = (ProtocolVNC.ProxyType)MiscTools.StringToEnum(typeof(ProtocolVNC.ProxyType), xmlnode.Attributes["VNCProxyType"].Value);
|
||||
connectionInfo.VNCCompression = (ProtocolVNC.Compression)Enum.Parse(typeof(ProtocolVNC.Compression), xmlnode.Attributes["VNCCompression"].Value, true);
|
||||
connectionInfo.VNCEncoding = (ProtocolVNC.Encoding)Enum.Parse(typeof(ProtocolVNC.Encoding), xmlnode.Attributes["VNCEncoding"].Value, true);
|
||||
connectionInfo.VNCAuthMode = (ProtocolVNC.AuthMode)Enum.Parse(typeof(ProtocolVNC.AuthMode), xmlnode.Attributes["VNCAuthMode"].Value, true);
|
||||
connectionInfo.VNCProxyType = (ProtocolVNC.ProxyType)Enum.Parse(typeof(ProtocolVNC.ProxyType), xmlnode.Attributes["VNCProxyType"].Value, true);
|
||||
connectionInfo.VNCProxyIP = xmlnode.Attributes["VNCProxyIP"].Value;
|
||||
connectionInfo.VNCProxyPort = Convert.ToInt32(xmlnode.Attributes["VNCProxyPort"].Value);
|
||||
connectionInfo.VNCProxyUsername = xmlnode.Attributes["VNCProxyUsername"].Value;
|
||||
connectionInfo.VNCProxyPassword = _decryptor.Decrypt(xmlnode.Attributes["VNCProxyPassword"].Value);
|
||||
connectionInfo.VNCColors = (ProtocolVNC.Colors)MiscTools.StringToEnum(typeof(ProtocolVNC.Colors), xmlnode.Attributes["VNCColors"].Value);
|
||||
connectionInfo.VNCSmartSizeMode = (ProtocolVNC.SmartSizeMode)MiscTools.StringToEnum(typeof(ProtocolVNC.SmartSizeMode), xmlnode.Attributes["VNCSmartSizeMode"].Value);
|
||||
connectionInfo.VNCColors = (ProtocolVNC.Colors)Enum.Parse(typeof(ProtocolVNC.Colors), xmlnode.Attributes["VNCColors"].Value, true);
|
||||
connectionInfo.VNCSmartSizeMode = (ProtocolVNC.SmartSizeMode)Enum.Parse(typeof(ProtocolVNC.SmartSizeMode), xmlnode.Attributes["VNCSmartSizeMode"].Value, true);
|
||||
connectionInfo.VNCViewOnly = bool.Parse(xmlnode.Attributes["VNCViewOnly"].Value);
|
||||
connectionInfo.Inheritance.VNCCompression = bool.Parse(xmlnode.Attributes["InheritVNCCompression"].Value);
|
||||
connectionInfo.Inheritance.VNCEncoding = bool.Parse(xmlnode.Attributes["InheritVNCEncoding"].Value);
|
||||
@@ -421,13 +432,13 @@ namespace mRemoteNG.Config.Serializers
|
||||
|
||||
if (_confVersion >= 1.8)
|
||||
{
|
||||
connectionInfo.RDPAuthenticationLevel = (RdpProtocol.AuthenticationLevel)MiscTools.StringToEnum(typeof(RdpProtocol.AuthenticationLevel), xmlnode.Attributes["RDPAuthenticationLevel"].Value);
|
||||
connectionInfo.RDPAuthenticationLevel = (RdpProtocol.AuthenticationLevel)Enum.Parse(typeof(RdpProtocol.AuthenticationLevel), xmlnode.Attributes["RDPAuthenticationLevel"].Value, true);
|
||||
connectionInfo.Inheritance.RDPAuthenticationLevel = bool.Parse(xmlnode.Attributes["InheritRDPAuthenticationLevel"].Value);
|
||||
}
|
||||
|
||||
if (_confVersion >= 1.9)
|
||||
{
|
||||
connectionInfo.RenderingEngine = (HTTPBase.RenderingEngine)MiscTools.StringToEnum(typeof(HTTPBase.RenderingEngine), xmlnode.Attributes["RenderingEngine"].Value);
|
||||
connectionInfo.RenderingEngine = (HTTPBase.RenderingEngine)Enum.Parse(typeof(HTTPBase.RenderingEngine), xmlnode.Attributes["RenderingEngine"].Value, true);
|
||||
connectionInfo.MacAddress = xmlnode.Attributes["MacAddress"].Value;
|
||||
connectionInfo.Inheritance.RenderingEngine = bool.Parse(xmlnode.Attributes["InheritRenderingEngine"].Value);
|
||||
connectionInfo.Inheritance.MacAddress = bool.Parse(xmlnode.Attributes["InheritMacAddress"].Value);
|
||||
@@ -448,9 +459,9 @@ namespace mRemoteNG.Config.Serializers
|
||||
if (_confVersion >= 2.2)
|
||||
{
|
||||
// Get settings
|
||||
connectionInfo.RDGatewayUsageMethod = (RdpProtocol.RDGatewayUsageMethod)MiscTools.StringToEnum(typeof(RdpProtocol.RDGatewayUsageMethod), Convert.ToString(xmlnode.Attributes["RDGatewayUsageMethod"].Value));
|
||||
connectionInfo.RDGatewayUsageMethod = (RdpProtocol.RDGatewayUsageMethod)Enum.Parse(typeof(RdpProtocol.RDGatewayUsageMethod), xmlnode.Attributes["RDGatewayUsageMethod"].Value, true);
|
||||
connectionInfo.RDGatewayHostname = xmlnode.Attributes["RDGatewayHostname"].Value;
|
||||
connectionInfo.RDGatewayUseConnectionCredentials = (RdpProtocol.RDGatewayUseConnectionCredentials)MiscTools.StringToEnum(typeof(RdpProtocol.RDGatewayUseConnectionCredentials), Convert.ToString(xmlnode.Attributes["RDGatewayUseConnectionCredentials"].Value));
|
||||
connectionInfo.RDGatewayUseConnectionCredentials = (RdpProtocol.RDGatewayUseConnectionCredentials)Enum.Parse(typeof(RdpProtocol.RDGatewayUseConnectionCredentials), xmlnode.Attributes["RDGatewayUseConnectionCredentials"].Value, true);
|
||||
connectionInfo.RDGatewayUsername = xmlnode.Attributes["RDGatewayUsername"].Value;
|
||||
connectionInfo.RDGatewayPassword = _decryptor.Decrypt(Convert.ToString(xmlnode.Attributes["RDGatewayPassword"].Value));
|
||||
connectionInfo.RDGatewayDomain = xmlnode.Attributes["RDGatewayDomain"].Value;
|
||||
@@ -491,8 +502,7 @@ namespace mRemoteNG.Config.Serializers
|
||||
|
||||
if (_confVersion >= 2.6)
|
||||
{
|
||||
connectionInfo.ConstantID = xmlnode.Attributes["Id"]?.Value ?? connectionInfo.ConstantID;
|
||||
connectionInfo.SoundQuality = (RdpProtocol.RDPSoundQuality)MiscTools.StringToEnum(typeof(RdpProtocol.RDPSoundQuality), Convert.ToString(xmlnode.Attributes["SoundQuality"].Value));
|
||||
connectionInfo.SoundQuality = (RdpProtocol.RDPSoundQuality)Enum.Parse(typeof(RdpProtocol.RDPSoundQuality), xmlnode.Attributes["SoundQuality"].Value, true);
|
||||
connectionInfo.Inheritance.SoundQuality = bool.Parse(xmlnode.Attributes["InheritSoundQuality"].Value);
|
||||
connectionInfo.RDPMinutesToIdleTimeout = Convert.ToInt32(xmlnode.Attributes["RDPMinutesToIdleTimeout"]?.Value ?? "0");
|
||||
connectionInfo.Inheritance.RDPMinutesToIdleTimeout = bool.Parse(xmlnode.Attributes["InheritRDPMinutesToIdleTimeout"]?.Value ?? "False");
|
||||
@@ -8,8 +8,7 @@ using mRemoteNG.Security;
|
||||
using mRemoteNG.Tree;
|
||||
using mRemoteNG.Tree.Root;
|
||||
|
||||
|
||||
namespace mRemoteNG.Config.Serializers
|
||||
namespace mRemoteNG.Config.Serializers.Xml
|
||||
{
|
||||
public class XmlConnectionsDocumentCompiler
|
||||
{
|
||||
@@ -2,8 +2,7 @@
|
||||
using System.Xml.Linq;
|
||||
using mRemoteNG.Security;
|
||||
|
||||
|
||||
namespace mRemoteNG.Config.Serializers
|
||||
namespace mRemoteNG.Config.Serializers.Xml
|
||||
{
|
||||
public class XmlConnectionsDocumentEncryptor
|
||||
{
|
||||
@@ -10,7 +10,7 @@ using mRemoteNG.Security;
|
||||
using mRemoteNG.Tree;
|
||||
using mRemoteNG.Tree.Root;
|
||||
|
||||
namespace mRemoteNG.Config.Serializers
|
||||
namespace mRemoteNG.Config.Serializers.Xml
|
||||
{
|
||||
public class XmlConnectionsSerializer : ISerializer<ConnectionTreeModel,string>, ISerializer<ConnectionInfo, string>
|
||||
{
|
||||
@@ -2,19 +2,21 @@
|
||||
using mRemoteNG.Security;
|
||||
using mRemoteNG.Tree.Root;
|
||||
|
||||
|
||||
namespace mRemoteNG.Config.Serializers
|
||||
namespace mRemoteNG.Config.Serializers.Xml
|
||||
{
|
||||
public class XmlRootNodeSerializer
|
||||
public class XmlRootNodeSerializer
|
||||
{
|
||||
public XElement SerializeRootNodeInfo(RootNodeInfo rootNodeInfo, ICryptographyProvider cryptographyProvider, bool fullFileEncryption = false)
|
||||
{
|
||||
var element = new XElement("Connections");
|
||||
XNamespace xmlNamespace = "http://mremoteng.org";
|
||||
var element = new XElement(xmlNamespace + "Connections");
|
||||
element.Add(new XAttribute(XNamespace.Xmlns+"mrng", xmlNamespace));
|
||||
element.Add(new XAttribute(XName.Get("Name"), rootNodeInfo.Name));
|
||||
element.Add(new XAttribute(XName.Get("EncryptionEngine"), cryptographyProvider.CipherEngine));
|
||||
element.Add(new XAttribute(XName.Get("Export"), "false"));
|
||||
element.Add(new XAttribute(XName.Get("EncryptionEngine"), cryptographyProvider.CipherEngine));
|
||||
element.Add(new XAttribute(XName.Get("BlockCipherMode"), cryptographyProvider.CipherMode));
|
||||
element.Add(new XAttribute(XName.Get("KdfIterations"), cryptographyProvider.KeyDerivationIterations));
|
||||
element.Add(new XAttribute(XName.Get("FullFileEncryption"), fullFileEncryption.ToString()));
|
||||
element.Add(new XAttribute(XName.Get("FullFileEncryption"), fullFileEncryption.ToString().ToLowerInvariant()));
|
||||
element.Add(CreateProtectedAttribute(rootNodeInfo, cryptographyProvider));
|
||||
element.Add(new XAttribute(XName.Get("ConfVersion"), "2.6"));
|
||||
return element;
|
||||
@@ -15,7 +15,7 @@ using mRemoteNG.Tree.Root;
|
||||
|
||||
namespace mRemoteNG.Config.Serializers
|
||||
{
|
||||
public class DataTableDeserializer : IDeserializer<DataTable, ConnectionTreeModel>
|
||||
public class DataTableDeserializer : IDeserializer<DataTable, ConnectionTreeModel>
|
||||
{
|
||||
public ConnectionTreeModel Deserialize(DataTable table)
|
||||
{
|
||||
@@ -46,14 +46,16 @@ namespace mRemoteNG.Config.Serializers
|
||||
|
||||
private ConnectionInfo DeserializeConnectionInfo(DataRow row)
|
||||
{
|
||||
var connectionInfo = new ConnectionInfo();
|
||||
var connectionId = row["ConstantID"] as string ?? Guid.NewGuid().ToString();
|
||||
var connectionInfo = new ConnectionInfo(connectionId);
|
||||
PopulateConnectionInfoFromDatarow(row, connectionInfo);
|
||||
return connectionInfo;
|
||||
}
|
||||
|
||||
private ContainerInfo DeserializeContainerInfo(DataRow row)
|
||||
{
|
||||
var containerInfo = new ContainerInfo();
|
||||
var containerId = row["ConstantID"] as string ?? Guid.NewGuid().ToString();
|
||||
var containerInfo = new ContainerInfo(containerId);
|
||||
PopulateConnectionInfoFromDatarow(row, containerInfo);
|
||||
return containerInfo;
|
||||
}
|
||||
@@ -61,7 +63,6 @@ namespace mRemoteNG.Config.Serializers
|
||||
private void PopulateConnectionInfoFromDatarow(DataRow dataRow, ConnectionInfo connectionInfo)
|
||||
{
|
||||
connectionInfo.Name = (string)dataRow["Name"];
|
||||
connectionInfo.ConstantID = (string)dataRow["ConstantID"];
|
||||
|
||||
// This throws a NPE - Parent is a connectionInfo object which will be null at this point.
|
||||
// The Parent object is linked properly later in CreateNodeHierarchy()
|
||||
@@ -187,7 +188,7 @@ namespace mRemoteNG.Config.Serializers
|
||||
private ConnectionTreeModel CreateNodeHierarchy(List<ConnectionInfo> connectionList, DataTable dataTable)
|
||||
{
|
||||
var connectionTreeModel = new ConnectionTreeModel();
|
||||
var rootNode = new RootNodeInfo(RootNodeType.Connection) {ConstantID = "0"};
|
||||
var rootNode = new RootNodeInfo(RootNodeType.Connection, "0");
|
||||
connectionTreeModel.AddRootNode(rootNode);
|
||||
|
||||
foreach (DataRow row in dataTable.Rows)
|
||||
|
||||
@@ -5,6 +5,7 @@ using mRemoteNG.App;
|
||||
using mRemoteNG.Config.Import;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Tools;
|
||||
using mRemoteNG.Tree;
|
||||
using mRemoteNG.Tree.Root;
|
||||
|
||||
@@ -14,12 +15,12 @@ namespace mRemoteNG.Config.Serializers
|
||||
public class ActiveDirectoryDeserializer
|
||||
{
|
||||
private readonly string _ldapPath;
|
||||
private readonly bool _importSubOU;
|
||||
private readonly bool _importSubOu;
|
||||
|
||||
public ActiveDirectoryDeserializer(string ldapPath, bool importSubOU)
|
||||
public ActiveDirectoryDeserializer(string ldapPath, bool importSubOu)
|
||||
{
|
||||
_ldapPath = ldapPath;
|
||||
_importSubOU = importSubOU;
|
||||
_ldapPath = ldapPath.ThrowIfNullOrEmpty(nameof(ldapPath));
|
||||
_importSubOu = importSubOu;
|
||||
}
|
||||
|
||||
public ConnectionTreeModel Deserialize()
|
||||
@@ -64,9 +65,10 @@ namespace mRemoteNG.Config.Serializers
|
||||
if (directoryEntry.Properties["objectClass"].Contains("organizationalUnit"))
|
||||
{
|
||||
// check/continue here so we don't create empty connection objects
|
||||
if(!_importSubOU) continue;
|
||||
if(!_importSubOu) continue;
|
||||
|
||||
ActiveDirectoryImporter.Import(ldapResult.Path, parentContainer, _importSubOU);
|
||||
// TODO - this is a circular call. A deserializer should not call an importer
|
||||
ActiveDirectoryImporter.Import(ldapResult.Path, parentContainer, _importSubOu);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,221 +0,0 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Credential;
|
||||
using mRemoteNG.Security;
|
||||
using mRemoteNG.Tree;
|
||||
using mRemoteNG.Tree.Root;
|
||||
|
||||
namespace mRemoteNG.Config.Serializers
|
||||
{
|
||||
public class CsvConnectionsSerializerMremotengFormat : ISerializer<ConnectionInfo,string>
|
||||
{
|
||||
private string _csv = "";
|
||||
private ConnectionInfo _serializationTarget;
|
||||
private readonly SaveFilter _saveFilter;
|
||||
private readonly ICredentialRepositoryList _credentialRepositoryList;
|
||||
|
||||
|
||||
public CsvConnectionsSerializerMremotengFormat(SaveFilter saveFilter, ICredentialRepositoryList credentialRepositoryList)
|
||||
{
|
||||
if (saveFilter == null)
|
||||
throw new ArgumentNullException(nameof(saveFilter));
|
||||
if (credentialRepositoryList == null)
|
||||
throw new ArgumentNullException(nameof(credentialRepositoryList));
|
||||
|
||||
_saveFilter = saveFilter;
|
||||
_credentialRepositoryList = credentialRepositoryList;
|
||||
}
|
||||
|
||||
public string Serialize(ConnectionTreeModel connectionTreeModel)
|
||||
{
|
||||
if (connectionTreeModel == null)
|
||||
throw new ArgumentNullException(nameof(connectionTreeModel));
|
||||
|
||||
var rootNode = connectionTreeModel.RootNodes.First(node => node is RootNodeInfo);
|
||||
return Serialize(rootNode);
|
||||
}
|
||||
|
||||
public string Serialize(ConnectionInfo serializationTarget)
|
||||
{
|
||||
if (serializationTarget == null)
|
||||
throw new ArgumentNullException(nameof(serializationTarget));
|
||||
|
||||
_csv = "";
|
||||
_serializationTarget = serializationTarget;
|
||||
WriteCsvHeader();
|
||||
SerializeNodesRecursive(serializationTarget);
|
||||
return _csv;
|
||||
}
|
||||
|
||||
private void WriteCsvHeader()
|
||||
{
|
||||
var csvHeader = string.Empty;
|
||||
csvHeader += "Name;Folder;Description;Icon;Panel;";
|
||||
if (_saveFilter.SaveUsername)
|
||||
csvHeader += "Username;";
|
||||
if (_saveFilter.SavePassword)
|
||||
csvHeader += "Password;";
|
||||
if (_saveFilter.SaveDomain)
|
||||
csvHeader += "Domain;";
|
||||
csvHeader += "Hostname;Protocol;PuttySession;Port;ConnectToConsole;UseCredSsp;RenderingEngine;ICAEncryptionStrength;RDPAuthenticationLevel;LoadBalanceInfo;Colors;Resolution;AutomaticResize;DisplayWallpaper;DisplayThemes;EnableFontSmoothing;EnableDesktopComposition;CacheBitmaps;RedirectDiskDrives;RedirectPorts;RedirectPrinters;RedirectSmartCards;RedirectSound;RedirectKeys;PreExtApp;PostExtApp;MacAddress;UserField;ExtApp;VNCCompression;VNCEncoding;VNCAuthMode;VNCProxyType;VNCProxyIP;VNCProxyPort;VNCProxyUsername;VNCProxyPassword;VNCColors;VNCSmartSizeMode;VNCViewOnly;RDGatewayUsageMethod;RDGatewayHostname;RDGatewayUseConnectionCredentials;RDGatewayUsername;RDGatewayPassword;RDGatewayDomain;";
|
||||
if (_saveFilter.SaveInheritance)
|
||||
csvHeader += "InheritCacheBitmaps;InheritColors;InheritDescription;InheritDisplayThemes;InheritDisplayWallpaper;InheritEnableFontSmoothing;InheritEnableDesktopComposition;InheritDomain;InheritIcon;InheritPanel;InheritPassword;InheritPort;InheritProtocol;InheritPuttySession;InheritRedirectDiskDrives;InheritRedirectKeys;InheritRedirectPorts;InheritRedirectPrinters;InheritRedirectSmartCards;InheritRedirectSound;InheritResolution;InheritAutomaticResize;InheritUseConsoleSession;InheritUseCredSsp;InheritRenderingEngine;InheritUsername;InheritICAEncryptionStrength;InheritRDPAuthenticationLevel;InheritLoadBalanceInfo;InheritPreExtApp;InheritPostExtApp;InheritMacAddress;InheritUserField;InheritExtApp;InheritVNCCompression;InheritVNCEncoding;InheritVNCAuthMode;InheritVNCProxyType;InheritVNCProxyIP;InheritVNCProxyPort;InheritVNCProxyUsername;InheritVNCProxyPassword;InheritVNCColors;InheritVNCSmartSizeMode;InheritVNCViewOnly;InheritRDGatewayUsageMethod;InheritRDGatewayHostname;InheritRDGatewayUseConnectionCredentials;InheritRDGatewayUsername;InheritRDGatewayPassword;InheritRDGatewayDomain";
|
||||
_csv += csvHeader;
|
||||
}
|
||||
|
||||
private void SerializeNodesRecursive(ConnectionInfo node)
|
||||
{
|
||||
var nodeAsContainer = node as ContainerInfo;
|
||||
if (nodeAsContainer != null)
|
||||
{
|
||||
foreach (var child in nodeAsContainer.Children)
|
||||
{
|
||||
var info = child as ContainerInfo;
|
||||
if (info != null)
|
||||
SerializeNodesRecursive(info);
|
||||
else
|
||||
SerializeConnectionInfo(child);
|
||||
}
|
||||
}
|
||||
else
|
||||
SerializeConnectionInfo(node);
|
||||
}
|
||||
|
||||
private void SerializeConnectionInfo(ConnectionInfo con)
|
||||
{
|
||||
var csvLine = Environment.NewLine;
|
||||
|
||||
csvLine += con.Name + ";" + GetNodePath(con) + ";" + con.Description + ";" + con.Icon + ";" + con.Panel + ";";
|
||||
|
||||
if (_saveFilter.SaveUsername)
|
||||
csvLine += con.Username + ";";
|
||||
|
||||
if (_saveFilter.SavePassword)
|
||||
csvLine += con.Password + ";";
|
||||
|
||||
if (_saveFilter.SaveDomain)
|
||||
csvLine += con.Domain + ";";
|
||||
|
||||
csvLine += con.Hostname + ";" +
|
||||
con.Protocol + ";" +
|
||||
con.PuttySession + ";" +
|
||||
Convert.ToString(con.Port) + ";" +
|
||||
Convert.ToString(con.UseConsoleSession) + ";" +
|
||||
Convert.ToString(con.UseCredSsp) + ";" +
|
||||
con.RenderingEngine + ";" +
|
||||
con.ICAEncryptionStrength + ";" +
|
||||
con.RDPAuthenticationLevel + ";" +
|
||||
con.LoadBalanceInfo + ";" +
|
||||
con.Colors + ";" +
|
||||
con.Resolution + ";" +
|
||||
Convert.ToString(con.AutomaticResize) + ";" +
|
||||
Convert.ToString(con.DisplayWallpaper) + ";" +
|
||||
Convert.ToString(con.DisplayThemes) + ";" +
|
||||
Convert.ToString(con.EnableFontSmoothing) + ";" +
|
||||
Convert.ToString(con.EnableDesktopComposition) + ";" +
|
||||
Convert.ToString(con.CacheBitmaps) + ";" +
|
||||
Convert.ToString(con.RedirectDiskDrives) + ";" +
|
||||
Convert.ToString(con.RedirectPorts) + ";" +
|
||||
Convert.ToString(con.RedirectPrinters) + ";" +
|
||||
Convert.ToString(con.RedirectSmartCards) + ";" +
|
||||
con.RedirectSound + ";" +
|
||||
Convert.ToString(con.RedirectKeys) + ";" +
|
||||
con.PreExtApp + ";" +
|
||||
con.PostExtApp + ";" +
|
||||
con.MacAddress + ";" +
|
||||
con.UserField + ";" +
|
||||
con.ExtApp + ";" +
|
||||
con.VNCCompression + ";" +
|
||||
con.VNCEncoding + ";" +
|
||||
con.VNCAuthMode + ";" +
|
||||
con.VNCProxyType + ";" +
|
||||
con.VNCProxyIP + ";" +
|
||||
Convert.ToString(con.VNCProxyPort) + ";" +
|
||||
con.VNCProxyUsername + ";" +
|
||||
con.VNCProxyPassword + ";" +
|
||||
con.VNCColors + ";" +
|
||||
con.VNCSmartSizeMode + ";" +
|
||||
Convert.ToString(con.VNCViewOnly) + ";" +
|
||||
con.RDGatewayUsageMethod + ";" +
|
||||
con.RDGatewayHostname + ";" +
|
||||
con.RDGatewayUseConnectionCredentials + ";" +
|
||||
con.RDGatewayUsername + ";" +
|
||||
con.RDGatewayPassword + ";" +
|
||||
con.RDGatewayDomain + ";";
|
||||
|
||||
|
||||
if (_saveFilter.SaveInheritance)
|
||||
{
|
||||
csvLine += 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 + ";";
|
||||
}
|
||||
|
||||
_csv += csvLine;
|
||||
}
|
||||
|
||||
private string GetNodePath(ConnectionInfo connectionInfo)
|
||||
{
|
||||
var nodePath = "";
|
||||
var container = connectionInfo.Parent;
|
||||
if (container == null) return nodePath;
|
||||
while (container != _serializationTarget)
|
||||
{
|
||||
container = container.Parent;
|
||||
nodePath += $@"{container.Name}\";
|
||||
}
|
||||
nodePath = nodePath.TrimEnd('\\');
|
||||
return nodePath;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -498,7 +498,7 @@ namespace mRemoteNG.Connection
|
||||
|
||||
#region Misc
|
||||
[Browsable(false)]
|
||||
public string ConstantID { get; set; }
|
||||
public string ConstantID { get; /*set;*/ }
|
||||
|
||||
[LocalizedAttributes.LocalizedCategory("strCategoryMiscellaneous", 7),
|
||||
LocalizedAttributes.LocalizedDisplayName("strPropertyNameExternalToolBefore"),
|
||||
@@ -658,6 +658,11 @@ namespace mRemoteNG.Connection
|
||||
#endregion
|
||||
#endregion
|
||||
|
||||
protected AbstractConnectionRecord(string uniqueId)
|
||||
{
|
||||
ConstantID = uniqueId.ThrowIfNullOrEmpty(nameof(uniqueId));
|
||||
}
|
||||
|
||||
protected virtual TPropertyType GetPropertyValue<TPropertyType>(string propertyName, TPropertyType value)
|
||||
{
|
||||
return (TPropertyType)GetType().GetProperty(propertyName).GetValue(this, null);
|
||||
|
||||
@@ -14,7 +14,6 @@ using mRemoteNG.Connection.Protocol.SSH;
|
||||
using mRemoteNG.Connection.Protocol.Telnet;
|
||||
using mRemoteNG.Connection.Protocol.VNC;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Tools;
|
||||
using mRemoteNG.Tree;
|
||||
using mRemoteNG.Tree.Root;
|
||||
|
||||
@@ -32,7 +31,7 @@ namespace mRemoteNG.Connection
|
||||
public ProtocolList OpenConnections { get; protected set; }
|
||||
|
||||
[Browsable(false)]
|
||||
public bool IsContainer { get; set; }
|
||||
public virtual bool IsContainer { get; set; }
|
||||
|
||||
[Browsable(false)]
|
||||
public bool IsDefault { get; set; }
|
||||
@@ -52,7 +51,14 @@ namespace mRemoteNG.Connection
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
public ConnectionInfo()
|
||||
|
||||
public ConnectionInfo()
|
||||
: this(Guid.NewGuid().ToString())
|
||||
{
|
||||
}
|
||||
|
||||
public ConnectionInfo(string uniqueId)
|
||||
: base(uniqueId)
|
||||
{
|
||||
SetTreeDisplayDefaults();
|
||||
SetConnectionDefaults();
|
||||
@@ -65,12 +71,6 @@ namespace mRemoteNG.Connection
|
||||
SetNonBrowsablePropertiesDefaults();
|
||||
SetDefaults();
|
||||
}
|
||||
|
||||
public ConnectionInfo(ContainerInfo parent) : this()
|
||||
{
|
||||
IsContainer = true;
|
||||
parent.AddChild(this);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Public Methods
|
||||
@@ -78,7 +78,6 @@ namespace mRemoteNG.Connection
|
||||
{
|
||||
var newConnectionInfo = new ConnectionInfo();
|
||||
newConnectionInfo.CopyFrom(this);
|
||||
newConnectionInfo.ConstantID = MiscTools.CreateConstantID();
|
||||
newConnectionInfo.Inheritance = Inheritance.Clone();
|
||||
return newConnectionInfo;
|
||||
}
|
||||
@@ -168,7 +167,13 @@ namespace mRemoteNG.Connection
|
||||
#region Private Methods
|
||||
protected override TPropertyType GetPropertyValue<TPropertyType>(string propertyName, TPropertyType value)
|
||||
{
|
||||
return ShouldThisPropertyBeInherited(propertyName) ? GetInheritedPropertyValue<TPropertyType>(propertyName) : value;
|
||||
if (!ShouldThisPropertyBeInherited(propertyName))
|
||||
return value;
|
||||
|
||||
var inheritedValue = GetInheritedPropertyValue<TPropertyType>(propertyName);
|
||||
if (inheritedValue.Equals(default(TPropertyType)))
|
||||
return value;
|
||||
return inheritedValue;
|
||||
}
|
||||
|
||||
private bool ShouldThisPropertyBeInherited(string propertyName)
|
||||
@@ -191,15 +196,21 @@ namespace mRemoteNG.Connection
|
||||
|
||||
private TPropertyType GetInheritedPropertyValue<TPropertyType>(string propertyName)
|
||||
{
|
||||
var connectionInfoType = Parent.GetType();
|
||||
var parentPropertyInfo = connectionInfoType.GetProperty(propertyName);
|
||||
if (parentPropertyInfo == null)
|
||||
return default(TPropertyType); // shouldn't get here...
|
||||
var parentPropertyValue = (TPropertyType)parentPropertyInfo.GetValue(Parent, null);
|
||||
try
|
||||
{
|
||||
var connectionInfoType = Parent.GetType();
|
||||
var parentPropertyInfo = connectionInfoType.GetProperty(propertyName);
|
||||
if (parentPropertyInfo == null)
|
||||
return default(TPropertyType); // shouldn't get here...
|
||||
var parentPropertyValue = (TPropertyType)parentPropertyInfo.GetValue(Parent, null);
|
||||
|
||||
return parentPropertyValue;
|
||||
|
||||
|
||||
return parentPropertyValue;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Runtime.MessageCollector.AddExceptionStackTrace($"Error retrieving inherited property '{propertyName}'", e);
|
||||
return default(TPropertyType);
|
||||
}
|
||||
}
|
||||
|
||||
private static int GetDefaultPort(ProtocolType protocol)
|
||||
@@ -305,7 +316,6 @@ namespace mRemoteNG.Connection
|
||||
|
||||
private void SetMiscDefaults()
|
||||
{
|
||||
ConstantID = MiscTools.CreateConstantID();
|
||||
PreExtApp = Settings.Default.ConDefaultPreExtApp;
|
||||
PostExtApp = Settings.Default.ConDefaultPostExtApp;
|
||||
MacAddress = Settings.Default.ConDefaultMacAddress;
|
||||
|
||||
@@ -227,7 +227,7 @@ namespace mRemoteNG.Connection
|
||||
public event EventHandler<ConnectionsLoadedEventArgs> ConnectionsLoaded;
|
||||
public event EventHandler<ConnectionsSavedEventArgs> ConnectionsSaved;
|
||||
|
||||
private void RaiseConnectionsLoadedEvent(Maybe<ConnectionTreeModel> previousTreeModel, ConnectionTreeModel newTreeModel,
|
||||
private void RaiseConnectionsLoadedEvent(Optional<ConnectionTreeModel> previousTreeModel, ConnectionTreeModel newTreeModel,
|
||||
bool previousSourceWasDatabase, bool newSourceIsDatabase,
|
||||
string newSourcePath)
|
||||
{
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using mRemoteNG.Connection;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Connection.Protocol;
|
||||
using mRemoteNG.Tools;
|
||||
using mRemoteNG.Tree;
|
||||
|
||||
namespace mRemoteNG.Container
|
||||
{
|
||||
[DefaultProperty("Name")]
|
||||
[DefaultProperty("Name")]
|
||||
public class ContainerInfo : ConnectionInfo, INotifyCollectionChanged
|
||||
{
|
||||
[Browsable(false)]
|
||||
@@ -19,13 +18,20 @@ namespace mRemoteNG.Container
|
||||
[Category(""), Browsable(false), ReadOnly(false), Bindable(false), DefaultValue(""), DesignOnly(false)]
|
||||
public bool IsExpanded { get; set; }
|
||||
|
||||
[Browsable(false)]
|
||||
public override bool IsContainer { get { return true; } set {} }
|
||||
|
||||
public ContainerInfo()
|
||||
public ContainerInfo(string uniqueId)
|
||||
: base(uniqueId)
|
||||
{
|
||||
SetDefaults();
|
||||
IsContainer = true;
|
||||
}
|
||||
|
||||
public ContainerInfo()
|
||||
: this(Guid.NewGuid().ToString())
|
||||
{
|
||||
}
|
||||
|
||||
public override TreeNodeType GetTreeNodeType()
|
||||
{
|
||||
return TreeNodeType.Container;
|
||||
@@ -178,7 +184,6 @@ namespace mRemoteNG.Container
|
||||
{
|
||||
var newContainer = new ContainerInfo();
|
||||
newContainer.CopyFrom(this);
|
||||
newContainer.ConstantID = MiscTools.CreateConstantID();
|
||||
newContainer.OpenConnections = new ProtocolList();
|
||||
newContainer.Inheritance = Inheritance.Clone();
|
||||
foreach (var child in Children.ToArray())
|
||||
|
||||
@@ -14,7 +14,7 @@ using System.Runtime.InteropServices;
|
||||
[assembly: AssemblyDescription("Multi-protocol remote connections manager")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("mRemoteNG")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2017 mRemoteNG Dev Team; 2010-2013 Riley McArdle; 2007-2009 Felix Deimel")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2018 mRemoteNG Dev Team; 2010-2013 Riley McArdle; 2007-2009 Felix Deimel")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
|
||||
[assembly: ComVisible(false)]
|
||||
@@ -33,5 +33,5 @@ using System.Runtime.InteropServices;
|
||||
// by using the '*' as shown below:
|
||||
// <Assembly: AssemblyVersion("1.0.*")>
|
||||
|
||||
[assembly: AssemblyVersion("1.76.0.*")]
|
||||
[assembly: AssemblyVersion("1.76.2.*")]
|
||||
[assembly: NeutralResourcesLanguage("en")]
|
||||
31
mRemoteV1/Resources/Language/Language.Designer.cs
generated
31
mRemoteV1/Resources/Language/Language.Designer.cs
generated
@@ -19,7 +19,7 @@ namespace mRemoteNG {
|
||||
// class via a tool like ResGen or Visual Studio.
|
||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
// with the /str option, or rebuild your VS project.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Language {
|
||||
@@ -61,7 +61,7 @@ namespace mRemoteNG {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Create a New Configuration File.
|
||||
/// Looks up a localized string similar to Create a New Connection File.
|
||||
/// </summary>
|
||||
internal static string ConfigurationCreateNew {
|
||||
get {
|
||||
@@ -78,15 +78,6 @@ namespace mRemoteNG {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to The Configuration File is Missing..
|
||||
/// </summary>
|
||||
internal static string ConfigurationFileNotFound {
|
||||
get {
|
||||
return ResourceManager.GetString("ConfigurationFileNotFound", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Import an Existing File.
|
||||
/// </summary>
|
||||
@@ -96,6 +87,15 @@ namespace mRemoteNG {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to The connection file could not be found..
|
||||
/// </summary>
|
||||
internal static string ConnectionFileNotFound {
|
||||
get {
|
||||
return ResourceManager.GetString("ConnectionFileNotFound", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Connection successful.
|
||||
/// </summary>
|
||||
@@ -7507,6 +7507,15 @@ namespace mRemoteNG {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Timeout (seconds).
|
||||
/// </summary>
|
||||
internal static string TimeoutInSeconds {
|
||||
get {
|
||||
return ResourceManager.GetString("TimeoutInSeconds", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Unlock.
|
||||
/// </summary>
|
||||
|
||||
@@ -2590,10 +2590,10 @@ This page will walk you through the process of upgrading your connections file o
|
||||
<value>Could not find external tool with name "{0}"</value>
|
||||
</data>
|
||||
<data name="ConfigurationCreateNew" xml:space="preserve">
|
||||
<value>Create a New Configuration File</value>
|
||||
<value>Create a New Connection File</value>
|
||||
</data>
|
||||
<data name="ConfigurationFileNotFound" xml:space="preserve">
|
||||
<value>The Configuration File is Missing.</value>
|
||||
<data name="ConnectionFileNotFound" xml:space="preserve">
|
||||
<value>The connection file could not be found.</value>
|
||||
</data>
|
||||
<data name="ConfigurationImportFile" xml:space="preserve">
|
||||
<value>Import an Existing File</value>
|
||||
@@ -2631,4 +2631,7 @@ This page will walk you through the process of upgrading your connections file o
|
||||
<data name="LoadBalanceInfoUseUtf8" xml:space="preserve">
|
||||
<value>Use UTF8 encoding for RDP "Load Balance Info" property</value>
|
||||
</data>
|
||||
<data name="TimeoutInSeconds" xml:space="preserve">
|
||||
<value>Timeout (seconds)</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -1,16 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xs:schema id="mremoteng_confcons_v2_6"
|
||||
targetNamespace="http://mremoteng.org"
|
||||
elementFormDefault="qualified"
|
||||
xmlns="http://mremoteng.org"
|
||||
xmlns:mrng="http://mremoteng.org"
|
||||
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
elementFormDefault="unqualified"
|
||||
>
|
||||
|
||||
|
||||
<xs:element name="Connections">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:sequence minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:element name="Node" type="mrng:connectioninfo" />
|
||||
</xs:sequence>
|
||||
<xs:attribute name="Name" type="xs:string" use="required" />
|
||||
@@ -31,6 +31,7 @@
|
||||
</xs:sequence>
|
||||
<xs:attribute name="Name" type="xs:string" use="required" />
|
||||
<xs:attribute name="Type" type="xs:string" use="required" />
|
||||
<xs:attribute name="Expanded" type="xs:boolean" use="optional" />
|
||||
<xs:attribute name="Descr" type="xs:string" use="required" />
|
||||
<xs:attribute name="Icon" type="xs:string" use="required" />
|
||||
<xs:attribute name="Panel" type="xs:string" use="required" />
|
||||
|
||||
@@ -5,21 +5,50 @@ namespace mRemoteNG.Tools
|
||||
{
|
||||
public static class Extensions
|
||||
{
|
||||
public static Maybe<T> Maybe<T>(this T value)
|
||||
public static Optional<T> Maybe<T>(this T value)
|
||||
{
|
||||
return new Maybe<T>(value);
|
||||
return new Optional<T>(value);
|
||||
}
|
||||
|
||||
public static Maybe<U> MaybeParse<T, U>(this T value, Func<T, U> parseFunc)
|
||||
public static Optional<U> MaybeParse<T, U>(this T value, Func<T, U> parseFunc)
|
||||
{
|
||||
try
|
||||
{
|
||||
return new Maybe<U>(parseFunc(value));
|
||||
return new Optional<U>(parseFunc(value));
|
||||
}
|
||||
catch
|
||||
{
|
||||
return new Maybe<U>();
|
||||
return new Optional<U>();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Throws an <see cref="ArgumentNullException"/> if the given value is
|
||||
/// null. Otherwise, return the value.
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="value"></param>
|
||||
/// <param name="argName">
|
||||
/// The name of the argument
|
||||
/// </param>
|
||||
public static T ThrowIfNull<T>(this T value, string argName)
|
||||
{
|
||||
if (value == null)
|
||||
throw new ArgumentNullException(argName);
|
||||
return value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Throws an <see cref="ArgumentException"/> if the value
|
||||
/// is null or an empty string. Otherwise, returns the value.
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <param name="argName"></param>
|
||||
public static string ThrowIfNullOrEmpty(this string value, string argName)
|
||||
{
|
||||
if (string.IsNullOrEmpty(value))
|
||||
throw new ArgumentException("Value cannot be null or empty", argName);
|
||||
return value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ using static System.String;
|
||||
|
||||
namespace mRemoteNG.Tools
|
||||
{
|
||||
public static class MiscTools
|
||||
public static class MiscTools
|
||||
{
|
||||
public static Icon GetIconFromFile(string FileName)
|
||||
{
|
||||
@@ -68,13 +68,6 @@ namespace mRemoteNG.Tools
|
||||
{
|
||||
return Text.Replace("\'", "\'\'");
|
||||
}
|
||||
|
||||
|
||||
public static object StringToEnum(Type t, string value)
|
||||
{
|
||||
return Enum.Parse(t, value);
|
||||
}
|
||||
|
||||
|
||||
public static string GetExceptionMessageRecursive(Exception ex)
|
||||
{
|
||||
|
||||
@@ -4,16 +4,16 @@ using System.Linq;
|
||||
|
||||
namespace mRemoteNG.Tools
|
||||
{
|
||||
public class Maybe<T> : IEnumerable<T>
|
||||
public class Optional<T> : IEnumerable<T>
|
||||
{
|
||||
private readonly T[] _maybe;
|
||||
|
||||
public Maybe()
|
||||
public Optional()
|
||||
{
|
||||
_maybe = new T[0];
|
||||
}
|
||||
|
||||
public Maybe(T value)
|
||||
public Optional(T value)
|
||||
{
|
||||
_maybe = value != null
|
||||
? new[] {value}
|
||||
@@ -35,16 +35,16 @@ namespace mRemoteNG.Tools
|
||||
return _maybe.Any() ? _maybe.First().ToString() : "";
|
||||
}
|
||||
|
||||
public static implicit operator Maybe<T>(T value)
|
||||
public static implicit operator Optional<T>(T value)
|
||||
{
|
||||
return new Maybe<T>(value);
|
||||
return new Optional<T>(value);
|
||||
}
|
||||
|
||||
public static Maybe<TOut> FromNullable<TOut>(TOut? value) where TOut : struct
|
||||
public static Optional<TOut> FromNullable<TOut>(TOut? value) where TOut : struct
|
||||
{
|
||||
return value.HasValue
|
||||
? new Maybe<TOut>(value.Value)
|
||||
: new Maybe<TOut>();
|
||||
? new Optional<TOut>(value.Value)
|
||||
: new Optional<TOut>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,17 +17,24 @@ namespace mRemoteNG.Tools
|
||||
private readonly List<int> _ports = new List<int>();
|
||||
private Thread _scanThread;
|
||||
private readonly List<ScanHost> _scannedHosts = new List<ScanHost>();
|
||||
private readonly int _timeoutInMilliseconds;
|
||||
|
||||
#region Public Methods
|
||||
|
||||
public PortScanner(IPAddress ipAddress1, IPAddress ipAddress2, int port1, int port2)
|
||||
public PortScanner(IPAddress ipAddress1, IPAddress ipAddress2, int port1, int port2, int timeoutInMilliseconds = 5000)
|
||||
{
|
||||
var ipAddressStart = IpAddressMin(ipAddress1, ipAddress2);
|
||||
var ipAddressEnd = IpAddressMax(ipAddress1, ipAddress2);
|
||||
|
||||
var portStart = Math.Min(port1, port2);
|
||||
var portEnd = Math.Max(port1, port2);
|
||||
|
||||
|
||||
if (timeoutInMilliseconds < 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(timeoutInMilliseconds));
|
||||
|
||||
_timeoutInMilliseconds = timeoutInMilliseconds;
|
||||
|
||||
|
||||
_ports.Clear();
|
||||
for (var port = portStart; port <= portEnd; port++)
|
||||
{
|
||||
@@ -87,7 +94,7 @@ namespace mRemoteNG.Tools
|
||||
try
|
||||
{
|
||||
pingSender.PingCompleted += PingSender_PingCompleted;
|
||||
pingSender.SendAsync(ipAddress, ipAddress);
|
||||
pingSender.SendAsync(ipAddress, _timeoutInMilliseconds, ipAddress);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
using mRemoteNG.Tools;
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Security;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Security;
|
||||
using mRemoteNG.Tools;
|
||||
|
||||
|
||||
namespace mRemoteNG.Tree.Root
|
||||
@@ -13,11 +12,17 @@ namespace mRemoteNG.Tree.Root
|
||||
private string _name;
|
||||
private string _customPassword = "";
|
||||
|
||||
public RootNodeInfo(RootNodeType rootType)
|
||||
public RootNodeInfo(RootNodeType rootType, string uniqueId)
|
||||
: base(uniqueId)
|
||||
{
|
||||
_name = Language.strConnections;
|
||||
Type = rootType;
|
||||
}
|
||||
|
||||
public RootNodeInfo(RootNodeType rootType)
|
||||
: this(rootType, Guid.NewGuid().ToString())
|
||||
{
|
||||
}
|
||||
|
||||
#region Public Properties
|
||||
|
||||
|
||||
@@ -272,6 +272,7 @@ namespace mRemoteNG.UI.Controls
|
||||
Expand(parent);
|
||||
SelectObject(newNode, true);
|
||||
EnsureModelVisible(newNode);
|
||||
_allowEdit = true;
|
||||
SelectedItem.BeginEdit();
|
||||
}
|
||||
|
||||
|
||||
@@ -396,17 +396,28 @@ namespace mRemoteNG.UI.Forms
|
||||
var controlThatWasClicked = FromChildHandle(NativeMethods.WindowFromPoint(MousePosition));
|
||||
if (controlThatWasClicked != null)
|
||||
{
|
||||
if (controlThatWasClicked.CanSelect || controlThatWasClicked is MenuStrip ||
|
||||
controlThatWasClicked is ToolStrip || controlThatWasClicked is Crownwood.Magic.Controls.TabControl ||
|
||||
controlThatWasClicked is Crownwood.Magic.Controls.InertButton)
|
||||
if (controlThatWasClicked is TreeView ||
|
||||
controlThatWasClicked is ComboBox ||
|
||||
controlThatWasClicked is TextBox)
|
||||
{
|
||||
controlThatWasClicked.Focus();
|
||||
}
|
||||
else if (controlThatWasClicked.CanSelect ||
|
||||
controlThatWasClicked is MenuStrip ||
|
||||
controlThatWasClicked is ToolStrip ||
|
||||
controlThatWasClicked is Crownwood.Magic.Controls.TabControl ||
|
||||
controlThatWasClicked is Crownwood.Magic.Controls.InertButton)
|
||||
{
|
||||
// Simulate a mouse event since one wasn't generated by Windows
|
||||
MouseClickSimulator.Click(controlThatWasClicked, MousePosition);
|
||||
SimulateClick(controlThatWasClicked);
|
||||
controlThatWasClicked.Focus();
|
||||
}
|
||||
else
|
||||
{
|
||||
// This handles activations from clicks that did not start a size/move operation
|
||||
ActivateConnection();
|
||||
}
|
||||
}
|
||||
|
||||
// This handles activations from clicks that did not start a size/move operation
|
||||
ActivateConnection();
|
||||
}
|
||||
break;
|
||||
case NativeMethods.WM_WINDOWPOSCHANGED:
|
||||
@@ -441,7 +452,17 @@ namespace mRemoteNG.UI.Forms
|
||||
|
||||
base.WndProc(ref m);
|
||||
}
|
||||
|
||||
|
||||
private void SimulateClick(Control control)
|
||||
{
|
||||
var clientMousePosition = control.PointToClient(MousePosition);
|
||||
var temp_wLow = clientMousePosition.X;
|
||||
var temp_wHigh = clientMousePosition.Y;
|
||||
NativeMethods.SendMessage(control.Handle, NativeMethods.WM_LBUTTONDOWN, (IntPtr)NativeMethods.MK_LBUTTON, (IntPtr)NativeMethods.MAKELPARAM(ref temp_wLow, ref temp_wHigh));
|
||||
clientMousePosition.X = temp_wLow;
|
||||
clientMousePosition.Y = temp_wHigh;
|
||||
}
|
||||
|
||||
private void ActivateConnection()
|
||||
{
|
||||
var w = pnlDock.ActiveDocument as ConnectionWindow;
|
||||
|
||||
@@ -9,9 +9,7 @@ namespace mRemoteNG.UI.Window
|
||||
{
|
||||
public partial class ActiveDirectoryImportWindow
|
||||
{
|
||||
private string CurrentDomain;
|
||||
|
||||
#region Constructors
|
||||
private string _currentDomain;
|
||||
|
||||
public ActiveDirectoryImportWindow()
|
||||
{
|
||||
@@ -19,12 +17,10 @@ namespace mRemoteNG.UI.Window
|
||||
FontOverrider.FontOverride(this);
|
||||
WindowType = WindowType.ActiveDirectoryImport;
|
||||
DockPnl = new DockContent();
|
||||
CurrentDomain = Environment.UserDomainName;
|
||||
_currentDomain = Environment.UserDomainName;
|
||||
ApplyTheme();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private new void ApplyTheme()
|
||||
{
|
||||
base.ApplyTheme();
|
||||
@@ -38,8 +34,8 @@ namespace mRemoteNG.UI.Window
|
||||
private void ADImport_Load(object sender, EventArgs e)
|
||||
{
|
||||
ApplyLanguage();
|
||||
txtDomain.Text = CurrentDomain;
|
||||
ActiveDirectoryTree.Domain = CurrentDomain;
|
||||
txtDomain.Text = _currentDomain;
|
||||
ActiveDirectoryTree.Domain = _currentDomain;
|
||||
EnableDisableImportButton();
|
||||
|
||||
// Domain doesn't refresh on load, so it defaults to DOMAIN without this...
|
||||
@@ -94,8 +90,8 @@ namespace mRemoteNG.UI.Window
|
||||
|
||||
private void ChangeDomain()
|
||||
{
|
||||
CurrentDomain = txtDomain.Text;
|
||||
ActiveDirectoryTree.Domain = CurrentDomain;
|
||||
_currentDomain = txtDomain.Text;
|
||||
ActiveDirectoryTree.Domain = _currentDomain;
|
||||
ActiveDirectoryTree.Refresh();
|
||||
}
|
||||
|
||||
|
||||
@@ -727,6 +727,9 @@ namespace mRemoteNG.UI.Window
|
||||
private delegate void CloseTabDelegate(TabPage tabToBeClosed);
|
||||
private void CloseTab(TabPage tabToBeClosed)
|
||||
{
|
||||
if (tabToBeClosed.Disposing || tabToBeClosed.IsDisposed)
|
||||
return;
|
||||
|
||||
if (TabController.InvokeRequired)
|
||||
{
|
||||
CloseTabDelegate s = CloseTab;
|
||||
|
||||
746
mRemoteV1/UI/Window/PortScanWindow.Designer.cs
generated
746
mRemoteV1/UI/Window/PortScanWindow.Designer.cs
generated
@@ -36,120 +36,126 @@ namespace mRemoteNG.UI.Window
|
||||
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PortScanWindow));
|
||||
this.ipStart = new mRemoteNG.UI.Controls.IPTextBox();
|
||||
this.ipEnd = new mRemoteNG.UI.Controls.IPTextBox();
|
||||
this.lblStartIP = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.lblEndIP = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.btnScan = new Controls.Base.NGButton();
|
||||
this.olvHosts = new mRemoteNG.UI.Controls.Base.NGListView();
|
||||
this.resultsMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.importHTTPToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.importHTTPSToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.importRDPToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.importRloginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.importSSH2ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.importTelnetToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.importVNCToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.btnImport = new Controls.Base.NGButton();
|
||||
this.cbProtocol = new Controls.Base.NGComboBox();
|
||||
this.lblOnlyImport = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.clmHost = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
|
||||
this.clmSSH = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
|
||||
this.clmTelnet = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
|
||||
this.clmHTTP = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
|
||||
this.clmHTTPS = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
|
||||
this.clmRlogin = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
|
||||
this.clmRDP = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
|
||||
this.clmVNC = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
|
||||
this.clmOpenPorts = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
|
||||
this.clmClosedPorts = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
|
||||
this.prgBar = new mRemoteNG.UI.Controls.Base.NGProgressBar();
|
||||
this.pnlPorts = new System.Windows.Forms.Panel();
|
||||
this.portEnd = new Controls.Base.NGNumericUpDown();
|
||||
this.portStart = new Controls.Base.NGNumericUpDown();
|
||||
this.Label2 = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.Label1 = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.pnlImport = new System.Windows.Forms.Panel();
|
||||
((System.ComponentModel.ISupportInitialize)(this.olvHosts)).BeginInit();
|
||||
this.resultsMenuStrip.SuspendLayout();
|
||||
this.pnlPorts.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.portEnd)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.portStart)).BeginInit();
|
||||
this.pnlImport.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// ipStart
|
||||
//
|
||||
this.ipStart.Location = new System.Drawing.Point(12, 25);
|
||||
this.ipStart.Name = "ipStart";
|
||||
this.ipStart.Size = new System.Drawing.Size(130, 20);
|
||||
this.ipStart.TabIndex = 10;
|
||||
this.ipStart.ToolTipText = "";
|
||||
//
|
||||
// ipEnd
|
||||
//
|
||||
this.ipEnd.Location = new System.Drawing.Point(148, 25);
|
||||
this.ipEnd.Name = "ipEnd";
|
||||
this.ipEnd.Size = new System.Drawing.Size(130, 20);
|
||||
this.ipEnd.TabIndex = 15;
|
||||
this.ipEnd.ToolTipText = "";
|
||||
//
|
||||
// lblStartIP
|
||||
//
|
||||
this.lblStartIP.AutoSize = true;
|
||||
this.lblStartIP.Location = new System.Drawing.Point(12, 7);
|
||||
this.lblStartIP.Name = "lblStartIP";
|
||||
this.lblStartIP.Size = new System.Drawing.Size(46, 13);
|
||||
this.lblStartIP.TabIndex = 0;
|
||||
this.lblStartIP.Text = "Start IP:";
|
||||
//
|
||||
// lblEndIP
|
||||
//
|
||||
this.lblEndIP.AutoSize = true;
|
||||
this.lblEndIP.Location = new System.Drawing.Point(148, 7);
|
||||
this.lblEndIP.Name = "lblEndIP";
|
||||
this.lblEndIP.Size = new System.Drawing.Size(42, 13);
|
||||
this.lblEndIP.TabIndex = 5;
|
||||
this.lblEndIP.Text = "End IP:";
|
||||
//
|
||||
// btnScan
|
||||
//
|
||||
this.btnScan.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnScan.Image = global::mRemoteNG.Resources.Search;
|
||||
this.btnScan.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
this.btnScan.Location = new System.Drawing.Point(597, 12);
|
||||
this.btnScan.Name = "btnScan";
|
||||
this.btnScan.Size = new System.Drawing.Size(95, 55);
|
||||
this.btnScan.TabIndex = 20;
|
||||
this.btnScan.Text = "&Scan";
|
||||
this.btnScan.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
|
||||
this.btnScan.UseVisualStyleBackColor = true;
|
||||
this.btnScan.Click += new System.EventHandler(this.btnScan_Click);
|
||||
//
|
||||
// olvHosts
|
||||
//
|
||||
this.olvHosts.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PortScanWindow));
|
||||
this.ipStart = new mRemoteNG.UI.Controls.IPTextBox();
|
||||
this.ipEnd = new mRemoteNG.UI.Controls.IPTextBox();
|
||||
this.lblStartIP = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.lblEndIP = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.btnScan = new mRemoteNG.UI.Controls.Base.NGButton();
|
||||
this.olvHosts = new mRemoteNG.UI.Controls.Base.NGListView();
|
||||
this.resultsMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.importHTTPToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.importHTTPSToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.importRDPToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.importRloginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.importSSH2ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.importTelnetToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.importVNCToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.btnImport = new mRemoteNG.UI.Controls.Base.NGButton();
|
||||
this.cbProtocol = new mRemoteNG.UI.Controls.Base.NGComboBox();
|
||||
this.lblOnlyImport = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.clmHost = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
|
||||
this.clmSSH = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
|
||||
this.clmTelnet = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
|
||||
this.clmHTTP = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
|
||||
this.clmHTTPS = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
|
||||
this.clmRlogin = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
|
||||
this.clmRDP = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
|
||||
this.clmVNC = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
|
||||
this.clmOpenPorts = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
|
||||
this.clmClosedPorts = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
|
||||
this.prgBar = new mRemoteNG.UI.Controls.Base.NGProgressBar();
|
||||
this.pnlPorts = new System.Windows.Forms.Panel();
|
||||
this.numericSelectorTimeout = new mRemoteNG.UI.Controls.Base.NGNumericUpDown();
|
||||
this.lblTimeout = new System.Windows.Forms.Label();
|
||||
this.portEnd = new mRemoteNG.UI.Controls.Base.NGNumericUpDown();
|
||||
this.portStart = new mRemoteNG.UI.Controls.Base.NGNumericUpDown();
|
||||
this.Label2 = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.Label1 = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.pnlImport = new System.Windows.Forms.Panel();
|
||||
((System.ComponentModel.ISupportInitialize)(this.olvHosts)).BeginInit();
|
||||
this.resultsMenuStrip.SuspendLayout();
|
||||
this.pnlPorts.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.numericSelectorTimeout)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.portEnd)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.portStart)).BeginInit();
|
||||
this.pnlImport.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// ipStart
|
||||
//
|
||||
this.ipStart.Location = new System.Drawing.Point(12, 25);
|
||||
this.ipStart.Name = "ipStart";
|
||||
this.ipStart.Size = new System.Drawing.Size(130, 20);
|
||||
this.ipStart.TabIndex = 10;
|
||||
this.ipStart.ToolTipText = "";
|
||||
//
|
||||
// ipEnd
|
||||
//
|
||||
this.ipEnd.Location = new System.Drawing.Point(148, 25);
|
||||
this.ipEnd.Name = "ipEnd";
|
||||
this.ipEnd.Size = new System.Drawing.Size(130, 20);
|
||||
this.ipEnd.TabIndex = 15;
|
||||
this.ipEnd.ToolTipText = "";
|
||||
//
|
||||
// lblStartIP
|
||||
//
|
||||
this.lblStartIP.AutoSize = true;
|
||||
this.lblStartIP.Location = new System.Drawing.Point(12, 7);
|
||||
this.lblStartIP.Name = "lblStartIP";
|
||||
this.lblStartIP.Size = new System.Drawing.Size(46, 13);
|
||||
this.lblStartIP.TabIndex = 0;
|
||||
this.lblStartIP.Text = "Start IP:";
|
||||
//
|
||||
// lblEndIP
|
||||
//
|
||||
this.lblEndIP.AutoSize = true;
|
||||
this.lblEndIP.Location = new System.Drawing.Point(148, 7);
|
||||
this.lblEndIP.Name = "lblEndIP";
|
||||
this.lblEndIP.Size = new System.Drawing.Size(42, 13);
|
||||
this.lblEndIP.TabIndex = 5;
|
||||
this.lblEndIP.Text = "End IP:";
|
||||
//
|
||||
// btnScan
|
||||
//
|
||||
this.btnScan._mice = mRemoteNG.UI.Controls.Base.NGButton.MouseState.HOVER;
|
||||
this.btnScan.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnScan.Image = global::mRemoteNG.Resources.Search;
|
||||
this.btnScan.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
this.btnScan.Location = new System.Drawing.Point(801, 12);
|
||||
this.btnScan.Name = "btnScan";
|
||||
this.btnScan.Size = new System.Drawing.Size(95, 55);
|
||||
this.btnScan.TabIndex = 20;
|
||||
this.btnScan.Text = "&Scan";
|
||||
this.btnScan.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
|
||||
this.btnScan.UseVisualStyleBackColor = true;
|
||||
this.btnScan.Click += new System.EventHandler(this.btnScan_Click);
|
||||
//
|
||||
// olvHosts
|
||||
//
|
||||
this.olvHosts.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.olvHosts.CellEditUseWholeCell = false;
|
||||
this.olvHosts.ContextMenuStrip = this.resultsMenuStrip;
|
||||
this.olvHosts.FullRowSelect = true;
|
||||
this.olvHosts.GridLines = true;
|
||||
this.olvHosts.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
|
||||
this.olvHosts.HideSelection = false;
|
||||
this.olvHosts.Location = new System.Drawing.Point(12, 73);
|
||||
this.olvHosts.Name = "olvHosts";
|
||||
this.olvHosts.ShowGroups = false;
|
||||
this.olvHosts.Size = new System.Drawing.Size(680, 290);
|
||||
this.olvHosts.TabIndex = 26;
|
||||
this.olvHosts.UseCompatibleStateImageBehavior = false;
|
||||
this.olvHosts.View = System.Windows.Forms.View.Details;
|
||||
//
|
||||
// resultsMenuStrip
|
||||
//
|
||||
this.resultsMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.olvHosts.CellEditUseWholeCell = false;
|
||||
this.olvHosts.ContextMenuStrip = this.resultsMenuStrip;
|
||||
this.olvHosts.Cursor = System.Windows.Forms.Cursors.Default;
|
||||
this.olvHosts.DecorateLines = true;
|
||||
this.olvHosts.FullRowSelect = true;
|
||||
this.olvHosts.GridLines = true;
|
||||
this.olvHosts.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
|
||||
this.olvHosts.HideSelection = false;
|
||||
this.olvHosts.Location = new System.Drawing.Point(12, 73);
|
||||
this.olvHosts.Name = "olvHosts";
|
||||
this.olvHosts.ShowGroups = false;
|
||||
this.olvHosts.Size = new System.Drawing.Size(884, 290);
|
||||
this.olvHosts.TabIndex = 26;
|
||||
this.olvHosts.UseCompatibleStateImageBehavior = false;
|
||||
this.olvHosts.View = System.Windows.Forms.View.Details;
|
||||
//
|
||||
// resultsMenuStrip
|
||||
//
|
||||
this.resultsMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.importHTTPToolStripMenuItem,
|
||||
this.importHTTPSToolStripMenuItem,
|
||||
this.importRDPToolStripMenuItem,
|
||||
@@ -157,75 +163,77 @@ namespace mRemoteNG.UI.Window
|
||||
this.importSSH2ToolStripMenuItem,
|
||||
this.importTelnetToolStripMenuItem,
|
||||
this.importVNCToolStripMenuItem});
|
||||
this.resultsMenuStrip.Name = "resultsMenuStrip";
|
||||
this.resultsMenuStrip.Size = new System.Drawing.Size(150, 158);
|
||||
//
|
||||
// importHTTPToolStripMenuItem
|
||||
//
|
||||
this.importHTTPToolStripMenuItem.Name = "importHTTPToolStripMenuItem";
|
||||
this.importHTTPToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
|
||||
this.importHTTPToolStripMenuItem.Text = "Import HTTP";
|
||||
this.importHTTPToolStripMenuItem.Click += new System.EventHandler(this.importHTTPToolStripMenuItem_Click);
|
||||
//
|
||||
// importHTTPSToolStripMenuItem
|
||||
//
|
||||
this.importHTTPSToolStripMenuItem.Name = "importHTTPSToolStripMenuItem";
|
||||
this.importHTTPSToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
|
||||
this.importHTTPSToolStripMenuItem.Text = "Import HTTPS";
|
||||
this.importHTTPSToolStripMenuItem.Click += new System.EventHandler(this.importHTTPSToolStripMenuItem_Click);
|
||||
//
|
||||
// importRDPToolStripMenuItem
|
||||
//
|
||||
this.importRDPToolStripMenuItem.Name = "importRDPToolStripMenuItem";
|
||||
this.importRDPToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
|
||||
this.importRDPToolStripMenuItem.Text = "Import RDP";
|
||||
this.importRDPToolStripMenuItem.Click += new System.EventHandler(this.importRDPToolStripMenuItem_Click);
|
||||
//
|
||||
// importRloginToolStripMenuItem
|
||||
//
|
||||
this.importRloginToolStripMenuItem.Name = "importRloginToolStripMenuItem";
|
||||
this.importRloginToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
|
||||
this.importRloginToolStripMenuItem.Text = "Import Rlogin";
|
||||
this.importRloginToolStripMenuItem.Click += new System.EventHandler(this.importRloginToolStripMenuItem_Click);
|
||||
//
|
||||
// importSSH2ToolStripMenuItem
|
||||
//
|
||||
this.importSSH2ToolStripMenuItem.Name = "importSSH2ToolStripMenuItem";
|
||||
this.importSSH2ToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
|
||||
this.importSSH2ToolStripMenuItem.Text = "Import SSH2";
|
||||
this.importSSH2ToolStripMenuItem.Click += new System.EventHandler(this.importSSH2ToolStripMenuItem_Click);
|
||||
//
|
||||
// importTelnetToolStripMenuItem
|
||||
//
|
||||
this.importTelnetToolStripMenuItem.Name = "importTelnetToolStripMenuItem";
|
||||
this.importTelnetToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
|
||||
this.importTelnetToolStripMenuItem.Text = "Import Telnet";
|
||||
this.importTelnetToolStripMenuItem.Click += new System.EventHandler(this.importTelnetToolStripMenuItem_Click);
|
||||
//
|
||||
// importVNCToolStripMenuItem
|
||||
//
|
||||
this.importVNCToolStripMenuItem.Name = "importVNCToolStripMenuItem";
|
||||
this.importVNCToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
|
||||
this.importVNCToolStripMenuItem.Text = "Import VNC";
|
||||
this.importVNCToolStripMenuItem.Click += new System.EventHandler(this.importVNCToolStripMenuItem_Click);
|
||||
//
|
||||
// btnImport
|
||||
//
|
||||
this.btnImport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnImport.Location = new System.Drawing.Point(594, 3);
|
||||
this.btnImport.Name = "btnImport";
|
||||
this.btnImport.Size = new System.Drawing.Size(75, 31);
|
||||
this.btnImport.TabIndex = 101;
|
||||
this.btnImport.Text = "&Import";
|
||||
this.btnImport.UseVisualStyleBackColor = true;
|
||||
this.btnImport.Click += new System.EventHandler(this.btnImport_Click);
|
||||
//
|
||||
// cbProtocol
|
||||
//
|
||||
this.cbProtocol.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.cbProtocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cbProtocol.FormattingEnabled = true;
|
||||
this.cbProtocol.Items.AddRange(new object[] {
|
||||
this.resultsMenuStrip.Name = "resultsMenuStrip";
|
||||
this.resultsMenuStrip.Size = new System.Drawing.Size(150, 158);
|
||||
//
|
||||
// importHTTPToolStripMenuItem
|
||||
//
|
||||
this.importHTTPToolStripMenuItem.Name = "importHTTPToolStripMenuItem";
|
||||
this.importHTTPToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
|
||||
this.importHTTPToolStripMenuItem.Text = "Import HTTP";
|
||||
this.importHTTPToolStripMenuItem.Click += new System.EventHandler(this.importHTTPToolStripMenuItem_Click);
|
||||
//
|
||||
// importHTTPSToolStripMenuItem
|
||||
//
|
||||
this.importHTTPSToolStripMenuItem.Name = "importHTTPSToolStripMenuItem";
|
||||
this.importHTTPSToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
|
||||
this.importHTTPSToolStripMenuItem.Text = "Import HTTPS";
|
||||
this.importHTTPSToolStripMenuItem.Click += new System.EventHandler(this.importHTTPSToolStripMenuItem_Click);
|
||||
//
|
||||
// importRDPToolStripMenuItem
|
||||
//
|
||||
this.importRDPToolStripMenuItem.Name = "importRDPToolStripMenuItem";
|
||||
this.importRDPToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
|
||||
this.importRDPToolStripMenuItem.Text = "Import RDP";
|
||||
this.importRDPToolStripMenuItem.Click += new System.EventHandler(this.importRDPToolStripMenuItem_Click);
|
||||
//
|
||||
// importRloginToolStripMenuItem
|
||||
//
|
||||
this.importRloginToolStripMenuItem.Name = "importRloginToolStripMenuItem";
|
||||
this.importRloginToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
|
||||
this.importRloginToolStripMenuItem.Text = "Import Rlogin";
|
||||
this.importRloginToolStripMenuItem.Click += new System.EventHandler(this.importRloginToolStripMenuItem_Click);
|
||||
//
|
||||
// importSSH2ToolStripMenuItem
|
||||
//
|
||||
this.importSSH2ToolStripMenuItem.Name = "importSSH2ToolStripMenuItem";
|
||||
this.importSSH2ToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
|
||||
this.importSSH2ToolStripMenuItem.Text = "Import SSH2";
|
||||
this.importSSH2ToolStripMenuItem.Click += new System.EventHandler(this.importSSH2ToolStripMenuItem_Click);
|
||||
//
|
||||
// importTelnetToolStripMenuItem
|
||||
//
|
||||
this.importTelnetToolStripMenuItem.Name = "importTelnetToolStripMenuItem";
|
||||
this.importTelnetToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
|
||||
this.importTelnetToolStripMenuItem.Text = "Import Telnet";
|
||||
this.importTelnetToolStripMenuItem.Click += new System.EventHandler(this.importTelnetToolStripMenuItem_Click);
|
||||
//
|
||||
// importVNCToolStripMenuItem
|
||||
//
|
||||
this.importVNCToolStripMenuItem.Name = "importVNCToolStripMenuItem";
|
||||
this.importVNCToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
|
||||
this.importVNCToolStripMenuItem.Text = "Import VNC";
|
||||
this.importVNCToolStripMenuItem.Click += new System.EventHandler(this.importVNCToolStripMenuItem_Click);
|
||||
//
|
||||
// btnImport
|
||||
//
|
||||
this.btnImport._mice = mRemoteNG.UI.Controls.Base.NGButton.MouseState.HOVER;
|
||||
this.btnImport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnImport.Location = new System.Drawing.Point(798, 3);
|
||||
this.btnImport.Name = "btnImport";
|
||||
this.btnImport.Size = new System.Drawing.Size(75, 31);
|
||||
this.btnImport.TabIndex = 101;
|
||||
this.btnImport.Text = "&Import";
|
||||
this.btnImport.UseVisualStyleBackColor = true;
|
||||
this.btnImport.Click += new System.EventHandler(this.btnImport_Click);
|
||||
//
|
||||
// cbProtocol
|
||||
//
|
||||
this.cbProtocol._mice = mRemoteNG.UI.Controls.Base.NGComboBox.MouseState.HOVER;
|
||||
this.cbProtocol.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.cbProtocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cbProtocol.FormattingEnabled = true;
|
||||
this.cbProtocol.Items.AddRange(new object[] {
|
||||
"SSH2",
|
||||
"Telnet",
|
||||
"HTTP",
|
||||
@@ -233,190 +241,214 @@ namespace mRemoteNG.UI.Window
|
||||
"Rlogin",
|
||||
"RDP",
|
||||
"VNC"});
|
||||
this.cbProtocol.Location = new System.Drawing.Point(157, 6);
|
||||
this.cbProtocol.Name = "cbProtocol";
|
||||
this.cbProtocol.Size = new System.Drawing.Size(122, 21);
|
||||
this.cbProtocol.TabIndex = 28;
|
||||
//
|
||||
// lblOnlyImport
|
||||
//
|
||||
this.lblOnlyImport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.lblOnlyImport.AutoSize = true;
|
||||
this.lblOnlyImport.Location = new System.Drawing.Point(5, 13);
|
||||
this.lblOnlyImport.Name = "lblOnlyImport";
|
||||
this.lblOnlyImport.Size = new System.Drawing.Size(104, 13);
|
||||
this.lblOnlyImport.TabIndex = 1;
|
||||
this.lblOnlyImport.Text = "Protocol to import:";
|
||||
//
|
||||
// clmHost
|
||||
//
|
||||
this.clmHost.AspectName = "HostIPorName";
|
||||
this.clmHost.FillsFreeSpace = true;
|
||||
this.clmHost.Text = "Hostname/IP";
|
||||
this.clmHost.Width = 130;
|
||||
//
|
||||
// clmSSH
|
||||
//
|
||||
this.clmSSH.AspectName = "SshName";
|
||||
this.clmSSH.Text = "SSH";
|
||||
this.clmSSH.Width = 50;
|
||||
//
|
||||
// clmTelnet
|
||||
//
|
||||
this.clmTelnet.AspectName = "TelnetName";
|
||||
this.clmTelnet.Text = "Telnet";
|
||||
this.clmTelnet.Width = 50;
|
||||
//
|
||||
// clmHTTP
|
||||
//
|
||||
this.clmHTTP.AspectName = "HttpName";
|
||||
this.clmHTTP.Text = "HTTP";
|
||||
this.clmHTTP.Width = 50;
|
||||
//
|
||||
// clmHTTPS
|
||||
//
|
||||
this.clmHTTPS.AspectName = "HttpsName";
|
||||
this.clmHTTPS.Text = "HTTPS";
|
||||
this.clmHTTPS.Width = 50;
|
||||
//
|
||||
// clmRlogin
|
||||
//
|
||||
this.clmRlogin.AspectName = "RloginName";
|
||||
this.clmRlogin.Text = "Rlogin";
|
||||
this.clmRlogin.Width = 50;
|
||||
//
|
||||
// clmRDP
|
||||
//
|
||||
this.clmRDP.AspectName = "RdpName";
|
||||
this.clmRDP.Text = "RDP";
|
||||
this.clmRDP.Width = 50;
|
||||
//
|
||||
// clmVNC
|
||||
//
|
||||
this.clmVNC.AspectName = "VncName";
|
||||
this.clmVNC.Text = "VNC";
|
||||
this.clmVNC.Width = 50;
|
||||
//
|
||||
// clmOpenPorts
|
||||
//
|
||||
this.clmOpenPorts.AspectName = "OpenPortsName";
|
||||
this.clmOpenPorts.FillsFreeSpace = true;
|
||||
this.clmOpenPorts.Text = "Open Ports";
|
||||
this.clmOpenPorts.Width = 150;
|
||||
//
|
||||
// clmClosedPorts
|
||||
//
|
||||
this.clmClosedPorts.AspectName = "ClosedPortsName";
|
||||
this.clmClosedPorts.FillsFreeSpace = true;
|
||||
this.clmClosedPorts.Text = "Closed Ports";
|
||||
this.clmClosedPorts.Width = 150;
|
||||
//
|
||||
// prgBar
|
||||
//
|
||||
this.prgBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
this.cbProtocol.Location = new System.Drawing.Point(157, 6);
|
||||
this.cbProtocol.Name = "cbProtocol";
|
||||
this.cbProtocol.Size = new System.Drawing.Size(122, 21);
|
||||
this.cbProtocol.TabIndex = 28;
|
||||
//
|
||||
// lblOnlyImport
|
||||
//
|
||||
this.lblOnlyImport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.lblOnlyImport.AutoSize = true;
|
||||
this.lblOnlyImport.Location = new System.Drawing.Point(5, 13);
|
||||
this.lblOnlyImport.Name = "lblOnlyImport";
|
||||
this.lblOnlyImport.Size = new System.Drawing.Size(104, 13);
|
||||
this.lblOnlyImport.TabIndex = 1;
|
||||
this.lblOnlyImport.Text = "Protocol to import:";
|
||||
//
|
||||
// clmHost
|
||||
//
|
||||
this.clmHost.AspectName = "HostIPorName";
|
||||
this.clmHost.FillsFreeSpace = true;
|
||||
this.clmHost.Text = "Hostname/IP";
|
||||
this.clmHost.Width = 130;
|
||||
//
|
||||
// clmSSH
|
||||
//
|
||||
this.clmSSH.AspectName = "SshName";
|
||||
this.clmSSH.Text = "SSH";
|
||||
this.clmSSH.Width = 50;
|
||||
//
|
||||
// clmTelnet
|
||||
//
|
||||
this.clmTelnet.AspectName = "TelnetName";
|
||||
this.clmTelnet.Text = "Telnet";
|
||||
this.clmTelnet.Width = 50;
|
||||
//
|
||||
// clmHTTP
|
||||
//
|
||||
this.clmHTTP.AspectName = "HttpName";
|
||||
this.clmHTTP.Text = "HTTP";
|
||||
this.clmHTTP.Width = 50;
|
||||
//
|
||||
// clmHTTPS
|
||||
//
|
||||
this.clmHTTPS.AspectName = "HttpsName";
|
||||
this.clmHTTPS.Text = "HTTPS";
|
||||
this.clmHTTPS.Width = 50;
|
||||
//
|
||||
// clmRlogin
|
||||
//
|
||||
this.clmRlogin.AspectName = "RloginName";
|
||||
this.clmRlogin.Text = "Rlogin";
|
||||
this.clmRlogin.Width = 50;
|
||||
//
|
||||
// clmRDP
|
||||
//
|
||||
this.clmRDP.AspectName = "RdpName";
|
||||
this.clmRDP.Text = "RDP";
|
||||
this.clmRDP.Width = 50;
|
||||
//
|
||||
// clmVNC
|
||||
//
|
||||
this.clmVNC.AspectName = "VncName";
|
||||
this.clmVNC.Text = "VNC";
|
||||
this.clmVNC.Width = 50;
|
||||
//
|
||||
// clmOpenPorts
|
||||
//
|
||||
this.clmOpenPorts.AspectName = "OpenPortsName";
|
||||
this.clmOpenPorts.FillsFreeSpace = true;
|
||||
this.clmOpenPorts.Text = "Open Ports";
|
||||
this.clmOpenPorts.Width = 150;
|
||||
//
|
||||
// clmClosedPorts
|
||||
//
|
||||
this.clmClosedPorts.AspectName = "ClosedPortsName";
|
||||
this.clmClosedPorts.FillsFreeSpace = true;
|
||||
this.clmClosedPorts.Text = "Closed Ports";
|
||||
this.clmClosedPorts.Width = 150;
|
||||
//
|
||||
// prgBar
|
||||
//
|
||||
this.prgBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.prgBar.Location = new System.Drawing.Point(12, 50);
|
||||
this.prgBar.Name = "prgBar";
|
||||
this.prgBar.Size = new System.Drawing.Size(571, 16);
|
||||
this.prgBar.Step = 1;
|
||||
this.prgBar.TabIndex = 28;
|
||||
//
|
||||
// pnlPorts
|
||||
//
|
||||
this.pnlPorts.Controls.Add(this.portEnd);
|
||||
this.pnlPorts.Controls.Add(this.portStart);
|
||||
this.pnlPorts.Controls.Add(this.Label2);
|
||||
this.pnlPorts.Controls.Add(this.Label1);
|
||||
this.pnlPorts.Location = new System.Drawing.Point(284, 7);
|
||||
this.pnlPorts.Name = "pnlPorts";
|
||||
this.pnlPorts.Size = new System.Drawing.Size(307, 38);
|
||||
this.pnlPorts.TabIndex = 18;
|
||||
//
|
||||
// portEnd
|
||||
//
|
||||
this.portEnd.Location = new System.Drawing.Point(232, 12);
|
||||
this.portEnd.Maximum = new decimal(new int[] {
|
||||
this.prgBar.Location = new System.Drawing.Point(15, 51);
|
||||
this.prgBar.Name = "prgBar";
|
||||
this.prgBar.Size = new System.Drawing.Size(775, 16);
|
||||
this.prgBar.Step = 1;
|
||||
this.prgBar.TabIndex = 28;
|
||||
//
|
||||
// pnlPorts
|
||||
//
|
||||
this.pnlPorts.Controls.Add(this.numericSelectorTimeout);
|
||||
this.pnlPorts.Controls.Add(this.lblTimeout);
|
||||
this.pnlPorts.Controls.Add(this.portEnd);
|
||||
this.pnlPorts.Controls.Add(this.portStart);
|
||||
this.pnlPorts.Controls.Add(this.Label2);
|
||||
this.pnlPorts.Controls.Add(this.Label1);
|
||||
this.pnlPorts.Location = new System.Drawing.Point(284, 7);
|
||||
this.pnlPorts.Name = "pnlPorts";
|
||||
this.pnlPorts.Size = new System.Drawing.Size(506, 38);
|
||||
this.pnlPorts.TabIndex = 18;
|
||||
//
|
||||
// numericSelectorTimeout
|
||||
//
|
||||
this.numericSelectorTimeout.Location = new System.Drawing.Point(436, 12);
|
||||
this.numericSelectorTimeout.Maximum = new decimal(new int[] {
|
||||
2147482,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.numericSelectorTimeout.Name = "numericSelectorTimeout";
|
||||
this.numericSelectorTimeout.Size = new System.Drawing.Size(67, 22);
|
||||
this.numericSelectorTimeout.TabIndex = 17;
|
||||
//
|
||||
// lblTimeout
|
||||
//
|
||||
this.lblTimeout.AutoSize = true;
|
||||
this.lblTimeout.Location = new System.Drawing.Point(315, 14);
|
||||
this.lblTimeout.Name = "lblTimeout";
|
||||
this.lblTimeout.Size = new System.Drawing.Size(102, 13);
|
||||
this.lblTimeout.TabIndex = 16;
|
||||
this.lblTimeout.Text = "Timeout (seconds):";
|
||||
//
|
||||
// portEnd
|
||||
//
|
||||
this.portEnd.Location = new System.Drawing.Point(232, 12);
|
||||
this.portEnd.Maximum = new decimal(new int[] {
|
||||
65535,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.portEnd.Name = "portEnd";
|
||||
this.portEnd.Size = new System.Drawing.Size(67, 22);
|
||||
this.portEnd.TabIndex = 15;
|
||||
this.portEnd.Enter += new System.EventHandler(this.portEnd_Enter);
|
||||
//
|
||||
// portStart
|
||||
//
|
||||
this.portStart.Location = new System.Drawing.Point(79, 12);
|
||||
this.portStart.Maximum = new decimal(new int[] {
|
||||
this.portEnd.Name = "portEnd";
|
||||
this.portEnd.Size = new System.Drawing.Size(67, 22);
|
||||
this.portEnd.TabIndex = 15;
|
||||
this.portEnd.Enter += new System.EventHandler(this.portEnd_Enter);
|
||||
//
|
||||
// portStart
|
||||
//
|
||||
this.portStart.Location = new System.Drawing.Point(79, 12);
|
||||
this.portStart.Maximum = new decimal(new int[] {
|
||||
65535,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.portStart.Name = "portStart";
|
||||
this.portStart.Size = new System.Drawing.Size(67, 22);
|
||||
this.portStart.TabIndex = 5;
|
||||
this.portStart.Enter += new System.EventHandler(this.portStart_Enter);
|
||||
//
|
||||
// Label2
|
||||
//
|
||||
this.Label2.AutoSize = true;
|
||||
this.Label2.Location = new System.Drawing.Point(162, 16);
|
||||
this.Label2.Name = "Label2";
|
||||
this.Label2.Size = new System.Drawing.Size(54, 13);
|
||||
this.Label2.TabIndex = 10;
|
||||
this.Label2.Text = "End Port:";
|
||||
//
|
||||
// Label1
|
||||
//
|
||||
this.Label1.AutoSize = true;
|
||||
this.Label1.Location = new System.Drawing.Point(3, 17);
|
||||
this.Label1.Name = "Label1";
|
||||
this.Label1.Size = new System.Drawing.Size(58, 13);
|
||||
this.Label1.TabIndex = 0;
|
||||
this.Label1.Text = "Start Port:";
|
||||
//
|
||||
// pnlImport
|
||||
//
|
||||
this.pnlImport.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
|
||||
this.portStart.Name = "portStart";
|
||||
this.portStart.Size = new System.Drawing.Size(67, 22);
|
||||
this.portStart.TabIndex = 5;
|
||||
this.portStart.Enter += new System.EventHandler(this.portStart_Enter);
|
||||
//
|
||||
// Label2
|
||||
//
|
||||
this.Label2.AutoSize = true;
|
||||
this.Label2.Location = new System.Drawing.Point(160, 14);
|
||||
this.Label2.Name = "Label2";
|
||||
this.Label2.Size = new System.Drawing.Size(54, 13);
|
||||
this.Label2.TabIndex = 10;
|
||||
this.Label2.Text = "End Port:";
|
||||
//
|
||||
// Label1
|
||||
//
|
||||
this.Label1.AutoSize = true;
|
||||
this.Label1.Location = new System.Drawing.Point(7, 14);
|
||||
this.Label1.Name = "Label1";
|
||||
this.Label1.Size = new System.Drawing.Size(58, 13);
|
||||
this.Label1.TabIndex = 0;
|
||||
this.Label1.Text = "Start Port:";
|
||||
//
|
||||
// pnlImport
|
||||
//
|
||||
this.pnlImport.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.pnlImport.Controls.Add(this.btnImport);
|
||||
this.pnlImport.Controls.Add(this.lblOnlyImport);
|
||||
this.pnlImport.Controls.Add(this.cbProtocol);
|
||||
this.pnlImport.Location = new System.Drawing.Point(12, 369);
|
||||
this.pnlImport.Name = "pnlImport";
|
||||
this.pnlImport.Size = new System.Drawing.Size(680, 40);
|
||||
this.pnlImport.TabIndex = 102;
|
||||
//
|
||||
// PortScanWindow
|
||||
//
|
||||
this.AcceptButton = this.btnImport;
|
||||
this.ClientSize = new System.Drawing.Size(704, 421);
|
||||
this.Controls.Add(this.pnlImport);
|
||||
this.Controls.Add(this.olvHosts);
|
||||
this.Controls.Add(this.pnlPorts);
|
||||
this.Controls.Add(this.prgBar);
|
||||
this.Controls.Add(this.btnScan);
|
||||
this.Controls.Add(this.lblEndIP);
|
||||
this.Controls.Add(this.lblStartIP);
|
||||
this.Controls.Add(this.ipEnd);
|
||||
this.Controls.Add(this.ipStart);
|
||||
this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.Name = "PortScanWindow";
|
||||
this.TabText = "Port Scan";
|
||||
this.Text = "Port Scan";
|
||||
this.Load += new System.EventHandler(this.PortScan_Load);
|
||||
((System.ComponentModel.ISupportInitialize)(this.olvHosts)).EndInit();
|
||||
this.resultsMenuStrip.ResumeLayout(false);
|
||||
this.pnlPorts.ResumeLayout(false);
|
||||
this.pnlPorts.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.portEnd)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.portStart)).EndInit();
|
||||
this.pnlImport.ResumeLayout(false);
|
||||
this.pnlImport.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
this.pnlImport.Controls.Add(this.btnImport);
|
||||
this.pnlImport.Controls.Add(this.lblOnlyImport);
|
||||
this.pnlImport.Controls.Add(this.cbProtocol);
|
||||
this.pnlImport.Location = new System.Drawing.Point(12, 369);
|
||||
this.pnlImport.Name = "pnlImport";
|
||||
this.pnlImport.Size = new System.Drawing.Size(884, 40);
|
||||
this.pnlImport.TabIndex = 102;
|
||||
//
|
||||
// PortScanWindow
|
||||
//
|
||||
this.AcceptButton = this.btnImport;
|
||||
this.ClientSize = new System.Drawing.Size(908, 421);
|
||||
this.Controls.Add(this.pnlImport);
|
||||
this.Controls.Add(this.olvHosts);
|
||||
this.Controls.Add(this.pnlPorts);
|
||||
this.Controls.Add(this.prgBar);
|
||||
this.Controls.Add(this.btnScan);
|
||||
this.Controls.Add(this.lblEndIP);
|
||||
this.Controls.Add(this.lblStartIP);
|
||||
this.Controls.Add(this.ipEnd);
|
||||
this.Controls.Add(this.ipStart);
|
||||
this.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.Name = "PortScanWindow";
|
||||
this.TabText = "Port Scan";
|
||||
this.Text = "Port Scan";
|
||||
this.Load += new System.EventHandler(this.PortScan_Load);
|
||||
((System.ComponentModel.ISupportInitialize)(this.olvHosts)).EndInit();
|
||||
this.resultsMenuStrip.ResumeLayout(false);
|
||||
this.pnlPorts.ResumeLayout(false);
|
||||
this.pnlPorts.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.numericSelectorTimeout)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.portEnd)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.portStart)).EndInit();
|
||||
this.pnlImport.ResumeLayout(false);
|
||||
this.pnlImport.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
internal System.Windows.Forms.Panel pnlImport;
|
||||
@@ -431,5 +463,7 @@ namespace mRemoteNG.UI.Window
|
||||
private System.Windows.Forms.ToolStripMenuItem importSSH2ToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem importTelnetToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem importVNCToolStripMenuItem;
|
||||
}
|
||||
private System.Windows.Forms.Label lblTimeout;
|
||||
private Controls.Base.NGNumericUpDown numericSelectorTimeout;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,6 @@ using mRemoteNG.Container;
|
||||
using mRemoteNG.Messages;
|
||||
using mRemoteNG.Tools;
|
||||
using WeifenLuo.WinFormsUI.Docking;
|
||||
using static mRemoteNG.Tools.MiscTools;
|
||||
|
||||
namespace mRemoteNG.UI.Window
|
||||
{
|
||||
@@ -90,6 +89,7 @@ namespace mRemoteNG.UI.Window
|
||||
olvHosts.Columns.AddRange(new[]{clmHost, clmSSH, clmTelnet, clmHTTP, clmHTTPS, clmRlogin, clmRDP, clmVNC, clmOpenPorts, clmClosedPorts});
|
||||
ShowImportControls(true);
|
||||
cbProtocol.SelectedIndex = 0;
|
||||
numericSelectorTimeout.Value = 5;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -128,7 +128,7 @@ namespace mRemoteNG.UI.Window
|
||||
|
||||
private void btnImport_Click(object sender, EventArgs e)
|
||||
{
|
||||
ProtocolType protocol = (ProtocolType)StringToEnum(typeof(ProtocolType), Convert.ToString(cbProtocol.SelectedItem));
|
||||
ProtocolType protocol = (ProtocolType)Enum.Parse(typeof(ProtocolType), Convert.ToString(cbProtocol.SelectedItem), true);
|
||||
importSelectedHosts(protocol);
|
||||
DialogResult = DialogResult.OK;
|
||||
Close();
|
||||
@@ -147,6 +147,7 @@ namespace mRemoteNG.UI.Window
|
||||
clmClosedPorts.Text = Language.strClosedPorts;
|
||||
Label2.Text = $"{Language.strEndPort}:";
|
||||
Label1.Text = $"{Language.strStartPort}:";
|
||||
lblTimeout.Text = $"{Language.TimeoutInSeconds}";
|
||||
TabText = Language.strMenuPortScan;
|
||||
Text = Language.strMenuPortScan;
|
||||
}
|
||||
@@ -176,7 +177,7 @@ namespace mRemoteNG.UI.Window
|
||||
System.Net.IPAddress ipAddressStart = System.Net.IPAddress.Parse(ipStart.Text);
|
||||
System.Net.IPAddress ipAddressEnd = System.Net.IPAddress.Parse(ipEnd.Text);
|
||||
|
||||
_portScanner = new PortScanner(ipAddressStart, ipAddressEnd, (int) portStart.Value, (int) portEnd.Value);
|
||||
_portScanner = new PortScanner(ipAddressStart, ipAddressEnd, (int) portStart.Value, (int) portEnd.Value, ((int)numericSelectorTimeout.Value)*1000);
|
||||
|
||||
_portScanner.BeginHostScan += PortScanner_BeginHostScan;
|
||||
_portScanner.HostScanned += PortScanner_HostScanned;
|
||||
|
||||
@@ -157,6 +157,7 @@
|
||||
<Compile Include="Config\DataProviders\FileBackupPruner.cs" />
|
||||
<Compile Include="Config\DataProviders\InMemoryStringDataProvider.cs" />
|
||||
<Compile Include="Config\ILoader.cs" />
|
||||
<Compile Include="Config\Import\MRemoteNGCsvImporter.cs" />
|
||||
<Compile Include="Config\ISaver.cs" />
|
||||
<Compile Include="Config\Serializers\CredentialProviderSerializer\CredentialRepositoryListDeserializer.cs" />
|
||||
<Compile Include="Config\CredentialRepositoryListLoader.cs" />
|
||||
@@ -166,14 +167,15 @@
|
||||
<Compile Include="Config\Serializers\ISecureSerializer.cs" />
|
||||
<Compile Include="Config\Serializers\MiscSerializers\ActiveDirectoryDeserializer.cs" />
|
||||
<Compile Include="Config\Serializers\CredentialProviderSerializer\CredentialRepositoryListSerializer.cs" />
|
||||
<Compile Include="Config\Serializers\MiscSerializers\CsvConnectionsSerializerMremotengFormat.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\Csv\CsvConnectionsDeserializerMremotengFormat.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\Csv\CsvConnectionsSerializerMremotengFormat.cs" />
|
||||
<Compile Include="Config\Serializers\DataTableDeserializer.cs" />
|
||||
<Compile Include="Config\Serializers\DataTableSerializer.cs" />
|
||||
<Compile Include="Config\Serializers\MiscSerializers\PortScanDeserializer.cs" />
|
||||
<Compile Include="Config\Serializers\MiscSerializers\PuttyConnectionManagerDeserializer.cs" />
|
||||
<Compile Include="Config\Serializers\MiscSerializers\RemoteDesktopConnectionDeserializer.cs" />
|
||||
<Compile Include="Config\Serializers\MiscSerializers\RemoteDesktopConnectionManagerDeserializer.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\XmlConnectionNodeSerializer26.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\Xml\XmlConnectionNodeSerializer26.cs" />
|
||||
<Compile Include="Config\Serializers\Versioning\SqlDatabaseVersionRetriever.cs" />
|
||||
<Compile Include="Config\Serializers\Versioning\IVersionUpgrader.cs" />
|
||||
<Compile Include="Config\Serializers\Versioning\SqlVersion22To23Upgrader.cs" />
|
||||
@@ -186,17 +188,17 @@
|
||||
<Compile Include="Config\Serializers\IDeserializer.cs" />
|
||||
<Compile Include="Config\Import\IConnectionImporter.cs" />
|
||||
<Compile Include="Config\Serializers\ISerializer.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\XmlConnectionsDocumentCompiler.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\XmlConnectionsDocumentEncryptor.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\XmlConnectionsSerializer.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\Xml\XmlConnectionsDocumentCompiler.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\Xml\XmlConnectionsDocumentEncryptor.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\Xml\XmlConnectionsSerializer.cs" />
|
||||
<Compile Include="Config\DataProviders\FileDataProvider.cs" />
|
||||
<Compile Include="Config\DataProviders\IDataProvider.cs" />
|
||||
<Compile Include="Config\Connections\Multiuser\SqlConnectionsUpdateChecker.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\XmlConnectionsDeserializer.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\Xml\XmlConnectionsDeserializer.cs" />
|
||||
<Compile Include="Config\Putty\PuttySessionChangedEventArgs.cs" />
|
||||
<Compile Include="Config\Serializers\CredentialSerializer\XmlCredentialRecordDeserializer.cs" />
|
||||
<Compile Include="Config\Serializers\CredentialSerializer\XmlCredentialRecordSerializer.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\XmlRootNodeSerializer.cs" />
|
||||
<Compile Include="Config\Serializers\ConnectionSerializers\Xml\XmlRootNodeSerializer.cs" />
|
||||
<Compile Include="Config\Serializers\ConfConsEnsureConnectionsHaveIds.cs" />
|
||||
<Compile Include="Config\Settings\DockPanelLayoutSerializer.cs" />
|
||||
<Compile Include="Config\Settings\ExternalAppsLoader.cs" />
|
||||
@@ -209,7 +211,7 @@
|
||||
<Compile Include="Config\Settings\SettingsSaver.cs" />
|
||||
<Compile Include="Config\ConfirmCloseEnum.cs" />
|
||||
<Compile Include="Config\Import\ActiveDirectoryImporter.cs" />
|
||||
<Compile Include="Config\Import\mRemoteNGImporter.cs" />
|
||||
<Compile Include="Config\Import\MRemoteNGXmlImporter.cs" />
|
||||
<Compile Include="Config\Import\PortScanImporter.cs" />
|
||||
<Compile Include="Config\Import\PuttyConnectionManagerImporter.cs" />
|
||||
<Compile Include="Config\Import\RemoteDesktopConnectionImporter.cs" />
|
||||
@@ -319,7 +321,7 @@
|
||||
<Compile Include="Tools\ExternalToolsService.cs" />
|
||||
<Compile Include="Tools\ExternalToolsTypeConverter.cs" />
|
||||
<Compile Include="Tools\CustomCollections\INotifyCollectionUpdated.cs" />
|
||||
<Compile Include="Tools\Maybe.cs" />
|
||||
<Compile Include="Tools\Optional.cs" />
|
||||
<Compile Include="Tools\MultiSSHController.cs" />
|
||||
<Compile Include="Tools\MouseClickSimulator.cs" />
|
||||
<Compile Include="Tools\NotificationAreaIcon.cs" />
|
||||
@@ -962,9 +964,10 @@
|
||||
<None Include="Schemas\mremoteng_confcons_v2_7.xsd">
|
||||
<SubType>Designer</SubType>
|
||||
</None>
|
||||
<None Include="Schemas\mremoteng_confcons_v2_6.xsd">
|
||||
<Content Include="Schemas\mremoteng_confcons_v2_6.xsd">
|
||||
<SubType>Designer</SubType>
|
||||
</None>
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<None Include="Schemas\mremoteng_credrepo_list_v1_0.xsd">
|
||||
<SubType>Designer</SubType>
|
||||
</None>
|
||||
|
||||
Reference in New Issue
Block a user