mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-26 03:58:45 +08:00
Compare commits
70 Commits
refactor_r
...
v1.76Alpha
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e872581d3c | ||
|
|
defe9e094c | ||
|
|
5662735cb8 | ||
|
|
8646dce21b | ||
|
|
99a3eabbaf | ||
|
|
c57bd386f2 | ||
|
|
f2a52b03df | ||
|
|
860e1ccfaa | ||
|
|
49967b38d4 | ||
|
|
36038fff6d | ||
|
|
c5958954b0 | ||
|
|
d0d63016ca | ||
|
|
35f2484adf | ||
|
|
c2cf496ded | ||
|
|
8a172f02a9 | ||
|
|
f27935ea61 | ||
|
|
043df0aec3 | ||
|
|
63a2e18760 | ||
|
|
c3ced7ed03 | ||
|
|
f597e14b3d | ||
|
|
aff4ba9115 | ||
|
|
554e0805e3 | ||
|
|
f4efa74a23 | ||
|
|
ddc19587fa | ||
|
|
5f1232727e | ||
|
|
9c373e8f0a | ||
|
|
83942d788f | ||
|
|
73d6fec6f3 | ||
|
|
a37b5deaa1 | ||
|
|
3b9de847e7 | ||
|
|
924f1f1e48 | ||
|
|
7bdebbe25b | ||
|
|
8f46c25dc9 | ||
|
|
8bb4a03639 | ||
|
|
7b5bc5e057 | ||
|
|
35582a5e6a | ||
|
|
20340fd31f | ||
|
|
d6d7664b48 | ||
|
|
ce97e63876 | ||
|
|
378b98ff89 | ||
|
|
ce31199e57 | ||
|
|
227f3b2924 | ||
|
|
5076f1354c | ||
|
|
e5a34388ae | ||
|
|
6a5f65c018 | ||
|
|
6d5f41b3d8 | ||
|
|
64f10ead63 | ||
|
|
575dae446f | ||
|
|
9b438576f2 | ||
|
|
cbd32f1a07 | ||
|
|
516182ec40 | ||
|
|
4ad3a68d80 | ||
|
|
2f9ba32c07 | ||
|
|
dfc45a2904 | ||
|
|
563fdffb67 | ||
|
|
f2e9c5e2c0 | ||
|
|
86a591364c | ||
|
|
2a82485f81 | ||
|
|
e13549d361 | ||
|
|
a85c1bd7d3 | ||
|
|
946679f490 | ||
|
|
b6f27eac18 | ||
|
|
2cc82145a3 | ||
|
|
2dae0f2d8e | ||
|
|
412f6edc36 | ||
|
|
764791b8e5 | ||
|
|
bd20d6ae7d | ||
|
|
8db0bf7bea | ||
|
|
cff6aa72fc | ||
|
|
63ddf06057 |
38
.github/ISSUE_TEMPLATE.md
vendored
38
.github/ISSUE_TEMPLATE.md
vendored
@@ -1,16 +1,30 @@
|
||||
<!--
|
||||
Only file GitHub issues for bugs and feature requests. All other topics will be closed.
|
||||
<!--- Provide a general summary of the issue in the Title above -->
|
||||
|
||||
Before opening an issue, please search for a duplicate or closed issue.
|
||||
Please provide as much detail as possible for us to fix your issue.
|
||||
-->
|
||||
## Expected Behavior
|
||||
<!--- If you're describing a bug, tell us what should happen -->
|
||||
<!--- If you're suggesting a change/improvement, tell us how it should work -->
|
||||
|
||||
<!-- Bug -->
|
||||
|Detail|Value|
|
||||
|--:|---|
|
||||
|Operating system | Windows 10 x64 |
|
||||
|mRemoteNG version| 1.75.7008 |
|
||||
## Current Behavior
|
||||
<!--- If describing a bug, tell us what happens instead of the expected behavior -->
|
||||
<!--- If suggesting a change/improvement, explain the difference from current behavior -->
|
||||
|
||||
## Possible Solution
|
||||
<!--- Not obligatory, but suggest a fix/reason for the bug, -->
|
||||
<!--- or ideas how to implement the addition or change -->
|
||||
|
||||
<!-- Feature Request -->
|
||||
<!-- If you file a feature request, please delete the bug section -->
|
||||
## Steps to Reproduce (for bugs)
|
||||
<!--- Provide an unambiguous set of steps to reproduce -->
|
||||
<!--- this bug. Include code to reproduce, if relevant -->
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
4.
|
||||
|
||||
## Context
|
||||
<!--- How has this issue affected you? What are you trying to accomplish? -->
|
||||
<!--- Providing context helps us come up with a solution that is most useful in the real world -->
|
||||
|
||||
## Your Environment
|
||||
<!--- Include as many relevant details about the environment you experienced the bug in -->
|
||||
* Version used:
|
||||
* Operating System and version (e.g. Windows 10 1709 x64):
|
||||
|
||||
33
.github/PULL_REQUEST_TEMPLATE.md
vendored
33
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,4 +1,29 @@
|
||||
<!--
|
||||
Please provide as much detail as possible with what your pull request does.
|
||||
Include a reference to a filed issue if it exists.
|
||||
-->
|
||||
<!--- Provide a general summary of your changes in the Title above -->
|
||||
|
||||
## Description
|
||||
<!--- Describe your changes in detail -->
|
||||
|
||||
## Motivation and Context
|
||||
<!--- Why is this change required? What problem does it solve? -->
|
||||
<!--- If it fixes an open issue, please link to the issue here. -->
|
||||
|
||||
## How Has This Been Tested?
|
||||
<!--- Please describe in detail how you tested your changes. -->
|
||||
<!--- Include details of your testing environment, and the tests you ran to -->
|
||||
<!--- see how your change affects other areas of the code, etc. -->
|
||||
|
||||
## Screenshots (if appropriate):
|
||||
|
||||
## Types of changes
|
||||
<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: -->
|
||||
- [ ] Bug fix (non-breaking change which fixes an issue)
|
||||
- [ ] New feature (non-breaking change which adds functionality)
|
||||
- [ ] Breaking change (fix or feature that would cause existing functionality to change)
|
||||
|
||||
## Checklist:
|
||||
<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
|
||||
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
|
||||
- [ ] My code follows the code style of this project.
|
||||
- [ ] My change requires a change to the documentation.
|
||||
- [ ] I have updated the documentation accordingly.
|
||||
- [ ] I have read the **CONTRIBUTING** document.
|
||||
|
||||
@@ -1,12 +1,44 @@
|
||||
1.76.0 Alpha 3 (2018-xx-xx):
|
||||
1.76.4 Alpha 6 (2018-06-03):
|
||||
|
||||
Features/Enhancements:
|
||||
----------------------
|
||||
#948: Fixed issue where many menu item translations were not being used
|
||||
#942: Improved Russian translation of several items
|
||||
#924: Notification for "No Host Specified" when clicking folders in quick-connect menu
|
||||
#902: Menu bar can once again be moved. View -> "Lock toolbar positions" now also locks the menu position
|
||||
Added option for creating an empty panel on startup
|
||||
|
||||
Fixes:
|
||||
------
|
||||
#938: Minor layout improvements on the Port Scan screen
|
||||
#916: Default properties were not being saved
|
||||
|
||||
|
||||
1.76.3 Alpha 5 (2018-03-14):
|
||||
|
||||
Fixes:
|
||||
------
|
||||
#911: Csv exports sometimes do not include all fields
|
||||
#807: Inheritance is sometimes turned on for nodes under root Connections node
|
||||
|
||||
|
||||
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):
|
||||
|
||||
@@ -23,6 +23,7 @@ github.com/DamianBis
|
||||
github.com/pfjason
|
||||
github.com/sirLoaf
|
||||
github.com/Fyers
|
||||
Vladimir Semenov (github.com/sli-pro)
|
||||
|
||||
|
||||
Past Contributors
|
||||
@@ -59,6 +60,8 @@ Lukas Plachy (github.com/rheingold)
|
||||
Gyuha Shin
|
||||
Stefan (github.com/polluks)
|
||||
github.com/emazv72
|
||||
Vladimir Semenov (github.com/sli-pro)
|
||||
Marco Sousa (github.com/marcomsousa)
|
||||
|
||||
|
||||
Included Source Code
|
||||
|
||||
8
Jenkinsfile
vendored
8
Jenkinsfile
vendored
@@ -1,8 +1,8 @@
|
||||
#!groovy
|
||||
node('windows') {
|
||||
def jobDir = pwd()
|
||||
def solutionFilePath = "\"${jobDir}\\mRemoteV1.sln\""
|
||||
def vsToolsDir = "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\Tools"
|
||||
def vsExtensionsDir = "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\IDE\\CommonExtensions\\Microsoft\\TestWindow"
|
||||
def msBuild = "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\MSBuild\\15.0\\Bin\\msbuild.exe"
|
||||
def nunitConsolePath = "${jobDir}\\packages\\NUnit.ConsoleRunner.3.7.0\\tools\\nunit3-console.exe"
|
||||
def openCoverPath = "${jobDir}\\packages\\OpenCover.4.6.519\\tools\\OpenCover.Console.exe"
|
||||
def reportGeneratorPath = "${jobDir}\\packages\\ReportGenerator.3.0.2\\tools\\ReportGenerator.exe"
|
||||
@@ -24,11 +24,11 @@ node('windows') {
|
||||
}
|
||||
|
||||
stage ('Build mRemoteNG (Normal)') {
|
||||
bat "\"${vsToolsDir}\\VsDevCmd.bat\" && msbuild.exe /nologo /p:Platform=x86 \"${jobDir}\\mRemoteV1.sln\""
|
||||
bat "\"${msBuild}\" /nologo /p:Platform=x86 \"${jobDir}\\mRemoteV1.sln\""
|
||||
}
|
||||
|
||||
stage ('Build mRemoteNG (Portable)') {
|
||||
bat "\"${vsToolsDir}\\VsDevCmd.bat\" && msbuild.exe /nologo /p:Configuration=\"Debug Portable\";Platform=x86 \"${jobDir}\\mRemoteV1.sln\""
|
||||
bat "\"${msBuild}\" /nologo /p:Configuration=\"Debug Portable\";Platform=x86 \"${jobDir}\\mRemoteV1.sln\""
|
||||
}
|
||||
|
||||
stage ('Run Unit Tests (Normal, w/coverage)') {
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
|
||||
| Update Channel | Build Status | Downloads |
|
||||
| ---------------|--------------|-----------|
|
||||
| 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) | [](https://github.com/mRemoteNG/mRemoteNG/releases/tag/v1.76Alpha2) |
|
||||
| Stable | [](https://ci.appveyor.com/project/mremoteng/mremoteng/branch/master) | [](https://github.com/mRemoteNG/mRemoteNG/releases/tag/v1.75.7012) |
|
||||
| Beta | | [](https://github.com/mRemoteNG/mRemoteNG/releases/tag/v1.75.7012) |
|
||||
| Development | [](https://ci.appveyor.com/project/mremoteng/mremoteng/branch/develop) | [](https://github.com/mRemoteNG/mRemoteNG/releases/tag/v1.76Alpha5) |
|
||||
|
||||
mRemoteNG is the next generation of mRemote, a full-featured, multi-tab remote connections manager.
|
||||
|
||||
|
||||
114
Tools/CreateBulkConnections_ConfCons2_6.ps1
Normal file
114
Tools/CreateBulkConnections_ConfCons2_6.ps1
Normal file
@@ -0,0 +1,114 @@
|
||||
#####################################
|
||||
# Author: David Sparer
|
||||
# Summary:
|
||||
# This is intended to be a template for creating connections in bulk. This uses the serializers directly from the mRemoteNG binaries.
|
||||
# You will still need to create the connection info objects, but the library will handle serialization. It is expected that you
|
||||
# are familiar with PowerShell. If this is not the case, reach out to the mRemoteNG community for help.
|
||||
# Usage:
|
||||
# Replace or modify the examples that are shown toward the end of the script to create your own connection info objects.
|
||||
#####################################
|
||||
|
||||
$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 = ""
|
||||
|
||||
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, no containers
|
||||
# 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)
|
||||
}
|
||||
|
||||
# Call ToString() on the top-level container to get the XML of it and all its children
|
||||
Write-Output $serializedContainer.ToString()
|
||||
@@ -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
|
||||
|
||||
@@ -8,6 +8,7 @@ param (
|
||||
$ConfigurationName,
|
||||
|
||||
[string]
|
||||
[Parameter(Mandatory=$true)]
|
||||
# The code signing certificate to use when signing the files.
|
||||
$CertificatePath
|
||||
)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using mRemoteNG.Config.Serializers;
|
||||
using mRemoteNG.Config.Serializers.MiscSerializers;
|
||||
using mRemoteNG.Config.Serializers.Csv;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Connection.Protocol;
|
||||
using mRemoteNG.Connection.Protocol.Http;
|
||||
@@ -11,28 +10,29 @@ 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.MiscSerializers
|
||||
namespace mRemoteNGTests.Config.Serializers.ConnectionSerializers.Csv
|
||||
{
|
||||
public class CsvConnectionsDeserializerMremotengFormatTests
|
||||
{
|
||||
private CsvConnectionsDeserializerMremotengFormat _deserializer;
|
||||
private ICredentialRepositoryList _credentialRepositoryList;
|
||||
private CsvConnectionsSerializerMremotengFormat _serializer;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_deserializer = new CsvConnectionsDeserializerMremotengFormat();
|
||||
_credentialRepositoryList = Substitute.For<ICredentialRepositoryList>();
|
||||
var credentialRepositoryList = Substitute.For<ICredentialRepositoryList>();
|
||||
_serializer = new CsvConnectionsSerializerMremotengFormat(new SaveFilter(), credentialRepositoryList);
|
||||
}
|
||||
|
||||
[TestCaseSource(typeof(DeserializationTestSource), nameof(DeserializationTestSource.ConnectionPropertyTestCases))]
|
||||
public object ConnectionPropertiesDeserializedCorrectly(string propertyToCheck)
|
||||
{
|
||||
var serializer = new CsvConnectionsSerializerMremotengFormat(new SaveFilter(), _credentialRepositoryList);
|
||||
var csv = serializer.Serialize(GetTestConnection());
|
||||
var csv = _serializer.Serialize(GetTestConnection());
|
||||
var deserializedConnections = _deserializer.Deserialize(csv);
|
||||
var connection = deserializedConnections.GetRecursiveChildList().FirstOrDefault();
|
||||
var propertyValue = typeof(ConnectionInfo).GetProperty(propertyToCheck)?.GetValue(connection);
|
||||
@@ -42,14 +42,29 @@ namespace mRemoteNGTests.Config.Serializers.MiscSerializers
|
||||
[TestCaseSource(typeof(DeserializationTestSource), nameof(DeserializationTestSource.InheritanceTestCases))]
|
||||
public object InheritancePropertiesDeserializedCorrectly(string propertyToCheck)
|
||||
{
|
||||
var serializer = new CsvConnectionsSerializerMremotengFormat(new SaveFilter(), _credentialRepositoryList);
|
||||
var csv = serializer.Serialize(GetTestConnectionWithAllInherited());
|
||||
var csv = _serializer.Serialize(GetTestConnectionWithAllInherited());
|
||||
var deserializedConnections = _deserializer.Deserialize(csv);
|
||||
var connection = deserializedConnections.GetRecursiveChildList().FirstOrDefault();
|
||||
connection?.RemoveParent();
|
||||
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 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
|
||||
@@ -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,73 +1,62 @@
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Connection.Protocol;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNGTests.TestHelpers;
|
||||
using NUnit.Framework;
|
||||
|
||||
|
||||
namespace mRemoteNGTests.Connection
|
||||
{
|
||||
public class DefaultConnectionInfoTests
|
||||
{
|
||||
private string _testDomain = "somedomain";
|
||||
public class DefaultConnectionInfoTests
|
||||
{
|
||||
private ConnectionInfo _randomizedConnectionInfo;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
DefaultConnectionInfo.Instance.Domain = "";
|
||||
_randomizedConnectionInfo = ConnectionInfoHelpers.GetRandomizedConnectionInfo();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void LoadingDefaultInfoUpdatesAllProperties()
|
||||
[TestCaseSource(nameof(GetConnectionInfoProperties))]
|
||||
public void LoadingDefaultInfoUpdatesAllProperties(PropertyInfo property)
|
||||
{
|
||||
var connectionInfoSource = new ConnectionInfo { Domain = _testDomain };
|
||||
DefaultConnectionInfo.Instance.LoadFrom(connectionInfoSource);
|
||||
Assert.That(DefaultConnectionInfo.Instance.Domain, Is.EqualTo(_testDomain));
|
||||
DefaultConnectionInfo.Instance.LoadFrom(_randomizedConnectionInfo);
|
||||
var valueInDestination = property.GetValue(DefaultConnectionInfo.Instance);
|
||||
var valueInSource = property.GetValue(_randomizedConnectionInfo);
|
||||
Assert.That(valueInDestination, Is.EqualTo(valueInSource));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SavingDefaultConnectionInfoExportsAllProperties()
|
||||
[TestCaseSource(nameof(GetConnectionInfoProperties))]
|
||||
public void SavingDefaultConnectionInfoExportsAllProperties(PropertyInfo property)
|
||||
{
|
||||
var saveTarget = new ConnectionInfo();
|
||||
DefaultConnectionInfo.Instance.Domain = _testDomain;
|
||||
var randomizedValue = property.GetValue(_randomizedConnectionInfo);
|
||||
property.SetValue(DefaultConnectionInfo.Instance, randomizedValue);
|
||||
DefaultConnectionInfo.Instance.SaveTo(saveTarget);
|
||||
Assert.That(saveTarget.Domain, Is.EqualTo(_testDomain));
|
||||
var valueInDestination = property.GetValue(saveTarget);
|
||||
var valueInSource = property.GetValue(DefaultConnectionInfo.Instance);
|
||||
Assert.That(valueInDestination, Is.EqualTo(valueInSource));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CanSaveEnumValuesToString()
|
||||
{
|
||||
const ProtocolType targetProtocol = ProtocolType.RAW;
|
||||
var saveTarget = new AllStringPropertySaveTarget();
|
||||
DefaultConnectionInfo.Instance.Protocol = targetProtocol;
|
||||
[TestCaseSource(nameof(GetConnectionInfoProperties))]
|
||||
public void CanSaveDefaultConnectionToModelWithAllStringProperties(PropertyInfo property)
|
||||
{
|
||||
var saveTarget = new SerializableConnectionInfoAllPropertiesOfType<string>();
|
||||
|
||||
// randomize default connnection values to ensure we dont get false passing tests
|
||||
var randomizedValue = property.GetValue(_randomizedConnectionInfo);
|
||||
property.SetValue(DefaultConnectionInfo.Instance, randomizedValue);
|
||||
|
||||
DefaultConnectionInfo.Instance.SaveTo(saveTarget);
|
||||
Assert.That(saveTarget.Protocol, Is.EqualTo(targetProtocol.ToString()));
|
||||
|
||||
var valueInSource = property.GetValue(DefaultConnectionInfo.Instance).ToString();
|
||||
var valueInDestination = saveTarget.GetType().GetProperty(property.Name).GetValue(saveTarget).ToString();
|
||||
Assert.That(valueInDestination, Is.EqualTo(valueInSource));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CanSaveIntegerValuesToString()
|
||||
{
|
||||
const int targetValue = 123;
|
||||
var saveTarget = new AllStringPropertySaveTarget();
|
||||
DefaultConnectionInfo.Instance.RDPMinutesToIdleTimeout = targetValue;
|
||||
DefaultConnectionInfo.Instance.SaveTo(saveTarget);
|
||||
Assert.That(saveTarget.RDPMinutesToIdleTimeout, Is.EqualTo(targetValue.ToString()));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CanSaveStringValuesToString()
|
||||
{
|
||||
const string targetName = "hello";
|
||||
var saveTarget = new AllStringPropertySaveTarget();
|
||||
DefaultConnectionInfo.Instance.Username = targetName;
|
||||
DefaultConnectionInfo.Instance.SaveTo(saveTarget);
|
||||
Assert.That(saveTarget.Username, Is.EqualTo(targetName));
|
||||
}
|
||||
|
||||
|
||||
private class AllStringPropertySaveTarget
|
||||
{
|
||||
public string Username { get; set; }
|
||||
public string Protocol { get; set; }
|
||||
public string RDPMinutesToIdleTimeout { get; set; }
|
||||
}
|
||||
private static IEnumerable<PropertyInfo> GetConnectionInfoProperties()
|
||||
{
|
||||
return new ConnectionInfo().GetSerializableProperties();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,34 +1,40 @@
|
||||
using mRemoteNG.Connection;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using mRemoteNG.Connection;
|
||||
using NUnit.Framework;
|
||||
|
||||
|
||||
namespace mRemoteNGTests.Connection
|
||||
{
|
||||
public class DefaultConnectionInheritanceTests
|
||||
public class DefaultConnectionInheritanceTests
|
||||
{
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
[TestCaseSource(nameof(GetInheritanceProperties))]
|
||||
public void LoadingDefaultInheritanceUpdatesAllProperties(PropertyInfo property)
|
||||
{
|
||||
DefaultConnectionInheritance.Instance.TurnOffInheritanceCompletely();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void LoadingDefaultInheritanceUpdatesAllProperties()
|
||||
{
|
||||
var inheritanceSource = new ConnectionInfoInheritance(new object(), true);
|
||||
var inheritanceSource = new ConnectionInfoInheritance(new object(), true);
|
||||
inheritanceSource.TurnOnInheritanceCompletely();
|
||||
DefaultConnectionInheritance.Instance.LoadFrom(inheritanceSource);
|
||||
Assert.That(DefaultConnectionInheritance.Instance.EverythingInherited, Is.True);
|
||||
}
|
||||
DefaultConnectionInheritance.Instance.TurnOffInheritanceCompletely();
|
||||
|
||||
[Test]
|
||||
public void SavingDefaultInheritanceExportsAllProperties()
|
||||
DefaultConnectionInheritance.Instance.LoadFrom(inheritanceSource);
|
||||
|
||||
var valueInDestination = property.GetValue(DefaultConnectionInheritance.Instance);
|
||||
var valueInSource = property.GetValue(inheritanceSource);
|
||||
Assert.That(valueInDestination, Is.EqualTo(valueInSource));
|
||||
}
|
||||
|
||||
[TestCaseSource(nameof(GetInheritanceProperties))]
|
||||
public void SavingDefaultInheritanceExportsAllProperties(PropertyInfo property)
|
||||
{
|
||||
var inheritanceDestination = new ConnectionInfoInheritance(new object(), true);
|
||||
DefaultConnectionInheritance.Instance.AutomaticResize = true;
|
||||
DefaultConnectionInheritance.Instance.SaveTo(inheritanceDestination);
|
||||
Assert.That(inheritanceDestination.AutomaticResize, Is.True);
|
||||
}
|
||||
var saveTarget = new ConnectionInfoInheritance(new object(), true);
|
||||
saveTarget.TurnOffInheritanceCompletely();
|
||||
DefaultConnectionInheritance.Instance.TurnOnInheritanceCompletely();
|
||||
|
||||
DefaultConnectionInheritance.Instance.SaveTo(saveTarget);
|
||||
|
||||
var valueInDestination = property.GetValue(saveTarget);
|
||||
var valueInSource = property.GetValue(DefaultConnectionInheritance.Instance);
|
||||
Assert.That(valueInDestination, Is.EqualTo(valueInSource));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void NewInheritanceInstancesCreatedWithDefaultInheritanceValues()
|
||||
@@ -38,12 +44,20 @@ namespace mRemoteNGTests.Connection
|
||||
Assert.That(inheritanceInstance.Domain, Is.True);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void NewInheritanceInstancesCreatedWithAllDefaultInheritanceValues()
|
||||
[TestCaseSource(nameof(GetInheritanceProperties))]
|
||||
public void NewInheritanceInstancesCreatedWithAllDefaultInheritanceValues(PropertyInfo property)
|
||||
{
|
||||
DefaultConnectionInheritance.Instance.TurnOnInheritanceCompletely();
|
||||
var inheritanceInstance = new ConnectionInfoInheritance(new object());
|
||||
Assert.That(inheritanceInstance.EverythingInherited, Is.True);
|
||||
}
|
||||
}
|
||||
|
||||
var valueInDestination = property.GetValue(inheritanceInstance);
|
||||
var valueInSource = property.GetValue(DefaultConnectionInheritance.Instance);
|
||||
Assert.That(valueInDestination, Is.EqualTo(valueInSource));
|
||||
}
|
||||
|
||||
private static IEnumerable<PropertyInfo> GetInheritanceProperties()
|
||||
{
|
||||
return new ConnectionInfoInheritance(new object(), true).GetProperties();
|
||||
}
|
||||
}
|
||||
}
|
||||
18
mRemoteNGTests/Container/RootNodeInfoTests.cs
Normal file
18
mRemoteNGTests/Container/RootNodeInfoTests.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Tree.Root;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace mRemoteNGTests.Container
|
||||
{
|
||||
public class RootNodeInfoTests
|
||||
{
|
||||
[Test]
|
||||
public void InheritanceIsDisabledForNodesDirectlyUnderRootNode()
|
||||
{
|
||||
var rootNode = new RootNodeInfo(RootNodeType.Connection);
|
||||
var con1 = new ConnectionInfo { Inheritance = { Password = true } };
|
||||
rootNode.AddChild(con1);
|
||||
Assert.That(con1.Inheritance.Password, Is.False);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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.
|
||||
|
||||
132
mRemoteNGTests/TestHelpers/ConnectionInfoHelpers.cs
Normal file
132
mRemoteNGTests/TestHelpers/ConnectionInfoHelpers.cs
Normal file
@@ -0,0 +1,132 @@
|
||||
using System;
|
||||
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;
|
||||
|
||||
namespace mRemoteNGTests.TestHelpers
|
||||
{
|
||||
internal class ConnectionInfoHelpers
|
||||
{
|
||||
private static readonly Random _random = new Random();
|
||||
|
||||
/// <summary>
|
||||
/// Returns a <see cref="ConnectionInfo"/> object with randomized
|
||||
/// values in all fields.
|
||||
/// </summary>
|
||||
internal static ConnectionInfo GetRandomizedConnectionInfo(bool randomizeInheritance = false)
|
||||
{
|
||||
var connectionInfo = new ConnectionInfo
|
||||
{
|
||||
// string types
|
||||
Name = RandomString(),
|
||||
Hostname = RandomString(),
|
||||
Description = RandomString(),
|
||||
Domain = RandomString(),
|
||||
ExtApp = RandomString(),
|
||||
Icon = RandomString(),
|
||||
LoadBalanceInfo = RandomString(),
|
||||
MacAddress = RandomString(),
|
||||
Panel = RandomString(),
|
||||
Password = RandomString(),
|
||||
PostExtApp = RandomString(),
|
||||
PreExtApp = RandomString(),
|
||||
PuttySession = RandomString(),
|
||||
RDGatewayHostname = RandomString(),
|
||||
RDGatewayUsername = RandomString(),
|
||||
RDGatewayDomain = RandomString(),
|
||||
RDGatewayPassword = RandomString(),
|
||||
UserField = RandomString(),
|
||||
Username = RandomString(),
|
||||
VNCProxyIP = RandomString(),
|
||||
VNCProxyPassword = RandomString(),
|
||||
VNCProxyUsername = RandomString(),
|
||||
|
||||
// bool types
|
||||
AutomaticResize = RandomBool(),
|
||||
CacheBitmaps = RandomBool(),
|
||||
DisplayThemes = RandomBool(),
|
||||
DisplayWallpaper = RandomBool(),
|
||||
EnableDesktopComposition = RandomBool(),
|
||||
EnableFontSmoothing = RandomBool(),
|
||||
IsContainer = RandomBool(),
|
||||
IsDefault = RandomBool(),
|
||||
IsQuickConnect = RandomBool(),
|
||||
PleaseConnect = RandomBool(),
|
||||
RDPAlertIdleTimeout = RandomBool(),
|
||||
RedirectDiskDrives = RandomBool(),
|
||||
RedirectKeys = RandomBool(),
|
||||
RedirectPorts = RandomBool(),
|
||||
RedirectPrinters = RandomBool(),
|
||||
RedirectSmartCards = RandomBool(),
|
||||
UseConsoleSession = RandomBool(),
|
||||
UseCredSsp = RandomBool(),
|
||||
VNCViewOnly = RandomBool(),
|
||||
|
||||
// ints
|
||||
Port = RandomInt(),
|
||||
RDPMinutesToIdleTimeout = RandomInt(),
|
||||
VNCProxyPort = RandomInt(),
|
||||
|
||||
// enums
|
||||
Colors = RandomEnum<RdpProtocol.RDPColors>(),
|
||||
ICAEncryptionStrength = RandomEnum<IcaProtocol.EncryptionStrength> (),
|
||||
Protocol = RandomEnum<ProtocolType>(),
|
||||
RDGatewayUsageMethod = RandomEnum<RdpProtocol.RDGatewayUsageMethod>(),
|
||||
RDGatewayUseConnectionCredentials = RandomEnum<RdpProtocol.RDGatewayUseConnectionCredentials>(),
|
||||
RDPAuthenticationLevel = RandomEnum<RdpProtocol.AuthenticationLevel>(),
|
||||
RedirectSound = RandomEnum<RdpProtocol.RDPSounds>(),
|
||||
RenderingEngine = RandomEnum<HTTPBase.RenderingEngine>(),
|
||||
Resolution = RandomEnum<RdpProtocol.RDPResolutions>(),
|
||||
SoundQuality = RandomEnum<RdpProtocol.RDPSoundQuality>(),
|
||||
VNCAuthMode = RandomEnum<ProtocolVNC.AuthMode>(),
|
||||
VNCColors = RandomEnum<ProtocolVNC.Colors>(),
|
||||
VNCCompression = RandomEnum<ProtocolVNC.Compression>(),
|
||||
VNCEncoding = RandomEnum<ProtocolVNC.Encoding>(),
|
||||
VNCProxyType = RandomEnum<ProtocolVNC.ProxyType>(),
|
||||
VNCSmartSizeMode = RandomEnum<ProtocolVNC.SmartSizeMode>(),
|
||||
};
|
||||
|
||||
if (randomizeInheritance)
|
||||
connectionInfo.Inheritance = GetRandomizedInheritance(connectionInfo);
|
||||
|
||||
return connectionInfo;
|
||||
}
|
||||
|
||||
internal static ConnectionInfoInheritance GetRandomizedInheritance(ConnectionInfo parent)
|
||||
{
|
||||
var inheritance = new ConnectionInfoInheritance(parent, true);
|
||||
foreach (var property in inheritance.GetProperties())
|
||||
{
|
||||
property.SetValue(inheritance, RandomBool());
|
||||
}
|
||||
return inheritance;
|
||||
}
|
||||
|
||||
internal static string RandomString()
|
||||
{
|
||||
return Guid.NewGuid().ToString("N");
|
||||
}
|
||||
|
||||
internal static bool RandomBool()
|
||||
{
|
||||
return _random.Next() % 2 == 0;
|
||||
}
|
||||
|
||||
internal static int RandomInt()
|
||||
{
|
||||
return _random.Next();
|
||||
}
|
||||
|
||||
internal static T RandomEnum<T>() where T : struct, IConvertible
|
||||
{
|
||||
if (!typeof(T).IsEnum)
|
||||
throw new ArgumentException("T must be an enum");
|
||||
|
||||
var values = Enum.GetValues(typeof(T));
|
||||
return (T)values.GetValue(_random.Next(values.Length));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
namespace mRemoteNGTests.TestHelpers
|
||||
{
|
||||
/// <summary>
|
||||
/// A ConnectionInfo that has only the serializable properties as string types.
|
||||
/// Only used for testing.
|
||||
/// </summary>
|
||||
internal class SerializableConnectionInfoAllPropertiesOfType<TType>
|
||||
{
|
||||
public TType Description { get; set; }
|
||||
public TType Icon { get; set; }
|
||||
public TType Panel { get; set; }
|
||||
public TType Username { get; set; }
|
||||
public TType Password { get; set; }
|
||||
public TType Domain { get; set; }
|
||||
public TType Protocol { get; set; }
|
||||
public TType ExtApp { get; set; }
|
||||
public TType PuttySession { get; set; }
|
||||
public TType ICAEncryptionStrength { get; set; }
|
||||
public TType UseConsoleSession { get; set; }
|
||||
public TType RDPAuthenticationLevel { get; set; }
|
||||
public TType RDPMinutesToIdleTimeout { get; set; }
|
||||
public TType RDPAlertIdleTimeout { get; set; }
|
||||
public TType LoadBalanceInfo { get; set; }
|
||||
public TType RenderingEngine { get; set; }
|
||||
public TType UseCredSsp { get; set; }
|
||||
public TType RDGatewayUsageMethod { get; set; }
|
||||
public TType RDGatewayHostname { get; set; }
|
||||
public TType RDGatewayUseConnectionCredentials { get; set; }
|
||||
public TType RDGatewayUsername { get; set; }
|
||||
public TType RDGatewayPassword { get; set; }
|
||||
public TType RDGatewayDomain { get; set; }
|
||||
public TType Resolution { get; set; }
|
||||
public TType AutomaticResize { get; set; }
|
||||
public TType Colors { get; set; }
|
||||
public TType CacheBitmaps { get; set; }
|
||||
public TType DisplayWallpaper { get; set; }
|
||||
public TType DisplayThemes { get; set; }
|
||||
public TType EnableFontSmoothing { get; set; }
|
||||
public TType EnableDesktopComposition { get; set; }
|
||||
public TType RedirectKeys { get; set; }
|
||||
public TType RedirectDiskDrives { get; set; }
|
||||
public TType RedirectPrinters { get; set; }
|
||||
public TType RedirectPorts { get; set; }
|
||||
public TType RedirectSmartCards { get; set; }
|
||||
public TType RedirectSound { get; set; }
|
||||
public TType SoundQuality { get; set; }
|
||||
public TType PreExtApp { get; set; }
|
||||
public TType PostExtApp { get; set; }
|
||||
public TType MacAddress { get; set; }
|
||||
public TType UserField { get; set; }
|
||||
public TType VNCCompression { get; set; }
|
||||
public TType VNCEncoding { get; set; }
|
||||
public TType VNCAuthMode { get; set; }
|
||||
public TType VNCProxyType { get; set; }
|
||||
public TType VNCProxyIP { get; set; }
|
||||
public TType VNCProxyPort { get; set; }
|
||||
public TType VNCProxyUsername { get; set; }
|
||||
public TType VNCProxyPassword { get; set; }
|
||||
public TType VNCColors { get; set; }
|
||||
public TType VNCSmartSizeMode { get; set; }
|
||||
public TType VNCViewOnly { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ using NUnit.Framework;
|
||||
|
||||
namespace mRemoteNGTests.Tree
|
||||
{
|
||||
public class NodeSearcherTests
|
||||
public class NodeSearcherTests
|
||||
{
|
||||
private NodeSearcher _nodeSearcher;
|
||||
private ContainerInfo _folder1;
|
||||
@@ -104,6 +104,14 @@ namespace mRemoteNGTests.Tree
|
||||
_con4 = new ConnectionInfo { Name = "con4", Description="description6", Hostname="hostname6" };
|
||||
_con5 = new ConnectionInfo { Name = "con5", Description="description7", Hostname="hostname7" };
|
||||
|
||||
_folder1.Inheritance.TurnOffInheritanceCompletely();
|
||||
_con1.Inheritance.TurnOffInheritanceCompletely();
|
||||
_con2.Inheritance.TurnOffInheritanceCompletely();
|
||||
_folder2.Inheritance.TurnOffInheritanceCompletely();
|
||||
_con3.Inheritance.TurnOffInheritanceCompletely();
|
||||
_con4.Inheritance.TurnOffInheritanceCompletely();
|
||||
_con5.Inheritance.TurnOffInheritanceCompletely();
|
||||
|
||||
connectionTreeModel.AddRootNode(root);
|
||||
root.AddChildRange(new [] { _folder1, _folder2, _con5 });
|
||||
_folder1.AddChildRange(new [] { _con1, _con2 });
|
||||
|
||||
@@ -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,21 +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\CsvConnectionsDeserializerMremotengFormatTests.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" />
|
||||
@@ -145,6 +146,7 @@
|
||||
<Compile Include="Connection\ConnectionInfoComparerTests.cs" />
|
||||
<Compile Include="Connection\Protocol\IntegratedProgramTests.cs" />
|
||||
<Compile Include="Connection\Protocol\ProtocolListTests.cs" />
|
||||
<Compile Include="Container\RootNodeInfoTests.cs" />
|
||||
<Compile Include="Credential\CompositeRepositoryUnlockerTests.cs" />
|
||||
<Compile Include="Credential\CredentialChangedEventArgsTests.cs" />
|
||||
<Compile Include="Credential\CredentialDeletionMsgBoxConfirmerTests.cs" />
|
||||
@@ -168,12 +170,14 @@
|
||||
<Compile Include="Security\PasswordCreation\PasswordLengthConstraintTests.cs" />
|
||||
<Compile Include="Security\RandomGeneratorTests.cs" />
|
||||
<Compile Include="Security\SecureStringExtensionsTests.cs" />
|
||||
<Compile Include="TestHelpers\ConnectionInfoHelpers.cs" />
|
||||
<Compile Include="TestHelpers\ConnectionTreeModelBuilder.cs" />
|
||||
<Compile Include="Security\XmlCryptoProviderBuilderTests.cs" />
|
||||
<Compile Include="TestHelpers\FileTestHelpers.cs" />
|
||||
<Compile Include="TestHelpers\SerializableConnectionInfoAllPropertiesOfType.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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
using System.Linq;
|
||||
using mRemoteNG.App;
|
||||
using mRemoteNG.Config.DataProviders;
|
||||
using mRemoteNG.Config.Serializers.MiscSerializers;
|
||||
using mRemoteNG.Config.Serializers.Csv;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Messages;
|
||||
|
||||
|
||||
@@ -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.Container;
|
||||
using mRemoteNG.Messages;
|
||||
|
||||
|
||||
@@ -11,16 +11,16 @@ using mRemoteNG.Container;
|
||||
using mRemoteNG.Tree;
|
||||
using mRemoteNG.Tree.Root;
|
||||
|
||||
namespace mRemoteNG.Config.Serializers.MiscSerializers
|
||||
namespace mRemoteNG.Config.Serializers.Csv
|
||||
{
|
||||
public class CsvConnectionsDeserializerMremotengFormat : IDeserializer<string, ConnectionTreeModel>
|
||||
{
|
||||
public ConnectionTreeModel Deserialize(string serializedData)
|
||||
{
|
||||
var root = new RootNodeInfo(RootNodeType.Connection);
|
||||
|
||||
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++)
|
||||
{
|
||||
@@ -30,39 +30,61 @@ namespace mRemoteNG.Config.Serializers.MiscSerializers
|
||||
else
|
||||
{
|
||||
var connectionInfo = ParseConnectionInfo(csvHeaders, line);
|
||||
var folder = ParseConnectionFolder(line[csvHeaders.IndexOf("Folder")], root);
|
||||
folder.AddChild(connectionInfo);
|
||||
parentMapping.Add(connectionInfo, line[csvHeaders.IndexOf("Parent")]);
|
||||
}
|
||||
}
|
||||
|
||||
var root = CreateTreeStructure(parentMapping);
|
||||
var connectionTreeModel = new ConnectionTreeModel();
|
||||
connectionTreeModel.AddRootNode(root);
|
||||
return connectionTreeModel;
|
||||
}
|
||||
|
||||
private ContainerInfo ParseConnectionFolder(string folderString, ContainerInfo rootContainer)
|
||||
private RootNodeInfo CreateTreeStructure(Dictionary<ConnectionInfo, string> parentMapping)
|
||||
{
|
||||
var containerNames = folderString.Split('\\');
|
||||
var parentContainer = rootContainer;
|
||||
var root = new RootNodeInfo(RootNodeType.Connection);
|
||||
|
||||
for (var i = containerNames.Length - 2; i >= 0; i--)
|
||||
foreach (var node in parentMapping)
|
||||
{
|
||||
var containerName = containerNames[i];
|
||||
var container = parentContainer.Children.OfType<ContainerInfo>().FirstOrDefault(info => info.Name == containerName);
|
||||
if (container == null)
|
||||
// no parent mapped, add to root
|
||||
if (string.IsNullOrEmpty(node.Value))
|
||||
{
|
||||
container = new ContainerInfo {Name = containerName};
|
||||
parentContainer.AddChild(container);
|
||||
root.AddChild(node.Key);
|
||||
continue;
|
||||
}
|
||||
|
||||
// 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);
|
||||
}
|
||||
parentContainer = container;
|
||||
}
|
||||
|
||||
return parentContainer;
|
||||
return root;
|
||||
}
|
||||
|
||||
private ConnectionInfo ParseConnectionInfo(IList<string> headers, string[] connectionCsv)
|
||||
{
|
||||
var connectionRecord = new ConnectionInfo();
|
||||
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")] : "";
|
||||
@@ -0,0 +1,211 @@
|
||||
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(FormatForCsv(con.Name))
|
||||
.Append(FormatForCsv(con.ConstantID))
|
||||
.Append(FormatForCsv(con.Parent?.ConstantID ?? ""))
|
||||
.Append(FormatForCsv(con.GetTreeNodeType()))
|
||||
.Append(FormatForCsv(con.Description))
|
||||
.Append(FormatForCsv(con.Icon))
|
||||
.Append(FormatForCsv(con.Panel));
|
||||
|
||||
if (_saveFilter.SaveUsername)
|
||||
sb.Append(FormatForCsv(con.Username));
|
||||
|
||||
if (_saveFilter.SavePassword)
|
||||
sb.Append(FormatForCsv(con.Password));
|
||||
|
||||
if (_saveFilter.SaveDomain)
|
||||
sb.Append(FormatForCsv(con.Domain));
|
||||
|
||||
sb.Append(FormatForCsv(con.Hostname))
|
||||
.Append(FormatForCsv(con.Protocol))
|
||||
.Append(FormatForCsv(con.PuttySession))
|
||||
.Append(FormatForCsv(con.Port))
|
||||
.Append(FormatForCsv(con.UseConsoleSession))
|
||||
.Append(FormatForCsv(con.UseCredSsp))
|
||||
.Append(FormatForCsv(con.RenderingEngine))
|
||||
.Append(FormatForCsv(con.ICAEncryptionStrength))
|
||||
.Append(FormatForCsv(con.RDPAuthenticationLevel))
|
||||
.Append(FormatForCsv(con.LoadBalanceInfo))
|
||||
.Append(FormatForCsv(con.Colors))
|
||||
.Append(FormatForCsv(con.Resolution))
|
||||
.Append(FormatForCsv(con.AutomaticResize))
|
||||
.Append(FormatForCsv(con.DisplayWallpaper))
|
||||
.Append(FormatForCsv(con.DisplayThemes))
|
||||
.Append(FormatForCsv(con.EnableFontSmoothing))
|
||||
.Append(FormatForCsv(con.EnableDesktopComposition))
|
||||
.Append(FormatForCsv(con.CacheBitmaps))
|
||||
.Append(FormatForCsv(con.RedirectDiskDrives))
|
||||
.Append(FormatForCsv(con.RedirectPorts))
|
||||
.Append(FormatForCsv(con.RedirectPrinters))
|
||||
.Append(FormatForCsv(con.RedirectSmartCards))
|
||||
.Append(FormatForCsv(con.RedirectSound))
|
||||
.Append(FormatForCsv(con.RedirectKeys))
|
||||
.Append(FormatForCsv(con.PreExtApp))
|
||||
.Append(FormatForCsv(con.PostExtApp))
|
||||
.Append(FormatForCsv(con.MacAddress))
|
||||
.Append(FormatForCsv(con.UserField))
|
||||
.Append(FormatForCsv(con.ExtApp))
|
||||
.Append(FormatForCsv(con.VNCCompression))
|
||||
.Append(FormatForCsv(con.VNCEncoding))
|
||||
.Append(FormatForCsv(con.VNCAuthMode))
|
||||
.Append(FormatForCsv(con.VNCProxyType))
|
||||
.Append(FormatForCsv(con.VNCProxyIP))
|
||||
.Append(FormatForCsv(con.VNCProxyPort))
|
||||
.Append(FormatForCsv(con.VNCProxyUsername))
|
||||
.Append(FormatForCsv(con.VNCProxyPassword))
|
||||
.Append(FormatForCsv(con.VNCColors))
|
||||
.Append(FormatForCsv(con.VNCSmartSizeMode))
|
||||
.Append(FormatForCsv(con.VNCViewOnly))
|
||||
.Append(FormatForCsv(con.RDGatewayUsageMethod))
|
||||
.Append(FormatForCsv(con.RDGatewayHostname))
|
||||
.Append(FormatForCsv(con.RDGatewayUseConnectionCredentials))
|
||||
.Append(FormatForCsv(con.RDGatewayUsername))
|
||||
.Append(FormatForCsv(con.RDGatewayPassword))
|
||||
.Append(FormatForCsv(con.RDGatewayDomain));
|
||||
|
||||
|
||||
if (!_saveFilter.SaveInheritance)
|
||||
return;
|
||||
|
||||
sb.Append(FormatForCsv(con.Inheritance.CacheBitmaps))
|
||||
.Append(FormatForCsv(con.Inheritance.Colors))
|
||||
.Append(FormatForCsv(con.Inheritance.Description))
|
||||
.Append(FormatForCsv(con.Inheritance.DisplayThemes))
|
||||
.Append(FormatForCsv(con.Inheritance.DisplayWallpaper))
|
||||
.Append(FormatForCsv(con.Inheritance.EnableFontSmoothing))
|
||||
.Append(FormatForCsv(con.Inheritance.EnableDesktopComposition))
|
||||
.Append(FormatForCsv(con.Inheritance.Domain))
|
||||
.Append(FormatForCsv(con.Inheritance.Icon))
|
||||
.Append(FormatForCsv(con.Inheritance.Panel))
|
||||
.Append(FormatForCsv(con.Inheritance.Password))
|
||||
.Append(FormatForCsv(con.Inheritance.Port))
|
||||
.Append(FormatForCsv(con.Inheritance.Protocol))
|
||||
.Append(FormatForCsv(con.Inheritance.PuttySession))
|
||||
.Append(FormatForCsv(con.Inheritance.RedirectDiskDrives))
|
||||
.Append(FormatForCsv(con.Inheritance.RedirectKeys))
|
||||
.Append(FormatForCsv(con.Inheritance.RedirectPorts))
|
||||
.Append(FormatForCsv(con.Inheritance.RedirectPrinters))
|
||||
.Append(FormatForCsv(con.Inheritance.RedirectSmartCards))
|
||||
.Append(FormatForCsv(con.Inheritance.RedirectSound))
|
||||
.Append(FormatForCsv(con.Inheritance.Resolution))
|
||||
.Append(FormatForCsv(con.Inheritance.AutomaticResize))
|
||||
.Append(FormatForCsv(con.Inheritance.UseConsoleSession))
|
||||
.Append(FormatForCsv(con.Inheritance.UseCredSsp))
|
||||
.Append(FormatForCsv(con.Inheritance.RenderingEngine))
|
||||
.Append(FormatForCsv(con.Inheritance.Username))
|
||||
.Append(FormatForCsv(con.Inheritance.ICAEncryptionStrength))
|
||||
.Append(FormatForCsv(con.Inheritance.RDPAuthenticationLevel))
|
||||
.Append(FormatForCsv(con.Inheritance.LoadBalanceInfo))
|
||||
.Append(FormatForCsv(con.Inheritance.PreExtApp))
|
||||
.Append(FormatForCsv(con.Inheritance.PostExtApp))
|
||||
.Append(FormatForCsv(con.Inheritance.MacAddress))
|
||||
.Append(FormatForCsv(con.Inheritance.UserField))
|
||||
.Append(FormatForCsv(con.Inheritance.ExtApp))
|
||||
.Append(FormatForCsv(con.Inheritance.VNCCompression))
|
||||
.Append(FormatForCsv(con.Inheritance.VNCEncoding))
|
||||
.Append(FormatForCsv(con.Inheritance.VNCAuthMode))
|
||||
.Append(FormatForCsv(con.Inheritance.VNCProxyType))
|
||||
.Append(FormatForCsv(con.Inheritance.VNCProxyIP))
|
||||
.Append(FormatForCsv(con.Inheritance.VNCProxyPort))
|
||||
.Append(FormatForCsv(con.Inheritance.VNCProxyUsername))
|
||||
.Append(FormatForCsv(con.Inheritance.VNCProxyPassword))
|
||||
.Append(FormatForCsv(con.Inheritance.VNCColors))
|
||||
.Append(FormatForCsv(con.Inheritance.VNCSmartSizeMode))
|
||||
.Append(FormatForCsv(con.Inheritance.VNCViewOnly))
|
||||
.Append(FormatForCsv(con.Inheritance.RDGatewayUsageMethod))
|
||||
.Append(FormatForCsv(con.Inheritance.RDGatewayHostname))
|
||||
.Append(FormatForCsv(con.Inheritance.RDGatewayUseConnectionCredentials))
|
||||
.Append(FormatForCsv(con.Inheritance.RDGatewayUsername))
|
||||
.Append(FormatForCsv(con.Inheritance.RDGatewayPassword))
|
||||
.Append(FormatForCsv(con.Inheritance.RDGatewayDomain))
|
||||
.Append(FormatForCsv(con.Inheritance.RDPAlertIdleTimeout))
|
||||
.Append(FormatForCsv(con.Inheritance.RDPMinutesToIdleTimeout))
|
||||
.Append(FormatForCsv(con.Inheritance.SoundQuality));
|
||||
}
|
||||
|
||||
private string FormatForCsv(object value)
|
||||
{
|
||||
var cleanedString = value.ToString().Replace(";", "");
|
||||
return cleanedString + ";";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -1,238 +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;InheritRDPAlertIdleTimeout;InheritRDPMinutesToIdleTimeout;InheritSoundQuality";
|
||||
_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 += CleanStringForCsv(con.Name) + ";" +
|
||||
CleanStringForCsv(GetNodePath(con)) + ";" +
|
||||
CleanStringForCsv(con.Description) + ";" +
|
||||
CleanStringForCsv(con.Icon) + ";" +
|
||||
CleanStringForCsv(con.Panel) + ";";
|
||||
|
||||
if (_saveFilter.SaveUsername)
|
||||
csvLine += CleanStringForCsv(con.Username) + ";";
|
||||
|
||||
if (_saveFilter.SavePassword)
|
||||
csvLine += CleanStringForCsv(con.Password) + ";";
|
||||
|
||||
if (_saveFilter.SaveDomain)
|
||||
csvLine += CleanStringForCsv(con.Domain) + ";";
|
||||
|
||||
csvLine += 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) + ";";
|
||||
|
||||
|
||||
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 + ";" +
|
||||
con.Inheritance.RDPAlertIdleTimeout + ";" +
|
||||
con.Inheritance.RDPMinutesToIdleTimeout + ";" +
|
||||
con.Inheritance.SoundQuality;
|
||||
}
|
||||
|
||||
_csv += csvLine;
|
||||
}
|
||||
|
||||
/// <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(";", "");
|
||||
}
|
||||
|
||||
private string GetNodePath(ConnectionInfo connectionInfo)
|
||||
{
|
||||
var nodePath = "";
|
||||
var currentItem = connectionInfo;
|
||||
while (currentItem != _serializationTarget)
|
||||
{
|
||||
currentItem = currentItem.Parent;
|
||||
if (currentItem == null)
|
||||
break;
|
||||
nodePath += $@"{currentItem.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,9 +14,7 @@ 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;
|
||||
|
||||
|
||||
namespace mRemoteNG.Connection
|
||||
@@ -32,7 +30,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 +50,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 +70,6 @@ namespace mRemoteNG.Connection
|
||||
SetNonBrowsablePropertiesDefaults();
|
||||
SetDefaults();
|
||||
}
|
||||
|
||||
public ConnectionInfo(ContainerInfo parent) : this()
|
||||
{
|
||||
IsContainer = true;
|
||||
parent.AddChild(this);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Public Methods
|
||||
@@ -78,7 +77,6 @@ namespace mRemoteNG.Connection
|
||||
{
|
||||
var newConnectionInfo = new ConnectionInfo();
|
||||
newConnectionInfo.CopyFrom(this);
|
||||
newConnectionInfo.ConstantID = MiscTools.CreateConstantID();
|
||||
newConnectionInfo.Inheritance = Inheritance.Clone();
|
||||
return newConnectionInfo;
|
||||
}
|
||||
@@ -128,19 +126,22 @@ namespace mRemoteNG.Connection
|
||||
return filteredProperties;
|
||||
}
|
||||
|
||||
public virtual IEnumerable<PropertyInfo> GetSerializableProperties()
|
||||
{
|
||||
var excludedProperties = new[] { "Parent", "Name", "Hostname", "Port", "Inheritance", "OpenConnections",
|
||||
"IsContainer", "IsDefault", "PositionID", "ConstantID", "TreeNode", "IsQuickConnect", "PleaseConnect" };
|
||||
|
||||
return GetProperties(excludedProperties);
|
||||
}
|
||||
|
||||
public virtual void SetParent(ContainerInfo newParent)
|
||||
{
|
||||
RemoveParent();
|
||||
newParent?.AddChild(this);
|
||||
if (newParent is RootNodeInfo)
|
||||
Inheritance.DisableInheritance();
|
||||
}
|
||||
|
||||
public void RemoveParent()
|
||||
{
|
||||
if (Parent is RootNodeInfo)
|
||||
Inheritance.EnableInheritance();
|
||||
|
||||
Parent?.RemoveChild(this);
|
||||
}
|
||||
|
||||
@@ -317,7 +318,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,35 +1,39 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Configuration;
|
||||
using mRemoteNG.App;
|
||||
|
||||
|
||||
namespace mRemoteNG.Connection
|
||||
{
|
||||
public class DefaultConnectionInfo : ConnectionInfo
|
||||
public class DefaultConnectionInfo : ConnectionInfo
|
||||
{
|
||||
public static DefaultConnectionInfo Instance { get; } = new DefaultConnectionInfo();
|
||||
private readonly string[] _excludedProperties = { "Parent", "Name", "Hostname", "Port", "Inheritance",
|
||||
"OpenConnections", "IsContainer", "IsDefault", "PositionID", "ConstantID", "TreeNode", "IsQuickConnect", "PleaseConnect" };
|
||||
|
||||
private DefaultConnectionInfo()
|
||||
{
|
||||
IsDefault = true;
|
||||
Inheritance = DefaultConnectionInheritance.Instance;
|
||||
}
|
||||
|
||||
public void LoadFrom<TSource>(TSource sourceInstance, Func<string, string> propertyNameMutator = null)
|
||||
{
|
||||
if (propertyNameMutator == null) propertyNameMutator = a => a;
|
||||
var connectionProperties = GetProperties(_excludedProperties);
|
||||
if (propertyNameMutator == null)
|
||||
propertyNameMutator = a => a;
|
||||
|
||||
var connectionProperties = GetSerializableProperties();
|
||||
foreach (var property in connectionProperties)
|
||||
{
|
||||
try
|
||||
{
|
||||
var propertyFromSource = typeof(TSource).GetProperty(propertyNameMutator(property.Name));
|
||||
if (propertyFromSource == null) continue;
|
||||
var valueFromSource = propertyFromSource.GetValue(sourceInstance, null);
|
||||
var typeConverter = TypeDescriptor.GetConverter(property.PropertyType);
|
||||
if (typeConverter.CanConvertFrom(valueFromSource.GetType()))
|
||||
property.SetValue(Instance, typeConverter.ConvertFrom(valueFromSource), null);
|
||||
var expectedPropertyName = propertyNameMutator(property.Name);
|
||||
var propertyFromSource = typeof(TSource).GetProperty(expectedPropertyName);
|
||||
if (propertyFromSource == null)
|
||||
throw new SettingsPropertyNotFoundException($"No property with name '{expectedPropertyName}' found.");
|
||||
|
||||
var valueFromSource = propertyFromSource.GetValue(sourceInstance, null);
|
||||
var value = Convert.ChangeType(valueFromSource, property.PropertyType);
|
||||
|
||||
property.SetValue(Instance, value, null);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -40,19 +44,25 @@ namespace mRemoteNG.Connection
|
||||
|
||||
public void SaveTo<TDestination>(TDestination destinationInstance, Func<string, string> propertyNameMutator = null)
|
||||
{
|
||||
if (propertyNameMutator == null) propertyNameMutator = (a) => a;
|
||||
var inheritanceProperties = GetProperties(_excludedProperties);
|
||||
foreach (var property in inheritanceProperties)
|
||||
if (propertyNameMutator == null)
|
||||
propertyNameMutator = (a) => a;
|
||||
|
||||
var connectionProperties = GetSerializableProperties();
|
||||
|
||||
foreach (var property in connectionProperties)
|
||||
{
|
||||
try
|
||||
{
|
||||
var propertyFromDestination = typeof(TDestination).GetProperty(propertyNameMutator(property.Name));
|
||||
var localValue = property.GetValue(Instance, null);
|
||||
var typeConverter = TypeDescriptor.GetConverter(property.PropertyType);
|
||||
if (propertyFromDestination != null && !typeConverter.CanConvertTo(propertyFromDestination.PropertyType)) continue;
|
||||
if (propertyFromDestination == null) continue;
|
||||
var convertedValue = typeConverter.ConvertTo(localValue, propertyFromDestination.PropertyType);
|
||||
propertyFromDestination.SetValue(destinationInstance, convertedValue, null);
|
||||
var expectedPropertyName = propertyNameMutator(property.Name);
|
||||
var propertyFromDestination = typeof(TDestination).GetProperty(expectedPropertyName);
|
||||
|
||||
if (propertyFromDestination == null)
|
||||
throw new SettingsPropertyNotFoundException($"No property with name '{expectedPropertyName}' found.");
|
||||
|
||||
// ensure value is of correct type
|
||||
var value = Convert.ChangeType(property.GetValue(Instance, null), propertyFromDestination.PropertyType);
|
||||
|
||||
propertyFromDestination.SetValue(destinationInstance, value, null);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
@@ -57,7 +63,7 @@ namespace mRemoteNG.Container
|
||||
AddChildAt(newChildItem, newChildIndex);
|
||||
}
|
||||
|
||||
public void AddChildAt(ConnectionInfo newChildItem, int index)
|
||||
public virtual void AddChildAt(ConnectionInfo newChildItem, int index)
|
||||
{
|
||||
if (Children.Contains(newChildItem)) return;
|
||||
newChildItem.Parent?.RemoveChild(newChildItem);
|
||||
@@ -75,7 +81,7 @@ namespace mRemoteNG.Container
|
||||
}
|
||||
}
|
||||
|
||||
public void RemoveChild(ConnectionInfo removalTarget)
|
||||
public virtual void RemoveChild(ConnectionInfo removalTarget)
|
||||
{
|
||||
if (!Children.Contains(removalTarget)) return;
|
||||
removalTarget.Parent = null;
|
||||
@@ -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())
|
||||
|
||||
@@ -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.4.*")]
|
||||
[assembly: NeutralResourcesLanguage("en")]
|
||||
26
mRemoteV1/Properties/Settings.Designer.cs
generated
26
mRemoteV1/Properties/Settings.Designer.cs
generated
@@ -12,7 +12,7 @@ namespace mRemoteNG {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.5.0.0")]
|
||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||
@@ -2698,5 +2698,29 @@ namespace mRemoteNG {
|
||||
this["MultiSshToolbarVisible"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool CreateEmptyPanelOnStartUp {
|
||||
get {
|
||||
return ((bool)(this["CreateEmptyPanelOnStartUp"]));
|
||||
}
|
||||
set {
|
||||
this["CreateEmptyPanelOnStartUp"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("General")]
|
||||
public string StartUpPanelName {
|
||||
get {
|
||||
return ((string)(this["StartUpPanelName"]));
|
||||
}
|
||||
set {
|
||||
this["StartUpPanelName"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -671,5 +671,11 @@
|
||||
<Setting Name="MultiSshToolbarVisible" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="CreateEmptyPanelOnStartUp" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="StartUpPanelName" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)">General</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
150
mRemoteV1/Resources/Language/Language.Designer.cs
generated
150
mRemoteV1/Resources/Language/Language.Designer.cs
generated
@@ -222,6 +222,15 @@ namespace mRemoteNG {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Working directory:.
|
||||
/// </summary>
|
||||
internal static string srtWorkingDirectory {
|
||||
get {
|
||||
return ResourceManager.GetString("srtWorkingDirectory", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to About.
|
||||
/// </summary>
|
||||
@@ -312,6 +321,15 @@ namespace mRemoteNG {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to AdvancedSecurityOptions.
|
||||
/// </summary>
|
||||
internal static string strAdvancedSecurityOptions {
|
||||
get {
|
||||
return ResourceManager.GetString("strAdvancedSecurityOptions", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Allow only a single instance of the application (mRemoteNG restart required).
|
||||
/// </summary>
|
||||
@@ -439,7 +457,7 @@ namespace mRemoteNG {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Auto save every:.
|
||||
/// Looks up a localized string similar to Auto save time in minutes (0 means disabled):.
|
||||
/// </summary>
|
||||
internal static string strAutoSaveEvery {
|
||||
get {
|
||||
@@ -1628,6 +1646,15 @@ namespace mRemoteNG {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Create an empty panel when mRemoteNG starts.
|
||||
/// </summary>
|
||||
internal static string strCreateEmptyPanelOnStartUp {
|
||||
get {
|
||||
return ResourceManager.GetString("strCreateEmptyPanelOnStartUp", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Credential Editor.
|
||||
/// </summary>
|
||||
@@ -2544,7 +2571,7 @@ namespace mRemoteNG {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to An error occurred while importing the file, "{0}"..
|
||||
/// Looks up a localized string similar to An error occurred while importing the file "{0}"..
|
||||
/// </summary>
|
||||
internal static string strImportFileFailedContent {
|
||||
get {
|
||||
@@ -2633,6 +2660,15 @@ namespace mRemoteNG {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Import sub OUs.
|
||||
/// </summary>
|
||||
internal static string strImportSubOUs {
|
||||
get {
|
||||
return ResourceManager.GetString("strImportSubOUs", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Inactive.
|
||||
/// </summary>
|
||||
@@ -3011,6 +3047,15 @@ namespace mRemoteNG {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Use UTF8 encoding for RDP "Load Balance Info" property.
|
||||
/// </summary>
|
||||
internal static string strLoadBalanceInfoUseUtf8 {
|
||||
get {
|
||||
return ResourceManager.GetString("strLoadBalanceInfoUseUtf8", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Load from SQL failed.
|
||||
/// </summary>
|
||||
@@ -3056,6 +3101,15 @@ namespace mRemoteNG {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Lock toolbar positions.
|
||||
/// </summary>
|
||||
internal static string strLockToolbars {
|
||||
get {
|
||||
return ResourceManager.GetString("strLockToolbars", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Log file path.
|
||||
/// </summary>
|
||||
@@ -3416,6 +3470,24 @@ namespace mRemoteNG {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Lock Toolbar Positions.
|
||||
/// </summary>
|
||||
internal static string strMenuLockToolbars {
|
||||
get {
|
||||
return ResourceManager.GetString("strMenuLockToolbars", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Multi SSH Toolbar.
|
||||
/// </summary>
|
||||
internal static string strMenuMultiSshToolbar {
|
||||
get {
|
||||
return ResourceManager.GetString("strMenuMultiSshToolbar", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to New Connection File.
|
||||
/// </summary>
|
||||
@@ -3812,6 +3884,15 @@ namespace mRemoteNG {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Multi SSH toolbar.
|
||||
/// </summary>
|
||||
internal static string strMultiSshToolbar {
|
||||
get {
|
||||
return ResourceManager.GetString("strMultiSshToolbar", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to My current credentials (Windows logon information).
|
||||
/// </summary>
|
||||
@@ -4110,6 +4191,15 @@ namespace mRemoteNG {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to mRemoteNG Options.
|
||||
/// </summary>
|
||||
internal static string strOptionsPageTitle {
|
||||
get {
|
||||
return ResourceManager.GetString("strOptionsPageTitle", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Testing....
|
||||
/// </summary>
|
||||
@@ -4174,7 +4264,7 @@ namespace mRemoteNG {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to No themes are loaded, check that the default mremoteNG themes exist in the slash themes folder.
|
||||
/// Looks up a localized string similar to No themes are loaded, check that the default mremoteNG themes exist in the 'themes' folder.
|
||||
/// </summary>
|
||||
internal static string strOptionsThemeErrorNoThemes {
|
||||
get {
|
||||
@@ -6210,6 +6300,24 @@ namespace mRemoteNG {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Run elevated.
|
||||
/// </summary>
|
||||
internal static string strRunElevated {
|
||||
get {
|
||||
return ResourceManager.GetString("strRunElevated", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Run elevate.
|
||||
/// </summary>
|
||||
internal static string strRunElevateHeader {
|
||||
get {
|
||||
return ResourceManager.GetString("strRunElevateHeader", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Save.
|
||||
/// </summary>
|
||||
@@ -6381,6 +6489,15 @@ namespace mRemoteNG {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Show on toolbar column.
|
||||
/// </summary>
|
||||
internal static string strShowOnToolbarColumnHeader {
|
||||
get {
|
||||
return ResourceManager.GetString("strShowOnToolbarColumnHeader", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Show protocols on tab names.
|
||||
/// </summary>
|
||||
@@ -7011,6 +7128,15 @@ namespace mRemoteNG {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Timeout (seconds).
|
||||
/// </summary>
|
||||
internal static string strTimeoutInSeconds {
|
||||
get {
|
||||
return ResourceManager.GetString("strTimeoutInSeconds", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Title.
|
||||
/// </summary>
|
||||
@@ -7101,6 +7227,15 @@ namespace mRemoteNG {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Try to integrate.
|
||||
/// </summary>
|
||||
internal static string strTryToIntegrateColumnHeader {
|
||||
get {
|
||||
return ResourceManager.GetString("strTryToIntegrateColumnHeader", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Type.
|
||||
/// </summary>
|
||||
@@ -7471,6 +7606,15 @@ namespace mRemoteNG {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Working directory.
|
||||
/// </summary>
|
||||
internal static string strWorkingDirColumnHeader {
|
||||
get {
|
||||
return ResourceManager.GetString("strWorkingDirColumnHeader", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to XULrunner path:.
|
||||
/// </summary>
|
||||
|
||||
@@ -151,10 +151,10 @@
|
||||
<value>Panel Auswahldialog immer anzeigen</value>
|
||||
</data>
|
||||
<data name="strAlwaysShowPanelTabs" xml:space="preserve">
|
||||
<value>Palettenregister immer anzeigen</value>
|
||||
<value>Panel immer anzeigen</value>
|
||||
</data>
|
||||
<data name="strAlwaysShowSysTrayIcon" xml:space="preserve">
|
||||
<value>System Tray Icon immer anzeigen</value>
|
||||
<value>Tray Icon immer anzeigen</value>
|
||||
</data>
|
||||
<data name="strAskUpdatesCommandAskLater" xml:space="preserve">
|
||||
<value>Später nochmal fragen</value>
|
||||
@@ -178,7 +178,7 @@
|
||||
<value>Automatisch Sitzungsinformationen einholen</value>
|
||||
</data>
|
||||
<data name="strAutoSaveEvery" xml:space="preserve">
|
||||
<value>Automatisch speichern jede:</value>
|
||||
<value>Automatisch speichern in Minuten (0 bedeutet deaktiviert):</value>
|
||||
</data>
|
||||
<data name="strAutoSaveMins" xml:space="preserve">
|
||||
<value>Minuten (0 bedeutet deaktiviert)</value>
|
||||
@@ -424,7 +424,7 @@ VncSharp Control Version {0}</value>
|
||||
<value>Kompatibilitätsproblem entdeckt</value>
|
||||
</data>
|
||||
<data name="strComponentsCheck" xml:space="preserve">
|
||||
<value>Komponentenüberprüfung</value>
|
||||
<value>Komponenten prüfen</value>
|
||||
</data>
|
||||
<data name="strConfigPropertyGridButtonIconClickFailed" xml:space="preserve">
|
||||
<value>Bild Knopf Ereignis fehlgeschlagen!</value>
|
||||
@@ -748,7 +748,7 @@ Starte mit neuer Datei.</value>
|
||||
<value>Quick connect Registerkarten identifizieren, indem das Präfix "Quick:" benutzt wird</value>
|
||||
</data>
|
||||
<data name="strImportAD" xml:space="preserve">
|
||||
<value>Aus Active Directory importieren</value>
|
||||
<value>Von Active Directory importieren</value>
|
||||
</data>
|
||||
<data name="strImportExport" xml:space="preserve">
|
||||
<value>Importieren/Exportieren</value>
|
||||
@@ -817,7 +817,7 @@ Starte mit neuer Datei.</value>
|
||||
<value>Beim Schließen der Verbindungen:</value>
|
||||
</data>
|
||||
<data name="strLabelConnect" xml:space="preserve">
|
||||
<value>&Direkt Verbinden:</value>
|
||||
<value>&Verbinden:</value>
|
||||
</data>
|
||||
<data name="strLabelDisplayName" xml:space="preserve">
|
||||
<value>Anzeigename</value>
|
||||
@@ -931,7 +931,7 @@ Starte mit neuer Datei.</value>
|
||||
<value>Verbindungen</value>
|
||||
</data>
|
||||
<data name="strMenuConnectionsAndConfig" xml:space="preserve">
|
||||
<value>Verbindungen and Konfiguration</value>
|
||||
<value>Verbindungen und Konfiguration</value>
|
||||
</data>
|
||||
<data name="strMenuCopy" xml:space="preserve">
|
||||
<value>Kopieren</value>
|
||||
@@ -994,7 +994,7 @@ Starte mit neuer Datei.</value>
|
||||
<value>&Hilfe</value>
|
||||
</data>
|
||||
<data name="strMenuHelpContents" xml:space="preserve">
|
||||
<value>mRemoteNG Hilfe</value>
|
||||
<value>Hilfe</value>
|
||||
</data>
|
||||
<data name="strMenuJumpTo" xml:space="preserve">
|
||||
<value>Springe zu</value>
|
||||
@@ -1003,10 +1003,7 @@ Starte mit neuer Datei.</value>
|
||||
<value>Starten</value>
|
||||
</data>
|
||||
<data name="strMenuNewConnectionFile" xml:space="preserve">
|
||||
<value>Neue Konfigurationsdatei</value>
|
||||
</data>
|
||||
<data name="strMenuNewExternalTool" xml:space="preserve">
|
||||
<value>Hinzufügen</value>
|
||||
<value>Neue Verbindungsdatei</value>
|
||||
</data>
|
||||
<data name="strMenuNotifications" xml:space="preserve">
|
||||
<value>Meldungen</value>
|
||||
@@ -1021,7 +1018,7 @@ Starte mit neuer Datei.</value>
|
||||
<value>Alle Löschen</value>
|
||||
</data>
|
||||
<data name="strMenuOpenConnectionFile" xml:space="preserve">
|
||||
<value>Konfigurationsdatei öffnen...</value>
|
||||
<value>Verbindungsdatei öffnen...</value>
|
||||
</data>
|
||||
<data name="strMenuOptions" xml:space="preserve">
|
||||
<value>Optionen</value>
|
||||
@@ -1033,7 +1030,7 @@ Starte mit neuer Datei.</value>
|
||||
<value>Port-Scan</value>
|
||||
</data>
|
||||
<data name="strMenuQuickConnectToolbar" xml:space="preserve">
|
||||
<value>Direkt-Verbinden-Symbolleiste</value>
|
||||
<value>QuickConnect Symbolleiste</value>
|
||||
</data>
|
||||
<data name="strMenuReconnect" xml:space="preserve">
|
||||
<value>Wiederverbinden</value>
|
||||
@@ -1060,10 +1057,10 @@ Starte mit neuer Datei.</value>
|
||||
<value>Layout zurücksetzen</value>
|
||||
</data>
|
||||
<data name="strMenuSaveConnectionFile" xml:space="preserve">
|
||||
<value>Konfigurationsdatei speichern</value>
|
||||
<value>Verbindungsdatei speichern</value>
|
||||
</data>
|
||||
<data name="strMenuSaveConnectionFileAs" xml:space="preserve">
|
||||
<value>Konfigurationsdatei speichern unter...</value>
|
||||
<value>Verbindungsdatei speichern unter...</value>
|
||||
</data>
|
||||
<data name="strMenuScreenshot" xml:space="preserve">
|
||||
<value>Bildschirmschnappschuss</value>
|
||||
@@ -1096,7 +1093,7 @@ Starte mit neuer Datei.</value>
|
||||
<value>Chat starten (VNC)</value>
|
||||
</data>
|
||||
<data name="strMenuSupportForum" xml:space="preserve">
|
||||
<value>Unterstützungs Forum</value>
|
||||
<value>Forum</value>
|
||||
</data>
|
||||
<data name="strMenuTools" xml:space="preserve">
|
||||
<value>E&xtras</value>
|
||||
@@ -1566,9 +1563,6 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungsdatei erstell
|
||||
<data name="strQuick" xml:space="preserve">
|
||||
<value>Direkt: {0}</value>
|
||||
</data>
|
||||
<data name="strQuickConnect" xml:space="preserve">
|
||||
<value>Direkt verbinden</value>
|
||||
</data>
|
||||
<data name="strQuickConnectAddFailed" xml:space="preserve">
|
||||
<value>Hinzufügen zur Direktverbindungshistorie fehlgeschlagen!</value>
|
||||
</data>
|
||||
@@ -1828,7 +1822,7 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungsdatei erstell
|
||||
<value>Anmeldeinformationen im Tab Titel anzeigen</value>
|
||||
</data>
|
||||
<data name="strShowProtocolOnTabs" xml:space="preserve">
|
||||
<value>Protokoll im Tab Titel anzeigen</value>
|
||||
<value>Protokoll im Titel des Tab anzeigen</value>
|
||||
</data>
|
||||
<data name="strSingleClickOnConnectionOpensIt" xml:space="preserve">
|
||||
<value>Ein einzelner Klick auf eine Verbindung öffnet diese</value>
|
||||
@@ -2085,9 +2079,6 @@ Wenn Sie Fehler feststellen, dann sollten Sie eine neue Verbindungsdatei erstell
|
||||
<data name="strUpdateCheckPortableEdition" xml:space="preserve">
|
||||
<value>mRemoteNG Portable Edition unterstützt derzeit keine automatische Updates.</value>
|
||||
</data>
|
||||
<data name="strUpdateDeleteFailed" xml:space="preserve">
|
||||
<value>Löschen der Aktualisierungsdatei ist gehlgeschlagen!</value>
|
||||
</data>
|
||||
<data name="strUpdateDownloadComplete" xml:space="preserve">
|
||||
<value>Download fertiggestellt!
|
||||
mRemoteNG wird nun geschlossen und die Installation gestartet.</value>
|
||||
@@ -2180,6 +2171,402 @@ mRemoteNG wird nun geschlossen und die Installation gestartet.</value>
|
||||
<value>Ja</value>
|
||||
</data>
|
||||
<data name="strMenuReconnectAll" xml:space="preserve">
|
||||
<value>Wiederverbinden von allen offenen Verbindungen</value>
|
||||
<value>Wiederverbinden aller offener Verbindungen</value>
|
||||
</data>
|
||||
</root>
|
||||
<data name="strButtonLaunch" xml:space="preserve">
|
||||
<value>&Starten</value>
|
||||
</data>
|
||||
<data name="strCommandOpenConnectionFile" xml:space="preserve">
|
||||
<value>Eine Verbindungsdatei öffnen</value>
|
||||
</data>
|
||||
<data name="strConnectNoCredentials" xml:space="preserve">
|
||||
<value>Ohne Anmeldedaten verbinden</value>
|
||||
</data>
|
||||
<data name="strDontConnectToConsoleSessionMenuItem" xml:space="preserve">
|
||||
<value>Nicht zu Konsolensitzung verbinden</value>
|
||||
</data>
|
||||
<data name="strErrorCouldNotLaunchPutty" xml:space="preserve">
|
||||
<value>PuTTY konnte nicht gestartet werden</value>
|
||||
</data>
|
||||
<data name="strExportEverything" xml:space="preserve">
|
||||
<value>Export alles</value>
|
||||
</data>
|
||||
<data name="strExportFile" xml:space="preserve">
|
||||
<value>Export Datei</value>
|
||||
</data>
|
||||
<data name="strExportProperties" xml:space="preserve">
|
||||
<value>Export Eigeschaften</value>
|
||||
</data>
|
||||
<data name="strFilterAllImportable" xml:space="preserve">
|
||||
<value>Alle importierbaren Dateien</value>
|
||||
</data>
|
||||
<data name="strImportFileFailedMainInstruction" xml:space="preserve">
|
||||
<value>Import fehlgeschlagen</value>
|
||||
</data>
|
||||
<data name="strImportFromFileMenuItem" xml:space="preserve">
|
||||
<value>Von &Datei importieren</value>
|
||||
</data>
|
||||
<data name="strImportLocationContent" xml:space="preserve">
|
||||
<value>Wo sollen die importierten Objekte platziert werden?</value>
|
||||
</data>
|
||||
<data name="strImportLocationMainInstruction" xml:space="preserve">
|
||||
<value>Import Ziel</value>
|
||||
</data>
|
||||
<data name="strOptionsKeyboardButtonDelete" xml:space="preserve">
|
||||
<value>&Löschen</value>
|
||||
</data>
|
||||
<data name="strOptionsKeyboardButtonNew" xml:space="preserve">
|
||||
<value>&Neu</value>
|
||||
</data>
|
||||
<data name="strOptionsKeyboardButtonReset" xml:space="preserve">
|
||||
<value>&Neu</value>
|
||||
</data>
|
||||
<data name="strOptionsKeyboardCommandsNextTab" xml:space="preserve">
|
||||
<value>Nächster Tab</value>
|
||||
</data>
|
||||
<data name="strOptionsKeyboardGroupModifyShortcut" xml:space="preserve">
|
||||
<value>Vorheriger Tab</value>
|
||||
</data>
|
||||
<data name="strOptionsProxyTesting" xml:space="preserve">
|
||||
<value>Teste...</value>
|
||||
</data>
|
||||
<data name="strOptionsTabKeyboard" xml:space="preserve">
|
||||
<value>Tastatur</value>
|
||||
</data>
|
||||
<data name="strUpdateCheckFailedLabel" xml:space="preserve">
|
||||
<value>Überprüfung fehlgeschlagen</value>
|
||||
</data>
|
||||
<data name="strUpdateCheckingLabel" xml:space="preserve">
|
||||
<value>Prüfe auf Updates...</value>
|
||||
</data>
|
||||
<data name="strEncryptionEngine" xml:space="preserve">
|
||||
<value>Verschlüsselungs-Engine</value>
|
||||
</data>
|
||||
<data name="strTabSecurity" xml:space="preserve">
|
||||
<value>Sicherheit</value>
|
||||
</data>
|
||||
<data name="strRDPSoundQualityDynamic" xml:space="preserve">
|
||||
<value>Dynamisch</value>
|
||||
</data>
|
||||
<data name="strRDPSoundQualityHigh" xml:space="preserve">
|
||||
<value>Hoch</value>
|
||||
</data>
|
||||
<data name="strRDPSoundQualityMedium" xml:space="preserve">
|
||||
<value>Mittel</value>
|
||||
</data>
|
||||
<data name="strPropertyNameSoundQuality" xml:space="preserve">
|
||||
<value>Ton Qualität</value>
|
||||
</data>
|
||||
<data name="strUpdatePortableDownloadComplete" xml:space="preserve">
|
||||
<value>Download abgeschlossen!</value>
|
||||
</data>
|
||||
<data name="strRemove" xml:space="preserve">
|
||||
<value>Entfernen</value>
|
||||
</data>
|
||||
<data name="strTitle" xml:space="preserve">
|
||||
<value>Titel</value>
|
||||
</data>
|
||||
<data name="strOpenFile" xml:space="preserve">
|
||||
<value>Datei öffnen</value>
|
||||
</data>
|
||||
<data name="strHttpsInsecureAllowAlways" xml:space="preserve">
|
||||
<value>Immer erlauben</value>
|
||||
</data>
|
||||
<data name="strHttpsInsecureAllowOnce" xml:space="preserve">
|
||||
<value>Ein Mal erlauben</value>
|
||||
</data>
|
||||
<data name="strHttpsInsecureDontAllow" xml:space="preserve">
|
||||
<value>Nie erlauben</value>
|
||||
</data>
|
||||
<data name="IncorrectPassword" xml:space="preserve">
|
||||
<value>Falsches Passwort</value>
|
||||
</data>
|
||||
<data name="Source" xml:space="preserve">
|
||||
<value>Qualle</value>
|
||||
</data>
|
||||
<data name="strBack" xml:space="preserve">
|
||||
<value>Zurück</value>
|
||||
</data>
|
||||
<data name="strCreateAndOpenNewFile" xml:space="preserve">
|
||||
<value>Erstelle und öffne neue Datei</value>
|
||||
</data>
|
||||
<data name="strOpenADifferentFile" xml:space="preserve">
|
||||
<value>Andere Datei öffnen</value>
|
||||
</data>
|
||||
<data name="strCredentialManagerUpgradeDescription" xml:space="preserve">
|
||||
<value>In v1.76 haben wir ein Berechtigungsverwaltungssystem eingeführt. Diese Funktion erfordert eine erhebliche Änderung bei der Speicherung und Interaktion mit Anmeldeinformationen in mRemoteNG. Sie müssen eine Aktualisierung Ihrer mRemoteNG-Verbindungsdatei durchführen.
|
||||
|
||||
Diese Seite führt Sie durch den Prozess der Aktualisierung Ihrer Verbindungsdatei oder gibt Ihnen die Möglichkeit, eine andere Verbindungsdatei zu öffnen, wenn Sie das Upgrade nicht durchführen möchten.</value>
|
||||
</data>
|
||||
<data name="ConfigurationCreateNew" xml:space="preserve">
|
||||
<value>Neue Verbindungsdatei erstellen</value>
|
||||
</data>
|
||||
<data name="strCommandExitProgram" xml:space="preserve">
|
||||
<value>B&eende {0}</value>
|
||||
</data>
|
||||
<data name="strCommandTryAgain" xml:space="preserve">
|
||||
<value>&Nochmal versuchen</value>
|
||||
</data>
|
||||
<data name="strExternalToolDefaultName" xml:space="preserve">
|
||||
<value>Neues externes Programm</value>
|
||||
</data>
|
||||
<data name="strLoadFromSqlFailedContent" xml:space="preserve">
|
||||
<value>Die Verbindungsinformationen konnten nicht vom SQL-Server geladen werden.</value>
|
||||
</data>
|
||||
<data name="strOptionsKeyboardCommandsPreviousTab" xml:space="preserve">
|
||||
<value>Vorheriger Tab</value>
|
||||
</data>
|
||||
<data name="strOptionsKeyboardLabelKeyboardShortcuts" xml:space="preserve">
|
||||
<value>Tataturkürzel</value>
|
||||
</data>
|
||||
<data name="strPasswordStatusMustMatch" xml:space="preserve">
|
||||
<value>Beide Passwörter müssen übereinstimmen</value>
|
||||
</data>
|
||||
<data name="strPasswordStatusTooShort" xml:space="preserve">
|
||||
<value>Das Passwort muss mindestens 3 Zeichen lang sein.</value>
|
||||
</data>
|
||||
<data name="strPortScanComplete" xml:space="preserve">
|
||||
<value>Port-Scan abgeschlossen.</value>
|
||||
</data>
|
||||
<data name="strPropertyDescriptionAutomaticResize" xml:space="preserve">
|
||||
<value>Wählen Sie aus, ob die Größe der Verbindung automatisch angepasst werden soll, wenn die Fenstergröße geändert oder der Vollbildmodus umgeschaltet wird. Benötigt RDC 8.0 oder höher.</value>
|
||||
</data>
|
||||
<data name="strPropertyDescriptionLoadBalanceInfo" xml:space="preserve">
|
||||
<value>Gibt die Lastausgleichsinformationen an, die von Lastenausgleichsroutern verwendet werden, um den besten Server auszuwählen.</value>
|
||||
</data>
|
||||
<data name="strPropertyNameLoadBalanceInfo" xml:space="preserve">
|
||||
<value>Lastausgleichsinfo</value>
|
||||
</data>
|
||||
<data name="strTitlePasswordWithName" xml:space="preserve">
|
||||
<value>Passwort für {0}</value>
|
||||
</data>
|
||||
<data name="strRDPOverallConnectionTimeout" xml:space="preserve">
|
||||
<value>RDP-Verbindungs-Timeout:</value>
|
||||
</data>
|
||||
<data name="strNodeAlreadyInFolder" xml:space="preserve">
|
||||
<value>Dieser Knoten ist bereits im Verzeichnis</value>
|
||||
</data>
|
||||
<data name="strNodeCannotDragOnSelf" xml:space="preserve">
|
||||
<value>Knoten kann nicht auf sich selbst gezogen werden.</value>
|
||||
</data>
|
||||
<data name="strNodeCannotDragParentOnChild" xml:space="preserve">
|
||||
<value>Elternknoten kann nicht auf Kindknoten gezogen werden.</value>
|
||||
</data>
|
||||
<data name="strNodeNotDraggable" xml:space="preserve">
|
||||
<value>Dieser Knoten ist nicht ziehbar.</value>
|
||||
</data>
|
||||
<data name="strEncryptionBlockCipherMode" xml:space="preserve">
|
||||
<value>Block Cipher-Modus</value>
|
||||
</data>
|
||||
<data name="strShowTheseMessageTypes" xml:space="preserve">
|
||||
<value>Zeige diese Nachrichtentypen</value>
|
||||
</data>
|
||||
<data name="ConnectionFileNotFound" xml:space="preserve">
|
||||
<value>Die Verbindungsdatei konnte nicht gefunden werden.</value>
|
||||
</data>
|
||||
<data name="ConfigurationImportFile" xml:space="preserve">
|
||||
<value>Existierende Datei importieren</value>
|
||||
</data>
|
||||
<data name="ConnectionSuccessful" xml:space="preserve">
|
||||
<value>Verbindung erfolgreich</value>
|
||||
</data>
|
||||
<data name="DatabaseNotAvailable" xml:space="preserve">
|
||||
<value>Datenbank '{0}' nicht verfügbar.</value>
|
||||
</data>
|
||||
<data name="SaveConnectionsAfterEveryEdit" xml:space="preserve">
|
||||
<value>Verbindungen nach jeder Änderung speichern</value>
|
||||
</data>
|
||||
<data name="FilterSearchMatchesInConnectionTree" xml:space="preserve">
|
||||
<value>Suchergebnisse in Verbindungen filtern</value>
|
||||
</data>
|
||||
<data name="TestConnection" xml:space="preserve">
|
||||
<value>Teste Verbindung</value>
|
||||
</data>
|
||||
<data name="strTimeoutInSeconds" xml:space="preserve">
|
||||
<value>Time-Out (Sekunden)</value>
|
||||
</data>
|
||||
<data name="strOptionsKeyboardButtonResetAll" xml:space="preserve">
|
||||
<value>&Alles zurücksetzen</value>
|
||||
</data>
|
||||
<data name="strPropertyNameAutomaticResize" xml:space="preserve">
|
||||
<value>Automatische Größenanpassung</value>
|
||||
</data>
|
||||
<data name="strPuttySessionSettings" xml:space="preserve">
|
||||
<value>PuTTY Sitzungseinstellungen</value>
|
||||
</data>
|
||||
<data name="strShowOnToolbar" xml:space="preserve">
|
||||
<value>Auf der Toolbar anzeigen</value>
|
||||
</data>
|
||||
<data name="strAccept" xml:space="preserve">
|
||||
<value>Akzeptieren</value>
|
||||
</data>
|
||||
<data name="strCredentialEditor" xml:space="preserve">
|
||||
<value>Hinzufügen</value>
|
||||
</data>
|
||||
<data name="strAssignedCredential" xml:space="preserve">
|
||||
<value>Zugewiesene Anmeldedaten</value>
|
||||
</data>
|
||||
<data name="strHttpsInsecurePromptTitle" xml:space="preserve">
|
||||
<value>Unsichere Zertifikate erlauben?</value>
|
||||
</data>
|
||||
<data name="Unlock" xml:space="preserve">
|
||||
<value>Entsperren</value>
|
||||
</data>
|
||||
<data name="strOptionsThemeEnableTheming" xml:space="preserve">
|
||||
<value>Themes aktivieren</value>
|
||||
</data>
|
||||
<data name="strOptionsThemeNewThemeCaption" xml:space="preserve">
|
||||
<value>Neuer Thema Name</value>
|
||||
</data>
|
||||
<data name="TestingConnection" xml:space="preserve">
|
||||
<value>Teste Verbindung</value>
|
||||
</data>
|
||||
<data name="strExportToFileMenuItem" xml:space="preserve">
|
||||
<value>In Datei &exportieren...</value>
|
||||
</data>
|
||||
<data name="strImportFileFailedContent" xml:space="preserve">
|
||||
<value>Ein Fehler ist während des Imports der Datei {0} aufgetreten.</value>
|
||||
</data>
|
||||
<data name="strMenuLockToolbars" xml:space="preserve">
|
||||
<value>Symbolleisten sperren</value>
|
||||
</data>
|
||||
<data name="strMenuMultiSshToolbar" xml:space="preserve">
|
||||
<value>Multi-SSH Symbolleiste</value>
|
||||
</data>
|
||||
<data name="strAdvancedSecurityOptions" xml:space="preserve">
|
||||
<value>Erweiterte Sicherheitsoptionen</value>
|
||||
</data>
|
||||
<data name="strLogTheseMessageTypes" xml:space="preserve">
|
||||
<value>Diese Nachrichtentypen protokollieren</value>
|
||||
</data>
|
||||
<data name="strOptionsThemeThemeChaangeWarning" xml:space="preserve">
|
||||
<value>Warnung! Ein Neustart ist notwendig um ein Theme zu deaktivieren oder anzuwenden</value>
|
||||
</data>
|
||||
<data name="strOptionsThemeErrorNoThemes" xml:space="preserve">
|
||||
<value>
|
||||
Es werden keine Themes geladen, vergewissern Sie sich, dass das standard mremoteNG-Theme im Ordner 'themes' vorhanden ist</value>
|
||||
</data>
|
||||
<data name="LoginFailedForUser" xml:space="preserve">
|
||||
<value>Login fehlgeschlagen für Benutzer '{0}'.</value>
|
||||
</data>
|
||||
<data name="strOptionsPageTitle" xml:space="preserve">
|
||||
<value>mRemoteNG Optionen</value>
|
||||
</data>
|
||||
<data name="strImportLocationCommandButtons" xml:space="preserve">
|
||||
<value>Unter dem Stamm {0} {1} | Unter dem ausgewählten Ordner {0} {2}</value>
|
||||
</data>
|
||||
<data name="strMenuNewExternalTool" xml:space="preserve">
|
||||
<value>Neues externes Tool</value>
|
||||
</data>
|
||||
<data name="strMenuSessionRetrieve" xml:space="preserve">
|
||||
<value>Abrufen</value>
|
||||
</data>
|
||||
<data name="strUpdateGetChangeLogFailed" xml:space="preserve">
|
||||
<value>Das Change-Log konnte nicht herunter geladen werden.</value>
|
||||
</data>
|
||||
<data name="strPropertyDescriptionSoundQuality" xml:space="preserve">
|
||||
<value>Wählen Sie die vom Protokoll bereitgestellte Klangqualität: Dynamisch, Mittel, Hoch</value>
|
||||
</data>
|
||||
<data name="strPropertyDescriptionRDPMinutesToIdleTimeout" xml:space="preserve">
|
||||
<value>Die Anzahl der Minuten, die die RDP-Sitzung im Leerlauf verbleibt, bevor sie automatisch getrennt wird (0 bedeutet kein Limit)</value>
|
||||
</data>
|
||||
<data name="strPropertyNameRDPMinutesToIdleTimeout" xml:space="preserve">
|
||||
<value>Minuten zum Leerlauf</value>
|
||||
</data>
|
||||
<data name="strAdd" xml:space="preserve">
|
||||
<value>Hinzufügen</value>
|
||||
</data>
|
||||
<data name="strPropertyDescriptionCredential" xml:space="preserve">
|
||||
<value>Auswählen welche Anmeldeinformationen für diese Verbindung verwendet werden sollen.</value>
|
||||
</data>
|
||||
<data name="strConfirmDeleteCredentialRecord" xml:space="preserve">
|
||||
<value>Möchten Sie die Anmeldeinformationen {0} wirklich löschen?</value>
|
||||
</data>
|
||||
<data name="strFindMatchingCredentialFailed" xml:space="preserve">
|
||||
<value>
|
||||
Es konnte kein Anmeldedatensatz mit der ID "{0}" für den Verbindungsdatensatz mit dem Namen "{1}" gefunden werden.</value>
|
||||
</data>
|
||||
<data name="strPropertyDescriptionRDPAlertIdleTimeout" xml:space="preserve">
|
||||
<value>Wählen Sie, ob eine Benachrichtigung empfangen werden soll, nachdem die RDP-Sitzung aufgrund von Inaktivität getrennt wurde</value>
|
||||
</data>
|
||||
<data name="strPropertyNameRDPAlertIdleTimeout" xml:space="preserve">
|
||||
<value>Benachrichtigung bei Leerlauftrennung</value>
|
||||
</data>
|
||||
<data name="strPasswordConstainsSpecialCharactersConstraintHint" xml:space="preserve">
|
||||
<value>Das Passwort muss mindestens {0} der folgenden Zeichen enthalten: {1}</value>
|
||||
</data>
|
||||
<data name="strPasswordContainsLowerCaseConstraintHint" xml:space="preserve">
|
||||
<value>Das Passwort muss mindestens {0} Kleinbuchstaben enthalten</value>
|
||||
</data>
|
||||
<data name="strPasswordContainsNumbersConstraint" xml:space="preserve">
|
||||
<value>Passwort muss mindestens {0} Nummer (n) enthalten</value>
|
||||
</data>
|
||||
<data name="strPasswordContainsUpperCaseConstraintHint" xml:space="preserve">
|
||||
<value>Passwort muss mindestens {0} Großbuchstaben enthalten</value>
|
||||
</data>
|
||||
<data name="strPasswordLengthConstraintHint" xml:space="preserve">
|
||||
<value>
|
||||
Die Passwortlänge muss zwischen {0} und {1} liegen</value>
|
||||
</data>
|
||||
<data name="strChooseLogPath" xml:space="preserve">
|
||||
<value>
|
||||
Wählen Sie einen Pfad für die mRemoteNG-Protokolldatei</value>
|
||||
</data>
|
||||
<data name="strLogFilePath" xml:space="preserve">
|
||||
<value>Protokollierungspfad</value>
|
||||
</data>
|
||||
<data name="strChoosePath" xml:space="preserve">
|
||||
<value>Pfad wählen</value>
|
||||
</data>
|
||||
<data name="strUseDefault" xml:space="preserve">
|
||||
<value>Standard verwenden</value>
|
||||
</data>
|
||||
<data name="strLogging" xml:space="preserve">
|
||||
<value>Protokollierung</value>
|
||||
</data>
|
||||
<data name="strLogToAppDir" xml:space="preserve">
|
||||
<value>In das Anwendungsverzeichnis protokollieren</value>
|
||||
</data>
|
||||
<data name="strHttpsInsecurePrompt" xml:space="preserve">
|
||||
<value>Unsicheres Zertifikat für URL zulassen: {0}?</value>
|
||||
</data>
|
||||
<data name="RepositoryIsUnlocked" xml:space="preserve">
|
||||
<value>Das ausgewählte Repository ist entsperrt</value>
|
||||
</data>
|
||||
<data name="Unlocking" xml:space="preserve">
|
||||
<value>Entsperren</value>
|
||||
</data>
|
||||
<data name="UnlockCredentialRepository" xml:space="preserve">
|
||||
<value>Entsperre Credential Repository</value>
|
||||
</data>
|
||||
<data name="PromptUnlockCredReposOnStartup" xml:space="preserve">
|
||||
<value>Auffordern das Credential Repository beim Start zu entsperren</value>
|
||||
</data>
|
||||
<data name="strConnectionFilePath" xml:space="preserve">
|
||||
<value>Verbindungsdateipfad</value>
|
||||
</data>
|
||||
<data name="CredentialUnavailable" xml:space="preserve">
|
||||
<value>Anmeldeinformationen nicht verfügbar</value>
|
||||
</data>
|
||||
<data name="strOptionsThemeDeleteConfirmation" xml:space="preserve">
|
||||
<value>Soll das Theme wirklich gelöscht werden?</value>
|
||||
</data>
|
||||
<data name="strOptionsThemeNewThemeError" xml:space="preserve">
|
||||
<value>Das Theme kann nicht erstellt werden, Name bereits vorhanden oder Sonderzeichen im Namen</value>
|
||||
</data>
|
||||
<data name="strOptionsThemeNewThemeText" xml:space="preserve">
|
||||
<value>Namen des neuen Theme angeben</value>
|
||||
</data>
|
||||
<data name="CouldNotFindExternalTool" xml:space="preserve">
|
||||
<value>Externes Tool mit Namen "{0}" konnte nicht gefunden werden</value>
|
||||
</data>
|
||||
<data name="ConfigurationCustomPath" xml:space="preserve">
|
||||
<value>Eigenen Pfad verwenden</value>
|
||||
</data>
|
||||
<data name="ServerNotAccessible" xml:space="preserve">
|
||||
<value>Server '{0}' nicht erreichbar</value>
|
||||
</data>
|
||||
<data name="LoadBalanceInfoUseUtf8" xml:space="preserve">
|
||||
<value>Verwenden Sie die UTF8-Codierung für die RDP-Eigenschaft "Load Balance Info"</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -1154,7 +1154,7 @@ Ver el articulo de soporte de Microsoft en http://support.microsoft.com/kb/81183
|
||||
<value>Sin SmartSize</value>
|
||||
</data>
|
||||
<data name="strNoUpdateAvailable" xml:space="preserve">
|
||||
<value>Sin actualizaciones dosponibles</value>
|
||||
<value>Sin actualizaciones disponibles</value>
|
||||
</data>
|
||||
<data name="strOldConffile" xml:space="preserve">
|
||||
<value>Está intentando cargar un archivo de conexión que ha sido creado con una versión muy antigua de mRemote, ésto puede causar un error en tiempo de ejecución.
|
||||
@@ -2069,4 +2069,4 @@ mRemoteNG ahora se cerrará y comenzará la instalación.</value>
|
||||
<data name="strYes" xml:space="preserve">
|
||||
<value>Sí</value>
|
||||
</data>
|
||||
</root>
|
||||
</root>
|
||||
|
||||
@@ -181,7 +181,7 @@
|
||||
<value>Automatically get session information</value>
|
||||
</data>
|
||||
<data name="strAutoSaveEvery" xml:space="preserve">
|
||||
<value>Auto save every:</value>
|
||||
<value>Auto save time in minutes (0 means disabled):</value>
|
||||
</data>
|
||||
<data name="strAutoSaveMins" xml:space="preserve">
|
||||
<value>Minutes (0 means disabled)</value>
|
||||
@@ -836,7 +836,7 @@ See the Microsoft Support article at http://support.microsoft.com/kb/811833 for
|
||||
<value>Import/Export</value>
|
||||
</data>
|
||||
<data name="strImportFileFailedContent" xml:space="preserve">
|
||||
<value>An error occurred while importing the file, "{0}".</value>
|
||||
<value>An error occurred while importing the file "{0}".</value>
|
||||
</data>
|
||||
<data name="strImportFileFailedMainInstruction" xml:space="preserve">
|
||||
<value>Import failed</value>
|
||||
@@ -2584,7 +2584,7 @@ This page will walk you through the process of upgrading your connections file o
|
||||
<value>Warning: Restart is required to disable the themes or to completely apply a new one</value>
|
||||
</data>
|
||||
<data name="strOptionsThemeErrorNoThemes" xml:space="preserve">
|
||||
<value>No themes are loaded, check that the default mremoteNG themes exist in the slash themes folder</value>
|
||||
<value>No themes are loaded, check that the default mremoteNG themes exist in the 'themes' folder</value>
|
||||
</data>
|
||||
<data name="CouldNotFindExternalTool" xml:space="preserve">
|
||||
<value>Could not find external tool with name "{0}"</value>
|
||||
@@ -2631,4 +2631,52 @@ 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="strTimeoutInSeconds" xml:space="preserve">
|
||||
<value>Timeout (seconds)</value>
|
||||
</data>
|
||||
<data name="srtWorkingDirectory" xml:space="preserve">
|
||||
<value>Working directory:</value>
|
||||
</data>
|
||||
<data name="strRunElevated" xml:space="preserve">
|
||||
<value>Run elevated</value>
|
||||
</data>
|
||||
<data name="strRunElevateHeader" xml:space="preserve">
|
||||
<value>Run elevate</value>
|
||||
</data>
|
||||
<data name="strShowOnToolbarColumnHeader" xml:space="preserve">
|
||||
<value>Show on toolbar column</value>
|
||||
</data>
|
||||
<data name="strTryToIntegrateColumnHeader" xml:space="preserve">
|
||||
<value>Try to integrate</value>
|
||||
</data>
|
||||
<data name="strWorkingDirColumnHeader" xml:space="preserve">
|
||||
<value>Working directory</value>
|
||||
</data>
|
||||
<data name="strLockToolbars" xml:space="preserve">
|
||||
<value>Lock toolbar positions</value>
|
||||
</data>
|
||||
<data name="strMultiSshToolbar" xml:space="preserve">
|
||||
<value>Multi SSH toolbar</value>
|
||||
</data>
|
||||
<data name="strImportSubOUs" xml:space="preserve">
|
||||
<value>Import sub OUs</value>
|
||||
</data>
|
||||
<data name="strMenuLockToolbars" xml:space="preserve">
|
||||
<value>Lock Toolbar Positions</value>
|
||||
</data>
|
||||
<data name="strMenuMultiSshToolbar" xml:space="preserve">
|
||||
<value>Multi SSH Toolbar</value>
|
||||
</data>
|
||||
<data name="strAdvancedSecurityOptions" xml:space="preserve">
|
||||
<value>AdvancedSecurityOptions</value>
|
||||
</data>
|
||||
<data name="strOptionsPageTitle" xml:space="preserve">
|
||||
<value>mRemoteNG Options</value>
|
||||
</data>
|
||||
<data name="strLoadBalanceInfoUseUtf8" xml:space="preserve">
|
||||
<value>Use UTF8 encoding for RDP "Load Balance Info" property</value>
|
||||
</data>
|
||||
<data name="strCreateEmptyPanelOnStartUp" xml:space="preserve">
|
||||
<value>Create an empty panel when mRemoteNG starts</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -187,13 +187,13 @@
|
||||
<value>Текущая версия</value>
|
||||
</data>
|
||||
<data name="strButtonBrowse" xml:space="preserve">
|
||||
<value>&Обзор ...</value>
|
||||
<value>&Обзор...</value>
|
||||
</data>
|
||||
<data name="strButtonCancel" xml:space="preserve">
|
||||
<value>&Отменить</value>
|
||||
</data>
|
||||
<data name="strButtonChange" xml:space="preserve">
|
||||
<value>Измененить</value>
|
||||
<value>Изменить</value>
|
||||
</data>
|
||||
<data name="strButtonClose" xml:space="preserve">
|
||||
<value>&Закрыть</value>
|
||||
@@ -302,8 +302,8 @@
|
||||
<value>GeckoFx был найден и установлен правильно.</value>
|
||||
</data>
|
||||
<data name="strCcICAFailed" xml:space="preserve">
|
||||
<value>ICA требуется установленный XenDesktop Online Plugin и зарегистрированная библиотека wfica.ocx. Вы можете скачать клиент здесь: http://www.citrix.com/download/
|
||||
Если у вас есть установленный XenDesktop Online Plugin и ничего не работает, попробуйте зарегистрировать wfica.ocx вручную.
|
||||
<value>ICA требуется установленный XenDesktop Online Plugin и зарегистрированная библиотека wfica.ocx. Вы можете скачать клиент здесь: http://www.citrix.com/download/
|
||||
Если у вас есть установленный XenDesktop Online Plugin и ничего не работает, попробуйте зарегистрировать wfica.ocx вручную.
|
||||
Для этого откройте (Пуск - Выполнить) и введите следующую команду: regsvr32 "C:\Program Files\Citrix\ICA Client\wfica.ocx" (где C:\Program Files\Citrix \ICA Client\ это путь к XenDesktop Online Plugin).
|
||||
Если у вас все же не работает ICA в mRemoteNG обратитесь на форум mRemoteNG http://forum.mremoteng.org/ "</value>
|
||||
</data>
|
||||
@@ -319,7 +319,7 @@
|
||||
Убедитесь, что putty.exe есть в папке с mRemoteNG (по умолчанию: C:\Program Files\mRemoteNG\), или что вы указали правильный путь к исполняемому файлу PuTTY в Инструменты - Опции - Дополнительно - Путь к PuTTY)</value>
|
||||
</data>
|
||||
<data name="strCcPuttyOK" xml:space="preserve">
|
||||
<value>Испольняемый файл PuTTY найден и готов к использованию.</value>
|
||||
<value>Исполняемый файл PuTTY найден и готов к использованию.</value>
|
||||
</data>
|
||||
<data name="strCcRDPFailed" xml:space="preserve">
|
||||
<value>Для правильной работы RDP необходимо иметь установленный Remote Desktop Connection (Terminal Services Client) 8.0. Вы можете получить его здесь: https://support.microsoft.com/kb/2592687
|
||||
@@ -418,7 +418,7 @@
|
||||
<value>Невозможно разобрать аргументы командной строки!</value>
|
||||
</data>
|
||||
<data name="strCompatibilityLenovoAutoScrollUtilityDetected" xml:space="preserve">
|
||||
<value>{0} обнаружено что на этой системе работает утилита Lenovo Auto Scroll. Известно, что эта утилита вызвает проблемы с {0}. Рекомендуется отключить или удалить ее.</value>
|
||||
<value>{0} обнаружено что на этой системе работает утилита Lenovo Auto Scroll. Известно, что эта утилита вызывает проблемы с {0}. Рекомендуется отключить или удалить ее.</value>
|
||||
</data>
|
||||
<data name="strCompatibilityProblemDetected" xml:space="preserve">
|
||||
<value>Обнаружена проблема совместимости</value>
|
||||
@@ -569,7 +569,7 @@
|
||||
<value>Не подключать без проверки</value>
|
||||
</data>
|
||||
<data name="strDoubleClickTabClosesIt" xml:space="preserve">
|
||||
<value>Двойной щелчок для закрытия вкладки</value>
|
||||
<value>Двойной щелчок для закрытия вкладки</value>
|
||||
</data>
|
||||
<data name="strDownloadAndInstall" xml:space="preserve">
|
||||
<value>Загрузка и установка</value>
|
||||
@@ -605,7 +605,7 @@
|
||||
<value>Конечный IP</value>
|
||||
</data>
|
||||
<data name="strEndPort" xml:space="preserve">
|
||||
<value>Конечн. порт</value>
|
||||
<value>Конечный порт</value>
|
||||
</data>
|
||||
<data name="strErrorAddExternalToolsToToolBarFailed" xml:space="preserve">
|
||||
<value>Ошибка добавления внешнего приложения на Панель (frmMain). {0}</value>
|
||||
@@ -711,7 +711,7 @@
|
||||
<value>Соединение</value>
|
||||
</data>
|
||||
<data name="strGroupboxExternalToolProperties" xml:space="preserve">
|
||||
<value>Свройства внешнего инструмента</value>
|
||||
<value>Свойства внешнего инструмента</value>
|
||||
</data>
|
||||
<data name="strGroupboxFiles" xml:space="preserve">
|
||||
<value>Файлы</value>
|
||||
@@ -825,7 +825,7 @@
|
||||
<value>&Подключение:</value>
|
||||
</data>
|
||||
<data name="strLabelDisplayName" xml:space="preserve">
|
||||
<value>Отображаемое имя</value>
|
||||
<value>Отображаемое имя:</value>
|
||||
</data>
|
||||
<data name="strLabelDomain" xml:space="preserve">
|
||||
<value>Домен:</value>
|
||||
@@ -855,7 +855,7 @@
|
||||
<value>Нажмите на эту кнопку для настройки сессий PuTTY:</value>
|
||||
</data>
|
||||
<data name="strLabelPuttyTimeout" xml:space="preserve">
|
||||
<value>Max. PuTTY && Integrated Ext. Apps wait time:</value>
|
||||
<value>Максимальное время ожидание PuTTY и внешнего приложения:</value>
|
||||
</data>
|
||||
<data name="strLabelReleasedUnderGPL" xml:space="preserve">
|
||||
<value>Выпущено под лицензией GNU General Public License (GPL)</value>
|
||||
@@ -897,7 +897,7 @@
|
||||
<value>Загрузить из XML не удалось!</value>
|
||||
</data>
|
||||
<data name="strLocalFile" xml:space="preserve">
|
||||
<value>Локал. файл</value>
|
||||
<value>Локальный файл</value>
|
||||
</data>
|
||||
<data name="strLocalFileDoesNotExist" xml:space="preserve">
|
||||
<value>Локальный файл не существует!</value>
|
||||
@@ -951,10 +951,10 @@
|
||||
<value>Удалить...</value>
|
||||
</data>
|
||||
<data name="strMenuDeleteConnection" xml:space="preserve">
|
||||
<value>Удалить подключение ...</value>
|
||||
<value>Удалить подключение...</value>
|
||||
</data>
|
||||
<data name="strMenuDeleteExternalTool" xml:space="preserve">
|
||||
<value>Удалить Внешний инструмент...</value>
|
||||
<value>Удалить внешний инструмент...</value>
|
||||
</data>
|
||||
<data name="strMenuDeleteFolder" xml:space="preserve">
|
||||
<value>Удалить папку...</value>
|
||||
@@ -1270,7 +1270,7 @@
|
||||
<value>Это имя, которое будет отображаться в дереве подключений.</value>
|
||||
</data>
|
||||
<data name="strPropertyDescriptionPanel" xml:space="preserve">
|
||||
<value>Устанавить панель, в которой будет открыто подключение.</value>
|
||||
<value>Установить панель, в которой будет открыто подключение.</value>
|
||||
</data>
|
||||
<data name="strPropertyDescriptionPassword" xml:space="preserve">
|
||||
<value>Введите пароль.</value>
|
||||
@@ -1579,7 +1579,7 @@
|
||||
<value>Ошибка добавления Быстрого подключения!</value>
|
||||
</data>
|
||||
<data name="strQuickConnectFailed" xml:space="preserve">
|
||||
<value>Созданить быстрое подключение не удалось</value>
|
||||
<value>Создать быстрое подключение не удалось</value>
|
||||
</data>
|
||||
<data name="strRadioCloseWarnAll" xml:space="preserve">
|
||||
<value>Предупреждать при закрытии подключений</value>
|
||||
@@ -1705,7 +1705,7 @@
|
||||
<value>Ошибка сессии!</value>
|
||||
</data>
|
||||
<data name="strRdpReconnectCount" xml:space="preserve">
|
||||
<value>К-ство переподключений RDP:</value>
|
||||
<value>Количество переподключений RDP:</value>
|
||||
</data>
|
||||
<data name="strRdpSetAuthenticationLevelFailed" xml:space="preserve">
|
||||
<value>RDP: Установить уровень проверки подлинности не удалась!</value>
|
||||
@@ -1768,7 +1768,7 @@
|
||||
<value>Обновление</value>
|
||||
</data>
|
||||
<data name="strRemoteFile" xml:space="preserve">
|
||||
<value>Удаленн. файл</value>
|
||||
<value>Удалить файл</value>
|
||||
</data>
|
||||
<data name="strRemoveAll" xml:space="preserve">
|
||||
<value>Удалить все</value>
|
||||
@@ -1885,7 +1885,7 @@
|
||||
<value>Фоновая передача по SSH - не удалась!</value>
|
||||
</data>
|
||||
<data name="strSSHTranferSuccessful" xml:space="preserve">
|
||||
<value>Передано успешо!</value>
|
||||
<value>Передано успешно!</value>
|
||||
</data>
|
||||
<data name="strSSHTransferEndFailed" xml:space="preserve">
|
||||
<value>Передача по SSH завершена с ошибкой (UI.Window.SSHTransfer)!</value>
|
||||
@@ -1897,7 +1897,7 @@
|
||||
<value>Начальный IP</value>
|
||||
</data>
|
||||
<data name="strStartPort" xml:space="preserve">
|
||||
<value>Начальн. порт</value>
|
||||
<value>Начальный порт</value>
|
||||
</data>
|
||||
<data name="strStartupExit" xml:space="preserve">
|
||||
<value>Запуск / Выход</value>
|
||||
@@ -2080,7 +2080,7 @@
|
||||
<value>Требуется обновление mRemoteNG</value>
|
||||
</data>
|
||||
<data name="strUpdateCheck" xml:space="preserve">
|
||||
<value>mRemoteNG может периодически подключаться к сайту mRemoteNG для проверки наличия обновлений.</value>
|
||||
<value>mRemoteNG может периодически подключаться к сайту mRemoteNG для проверки наличия обновлений.</value>
|
||||
</data>
|
||||
<data name="strUpdateCheckCompleteFailed" xml:space="preserve">
|
||||
<value>Не удалось завершить проверку обновлений!</value>
|
||||
@@ -2191,4 +2191,76 @@ mRemoteNG сейчас прекратит работу и начнет проц
|
||||
<data name="strMenuReconnectAll" xml:space="preserve">
|
||||
<value>Переподключить все открытые соединения</value>
|
||||
</data>
|
||||
<data name="srtWorkingDirectory" xml:space="preserve">
|
||||
<value>Рабочий каталог:</value>
|
||||
</data>
|
||||
<data name="strButtonLaunch" xml:space="preserve">
|
||||
<value>Запуск</value>
|
||||
</data>
|
||||
<data name="strRunElevated" xml:space="preserve">
|
||||
<value>Выполнить с повышенными правами</value>
|
||||
</data>
|
||||
<data name="strRunElevateHeader" xml:space="preserve">
|
||||
<value>Выполнить с повышенными правами</value>
|
||||
</data>
|
||||
<data name="strShowOnToolbar" xml:space="preserve">
|
||||
<value>Отобразить на панели инструментов:</value>
|
||||
</data>
|
||||
<data name="strShowOnToolbarColumnHeader" xml:space="preserve">
|
||||
<value>Отобразить на панели инструментов</value>
|
||||
</data>
|
||||
<data name="strTryToIntegrateColumnHeader" xml:space="preserve">
|
||||
<value>Попробовать интегрировать</value>
|
||||
</data>
|
||||
<data name="strWorkingDirColumnHeader" xml:space="preserve">
|
||||
<value>Рабочий каталог</value>
|
||||
</data>
|
||||
<data name="strExportToFileMenuItem" xml:space="preserve">
|
||||
<value>Экспорт в файл...</value>
|
||||
</data>
|
||||
<data name="strImportFromFileMenuItem" xml:space="preserve">
|
||||
<value>Импорт из файла...</value>
|
||||
</data>
|
||||
<data name="strImportMenuItem" xml:space="preserve">
|
||||
<value>Импорт</value>
|
||||
</data>
|
||||
<data name="strLockToolbars" xml:space="preserve">
|
||||
<value>Закрепить позицию панели инструментов</value>
|
||||
</data>
|
||||
<data name="strMultiSshToolbar" xml:space="preserve">
|
||||
<value>Панель инструментов SSH</value>
|
||||
</data>
|
||||
<data name="strAssignedCredential" xml:space="preserve">
|
||||
<value>Назначенные учетные данные</value>
|
||||
</data>
|
||||
<data name="strExportEverything" xml:space="preserve">
|
||||
<value>Экспортировать все</value>
|
||||
</data>
|
||||
<data name="strExportFile" xml:space="preserve">
|
||||
<value>Файл экспорта</value>
|
||||
</data>
|
||||
<data name="strExportItems" xml:space="preserve">
|
||||
<value>Пункт импорта</value>
|
||||
</data>
|
||||
<data name="strExportProperties" xml:space="preserve">
|
||||
<value>Экспорт свойств</value>
|
||||
</data>
|
||||
<data name="strExportSelectedConnection" xml:space="preserve">
|
||||
<value>Экспорт выбранного соединения</value>
|
||||
</data>
|
||||
<data name="strExportSelectedFolder" xml:space="preserve">
|
||||
<value>Экспорт выбранной папки</value>
|
||||
</data>
|
||||
<data name="strFileFormatLabel" xml:space="preserve">
|
||||
<value>Формат файла:</value>
|
||||
</data>
|
||||
<data name="strImportSubOUs" xml:space="preserve">
|
||||
<value>Импорт подразделений</value>
|
||||
</data>
|
||||
<data name="strLoadBalanceInfoUseUtf8" xml:space="preserve">
|
||||
<value>Используйте кодировку UTF8 для свойства RDP "Load Balance Info"</value>
|
||||
</data>
|
||||
<data name="strTimeoutInSeconds" xml:space="preserve">
|
||||
<value>Время ожидания в секундах:</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,20 +5,20 @@ 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>();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -8,7 +8,7 @@ using mRemoteNG.Tree.Root;
|
||||
|
||||
namespace mRemoteNG.Tree
|
||||
{
|
||||
public sealed class ConnectionTreeModel : INotifyCollectionChanged, INotifyPropertyChanged
|
||||
public sealed class ConnectionTreeModel : INotifyCollectionChanged, INotifyPropertyChanged
|
||||
{
|
||||
public List<ContainerInfo> RootNodes { get; } = new List<ContainerInfo>();
|
||||
|
||||
@@ -30,7 +30,7 @@ namespace mRemoteNG.Tree
|
||||
RaiseCollectionChangedEvent(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, rootNode));
|
||||
}
|
||||
|
||||
public IEnumerable<ConnectionInfo> GetRecursiveChildList()
|
||||
public IReadOnlyList<ConnectionInfo> GetRecursiveChildList()
|
||||
{
|
||||
var list = new List<ConnectionInfo>();
|
||||
foreach (var rootNode in RootNodes)
|
||||
|
||||
@@ -5,7 +5,7 @@ using mRemoteNG.Connection;
|
||||
|
||||
namespace mRemoteNG.Tree
|
||||
{
|
||||
public class NodeSearcher
|
||||
public class NodeSearcher
|
||||
{
|
||||
private readonly ConnectionTreeModel _connectionTreeModel;
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace mRemoteNG.Tree
|
||||
{
|
||||
ResetMatches();
|
||||
if (searchText == "") return Matches;
|
||||
var nodes = (List<ConnectionInfo>)_connectionTreeModel.GetRecursiveChildList();
|
||||
var nodes = _connectionTreeModel.GetRecursiveChildList();
|
||||
var searchTextLower = searchText.ToLowerInvariant();
|
||||
foreach (var node in nodes)
|
||||
{
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
using mRemoteNG.Tools;
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Security;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Security;
|
||||
using mRemoteNG.Tools;
|
||||
|
||||
|
||||
namespace mRemoteNG.Tree.Root
|
||||
@@ -13,11 +13,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
|
||||
|
||||
@@ -63,5 +69,17 @@ namespace mRemoteNG.Tree.Root
|
||||
return TreeNodeType.Root;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
public override void AddChildAt(ConnectionInfo newChildItem, int index)
|
||||
{
|
||||
newChildItem.Inheritance.DisableInheritance();
|
||||
base.AddChildAt(newChildItem, index);
|
||||
}
|
||||
|
||||
public override void RemoveChild(ConnectionInfo removalTarget)
|
||||
{
|
||||
removalTarget.Inheritance.EnableInheritance();
|
||||
base.RemoveChild(removalTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ using System.Windows.Forms;
|
||||
using mRemoteNG.App;
|
||||
using mRemoteNG.Connection;
|
||||
using mRemoteNG.Connection.Protocol;
|
||||
using mRemoteNG.Container;
|
||||
using mRemoteNG.Themes;
|
||||
using mRemoteNG.Tools;
|
||||
|
||||
@@ -232,10 +233,19 @@ namespace mRemoteNG.UI.Controls
|
||||
private void ConnectionsMenuItem_MouseUp(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.Button != MouseButtons.Left) return;
|
||||
var tag = ((ToolStripMenuItem)sender).Tag as ConnectionInfo;
|
||||
if (tag != null)
|
||||
var menuItem = (ToolStripMenuItem) sender;
|
||||
|
||||
// While we can connect to a whole folder at once, it is
|
||||
// probably not the expected behavior when navigating through
|
||||
// a nested menu. Just return
|
||||
var containerInfo = menuItem.Tag as ContainerInfo;
|
||||
if (containerInfo != null)
|
||||
return;
|
||||
|
||||
var connectionInfo = menuItem.Tag as ConnectionInfo;
|
||||
if (connectionInfo != null)
|
||||
{
|
||||
ConnectionInitiator.OpenConnection(tag);
|
||||
ConnectionInitiator.OpenConnection(connectionInfo);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
@@ -32,7 +32,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
||||
lblSeconds.Text = Language.strLabelSeconds;
|
||||
lblMaximumPuttyWaitTime.Text = Language.strLabelPuttyTimeout;
|
||||
chkAutomaticReconnect.Text = Language.strCheckboxAutomaticReconnect;
|
||||
chkLoadBalanceInfoUseUtf8.Text = Language.LoadBalanceInfoUseUtf8;
|
||||
chkLoadBalanceInfoUseUtf8.Text = Language.strLoadBalanceInfoUseUtf8;
|
||||
lblConfigurePuttySessions.Text = Language.strLabelPuttySessionsConfig;
|
||||
btnLaunchPutty.Text = Language.strButtonLaunchPutty;
|
||||
btnBrowseCustomPuttyPath.Text = Language.strButtonBrowse;
|
||||
|
||||
@@ -85,20 +85,20 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
||||
//
|
||||
// lblRDPConTimeout
|
||||
//
|
||||
this.lblRDPConTimeout.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.lblRDPConTimeout.Location = new System.Drawing.Point(3, 6);
|
||||
this.lblRDPConTimeout.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.lblRDPConTimeout.Location = new System.Drawing.Point(3, 0);
|
||||
this.lblRDPConTimeout.Name = "lblRDPConTimeout";
|
||||
this.lblRDPConTimeout.Size = new System.Drawing.Size(137, 13);
|
||||
this.lblRDPConTimeout.Size = new System.Drawing.Size(261, 26);
|
||||
this.lblRDPConTimeout.TabIndex = 0;
|
||||
this.lblRDPConTimeout.Text = "RDP Connection Timeout";
|
||||
this.lblRDPConTimeout.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// lblRdpReconnectionCount
|
||||
//
|
||||
this.lblRdpReconnectionCount.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.lblRdpReconnectionCount.Location = new System.Drawing.Point(3, 6);
|
||||
this.lblRdpReconnectionCount.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.lblRdpReconnectionCount.Location = new System.Drawing.Point(3, 0);
|
||||
this.lblRdpReconnectionCount.Name = "lblRdpReconnectionCount";
|
||||
this.lblRdpReconnectionCount.Size = new System.Drawing.Size(139, 13);
|
||||
this.lblRdpReconnectionCount.Size = new System.Drawing.Size(261, 26);
|
||||
this.lblRdpReconnectionCount.TabIndex = 0;
|
||||
this.lblRdpReconnectionCount.Text = "RDP Reconnection Count";
|
||||
this.lblRdpReconnectionCount.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
@@ -156,10 +156,10 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
||||
//
|
||||
// lblAutoSave1
|
||||
//
|
||||
this.lblAutoSave1.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.lblAutoSave1.Location = new System.Drawing.Point(3, 6);
|
||||
this.lblAutoSave1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.lblAutoSave1.Location = new System.Drawing.Point(3, 0);
|
||||
this.lblAutoSave1.Name = "lblAutoSave1";
|
||||
this.lblAutoSave1.Size = new System.Drawing.Size(261, 13);
|
||||
this.lblAutoSave1.Size = new System.Drawing.Size(261, 26);
|
||||
this.lblAutoSave1.TabIndex = 0;
|
||||
this.lblAutoSave1.Text = "Auto Save in Minutes (0 means disabled)";
|
||||
this.lblAutoSave1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
|
||||
@@ -28,6 +28,7 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
||||
labelBlockCipher.Text = Language.strEncryptionBlockCipherMode;
|
||||
labelEncryptionEngine.Text = Language.strEncryptionEngine;
|
||||
labelKdfIterations.Text = Language.strEncryptionKeyDerivationIterations;
|
||||
groupAdvancedSecurityOptions.Text = Language.strAdvancedSecurityOptions;
|
||||
}
|
||||
|
||||
public override void LoadSettings()
|
||||
|
||||
@@ -38,6 +38,9 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
||||
this.chkShowLogonInfoOnTabs = new mRemoteNG.UI.Controls.Base.NGCheckBox();
|
||||
this.chkDoubleClickClosesTab = new mRemoteNG.UI.Controls.Base.NGCheckBox();
|
||||
this.chkShowProtocolOnTabs = new mRemoteNG.UI.Controls.Base.NGCheckBox();
|
||||
this.chkCreateEmptyPanelOnStart = new mRemoteNG.UI.Controls.Base.NGCheckBox();
|
||||
this.txtBoxPanelName = new mRemoteNG.UI.Controls.Base.NGTextBox();
|
||||
this.lblPanelName = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// chkAlwaysShowPanelTabs
|
||||
@@ -117,10 +120,41 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
||||
this.chkShowProtocolOnTabs.Text = "Show protocols on tab names";
|
||||
this.chkShowProtocolOnTabs.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// chkCreateEmptyPanelOnStart
|
||||
//
|
||||
this.chkCreateEmptyPanelOnStart._mice = mRemoteNG.UI.Controls.Base.NGCheckBox.MouseState.HOVER;
|
||||
this.chkCreateEmptyPanelOnStart.AutoSize = true;
|
||||
this.chkCreateEmptyPanelOnStart.Location = new System.Drawing.Point(3, 164);
|
||||
this.chkCreateEmptyPanelOnStart.Name = "chkCreateEmptyPanelOnStart";
|
||||
this.chkCreateEmptyPanelOnStart.Size = new System.Drawing.Size(253, 17);
|
||||
this.chkCreateEmptyPanelOnStart.TabIndex = 7;
|
||||
this.chkCreateEmptyPanelOnStart.Text = "Create an empty panel when mRemoteNG starts";
|
||||
this.chkCreateEmptyPanelOnStart.UseVisualStyleBackColor = true;
|
||||
this.chkCreateEmptyPanelOnStart.CheckedChanged += new System.EventHandler(this.chkCreateEmptyPanelOnStart_CheckedChanged);
|
||||
//
|
||||
// txtBoxPanelName
|
||||
//
|
||||
this.txtBoxPanelName.Location = new System.Drawing.Point(43, 200);
|
||||
this.txtBoxPanelName.Name = "txtBoxPanelName";
|
||||
this.txtBoxPanelName.Size = new System.Drawing.Size(213, 20);
|
||||
this.txtBoxPanelName.TabIndex = 8;
|
||||
//
|
||||
// lblPanelName
|
||||
//
|
||||
this.lblPanelName.AutoSize = true;
|
||||
this.lblPanelName.Location = new System.Drawing.Point(40, 184);
|
||||
this.lblPanelName.Name = "lblPanelName";
|
||||
this.lblPanelName.Size = new System.Drawing.Size(66, 13);
|
||||
this.lblPanelName.TabIndex = 9;
|
||||
this.lblPanelName.Text = "Panel name:";
|
||||
//
|
||||
// TabsPanelsPage
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.lblPanelName);
|
||||
this.Controls.Add(this.txtBoxPanelName);
|
||||
this.Controls.Add(this.chkCreateEmptyPanelOnStart);
|
||||
this.Controls.Add(this.chkAlwaysShowPanelTabs);
|
||||
this.Controls.Add(this.chkIdentifyQuickConnectTabs);
|
||||
this.Controls.Add(this.chkOpenNewTabRightOfSelected);
|
||||
@@ -142,6 +176,8 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
||||
internal Controls.Base.NGCheckBox chkShowLogonInfoOnTabs;
|
||||
internal Controls.Base.NGCheckBox chkDoubleClickClosesTab;
|
||||
internal Controls.Base.NGCheckBox chkShowProtocolOnTabs;
|
||||
|
||||
}
|
||||
private Controls.Base.NGCheckBox chkCreateEmptyPanelOnStart;
|
||||
private Controls.Base.NGTextBox txtBoxPanelName;
|
||||
private Controls.Base.NGLabel lblPanelName;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,8 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
||||
chkIdentifyQuickConnectTabs.Text = Language.strIdentifyQuickConnectTabs;
|
||||
chkDoubleClickClosesTab.Text = Language.strDoubleClickTabClosesIt;
|
||||
chkAlwaysShowPanelSelectionDlg.Text = Language.strAlwaysShowPanelSelection;
|
||||
chkCreateEmptyPanelOnStart.Text = Language.strCreateEmptyPanelOnStartUp;
|
||||
lblPanelName.Text = $"{Language.strPanelName}:";
|
||||
}
|
||||
|
||||
public override void LoadSettings()
|
||||
@@ -38,6 +40,9 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
||||
chkIdentifyQuickConnectTabs.Checked = Settings.Default.IdentifyQuickConnectTabs;
|
||||
chkDoubleClickClosesTab.Checked = Settings.Default.DoubleClickOnTabClosesIt;
|
||||
chkAlwaysShowPanelSelectionDlg.Checked = Settings.Default.AlwaysShowPanelSelectionDlg;
|
||||
chkCreateEmptyPanelOnStart.Checked = Settings.Default.CreateEmptyPanelOnStartUp;
|
||||
txtBoxPanelName.Text = Settings.Default.StartUpPanelName;
|
||||
UpdatePanelNameTextBox();
|
||||
}
|
||||
|
||||
public override void SaveSettings()
|
||||
@@ -53,8 +58,20 @@ namespace mRemoteNG.UI.Forms.OptionsPages
|
||||
Settings.Default.IdentifyQuickConnectTabs = chkIdentifyQuickConnectTabs.Checked;
|
||||
Settings.Default.DoubleClickOnTabClosesIt = chkDoubleClickClosesTab.Checked;
|
||||
Settings.Default.AlwaysShowPanelSelectionDlg = chkAlwaysShowPanelSelectionDlg.Checked;
|
||||
Settings.Default.CreateEmptyPanelOnStartUp = chkCreateEmptyPanelOnStart.Checked;
|
||||
Settings.Default.StartUpPanelName = txtBoxPanelName.Text;
|
||||
|
||||
Settings.Default.Save();
|
||||
}
|
||||
|
||||
private void UpdatePanelNameTextBox()
|
||||
{
|
||||
txtBoxPanelName.Enabled = chkCreateEmptyPanelOnStart.Checked;
|
||||
}
|
||||
|
||||
private void chkCreateEmptyPanelOnStart_CheckedChanged(object sender, System.EventArgs e)
|
||||
{
|
||||
UpdatePanelNameTextBox();
|
||||
}
|
||||
}
|
||||
}
|
||||
162
mRemoteV1/UI/Forms/frmMain.Designer.cs
generated
162
mRemoteV1/UI/Forms/frmMain.Designer.cs
generated
@@ -30,21 +30,17 @@ namespace mRemoteNG.UI.Forms
|
||||
mRemoteNG.Connection.ConnectionInitiator connectionInitiator1 = new mRemoteNG.Connection.ConnectionInitiator();
|
||||
this.pnlDock = new WeifenLuo.WinFormsUI.Docking.DockPanel();
|
||||
this.msMain = new System.Windows.Forms.MenuStrip();
|
||||
this.mMenFile = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mMenView = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mMenTools = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.mMenInfo = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.fileMenu = new mRemoteNG.UI.Menu.MainFileMenu();
|
||||
this.viewMenu = new mRemoteNG.UI.Menu.ViewMenu();
|
||||
this.toolsMenu = new mRemoteNG.UI.Menu.ToolsMenu();
|
||||
this.helpMenu = new mRemoteNG.UI.Menu.HelpMenu();
|
||||
this.mMenSep3 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.tsContainer = new System.Windows.Forms.ToolStripContainer();
|
||||
this.tmrAutoSave = new System.Windows.Forms.Timer(this.components);
|
||||
this.vsToolStripExtender = new WeifenLuo.WinFormsUI.Docking.VisualStudioToolStripExtender(this.components);
|
||||
this._quickConnectToolStrip = new mRemoteNG.UI.Controls.QuickConnectToolStrip();
|
||||
this._multiSshToolStrip = new mRemoteNG.UI.Controls.MultiSshToolStrip();
|
||||
this._externalToolsToolStrip = new mRemoteNG.UI.Controls.ExternalToolsToolStrip();
|
||||
this._quickConnectToolStrip = new mRemoteNG.UI.Controls.QuickConnectToolStrip();
|
||||
this.mainFileMenu1 = new mRemoteNG.UI.Menu.MainFileMenu();
|
||||
this.viewMenu1 = new mRemoteNG.UI.Menu.ViewMenu();
|
||||
this.toolsMenu1 = new mRemoteNG.UI.Menu.ToolsMenu();
|
||||
this.helpMenu1 = new mRemoteNG.UI.Menu.HelpMenu();
|
||||
this.tmrAutoSave = new System.Windows.Forms.Timer(this.components);
|
||||
this.vsToolStripExtender = new WeifenLuo.WinFormsUI.Docking.VisualStudioToolStripExtender(this.components);
|
||||
this.msMain.SuspendLayout();
|
||||
this.tsContainer.ContentPanel.SuspendLayout();
|
||||
this.tsContainer.TopToolStripPanel.SuspendLayout();
|
||||
@@ -60,7 +56,7 @@ namespace mRemoteNG.UI.Forms
|
||||
this.pnlDock.DocumentStyle = WeifenLuo.WinFormsUI.Docking.DocumentStyle.DockingSdi;
|
||||
this.pnlDock.Location = new System.Drawing.Point(0, 0);
|
||||
this.pnlDock.Name = "pnlDock";
|
||||
this.pnlDock.Size = new System.Drawing.Size(966, 473);
|
||||
this.pnlDock.Size = new System.Drawing.Size(1129, 472);
|
||||
this.pnlDock.TabIndex = 13;
|
||||
this.pnlDock.ActiveDocumentChanged += new System.EventHandler(this.pnlDock_ActiveDocumentChanged);
|
||||
//
|
||||
@@ -69,12 +65,13 @@ namespace mRemoteNG.UI.Forms
|
||||
this.msMain.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.msMain.Dock = System.Windows.Forms.DockStyle.None;
|
||||
this.msMain.GripMargin = new System.Windows.Forms.Padding(0);
|
||||
this.msMain.GripStyle = System.Windows.Forms.ToolStripGripStyle.Visible;
|
||||
this.msMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.mainFileMenu1,
|
||||
this.viewMenu1,
|
||||
this.toolsMenu1,
|
||||
this.helpMenu1});
|
||||
this.msMain.Location = new System.Drawing.Point(3, 0);
|
||||
this.fileMenu,
|
||||
this.viewMenu,
|
||||
this.toolsMenu,
|
||||
this.helpMenu});
|
||||
this.msMain.Location = new System.Drawing.Point(3, 50);
|
||||
this.msMain.Name = "msMain";
|
||||
this.msMain.Padding = new System.Windows.Forms.Padding(2, 2, 0, 2);
|
||||
this.msMain.Size = new System.Drawing.Size(176, 24);
|
||||
@@ -82,25 +79,41 @@ namespace mRemoteNG.UI.Forms
|
||||
this.msMain.TabIndex = 0;
|
||||
this.msMain.Text = "Main Toolbar";
|
||||
//
|
||||
// mMenFile
|
||||
// fileMenu
|
||||
//
|
||||
this.mMenFile.Name = "mMenFile";
|
||||
this.mMenFile.Size = new System.Drawing.Size(32, 19);
|
||||
this.fileMenu.ConnectionInitiator = null;
|
||||
this.fileMenu.Name = "mMenFile";
|
||||
this.fileMenu.Size = new System.Drawing.Size(37, 20);
|
||||
this.fileMenu.Text = "&File";
|
||||
this.fileMenu.TreeWindow = null;
|
||||
this.fileMenu.DropDownOpening += new System.EventHandler(this.mainFileMenu1_DropDownOpening);
|
||||
//
|
||||
// mMenView
|
||||
// viewMenu
|
||||
//
|
||||
this.mMenView.Name = "mMenView";
|
||||
this.mMenView.Size = new System.Drawing.Size(32, 19);
|
||||
this.viewMenu.FullscreenHandler = null;
|
||||
this.viewMenu.MainForm = null;
|
||||
this.viewMenu.Name = "mMenView";
|
||||
this.viewMenu.Size = new System.Drawing.Size(44, 20);
|
||||
this.viewMenu.Text = "&View";
|
||||
this.viewMenu.TsExternalTools = null;
|
||||
this.viewMenu.TsMultiSsh = null;
|
||||
this.viewMenu.TsQuickConnect = null;
|
||||
this.viewMenu.DropDownOpening += new System.EventHandler(this.ViewMenu_Opening);
|
||||
//
|
||||
// mMenTools
|
||||
// toolsMenu
|
||||
//
|
||||
this.mMenTools.Name = "mMenTools";
|
||||
this.mMenTools.Size = new System.Drawing.Size(32, 19);
|
||||
this.toolsMenu.CredentialProviderCatalog = null;
|
||||
this.toolsMenu.MainForm = null;
|
||||
this.toolsMenu.Name = "mMenTools";
|
||||
this.toolsMenu.Size = new System.Drawing.Size(47, 20);
|
||||
this.toolsMenu.Text = "&Tools";
|
||||
//
|
||||
// mMenInfo
|
||||
// helpMenu
|
||||
//
|
||||
this.mMenInfo.Name = "mMenInfo";
|
||||
this.mMenInfo.Size = new System.Drawing.Size(32, 19);
|
||||
this.helpMenu.Name = "mMenInfo";
|
||||
this.helpMenu.Size = new System.Drawing.Size(44, 20);
|
||||
this.helpMenu.Text = "&Help";
|
||||
this.helpMenu.TextDirection = System.Windows.Forms.ToolStripTextDirection.Horizontal;
|
||||
//
|
||||
// mMenSep3
|
||||
//
|
||||
@@ -113,29 +126,32 @@ namespace mRemoteNG.UI.Forms
|
||||
// tsContainer.ContentPanel
|
||||
//
|
||||
this.tsContainer.ContentPanel.Controls.Add(this.pnlDock);
|
||||
this.tsContainer.ContentPanel.Size = new System.Drawing.Size(966, 473);
|
||||
this.tsContainer.ContentPanel.Size = new System.Drawing.Size(1129, 472);
|
||||
this.tsContainer.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tsContainer.Location = new System.Drawing.Point(0, 0);
|
||||
this.tsContainer.Name = "tsContainer";
|
||||
this.tsContainer.Size = new System.Drawing.Size(966, 523);
|
||||
this.tsContainer.Size = new System.Drawing.Size(1129, 571);
|
||||
this.tsContainer.TabIndex = 17;
|
||||
this.tsContainer.Text = "ToolStripContainer1";
|
||||
//
|
||||
// tsContainer.TopToolStripPanel
|
||||
//
|
||||
this.tsContainer.TopToolStripPanel.Controls.Add(this.msMain);
|
||||
this.tsContainer.TopToolStripPanel.Controls.Add(this._externalToolsToolStrip);
|
||||
this.tsContainer.TopToolStripPanel.Controls.Add(this._quickConnectToolStrip);
|
||||
this.tsContainer.TopToolStripPanel.Controls.Add(this._multiSshToolStrip);
|
||||
this.tsContainer.TopToolStripPanel.Controls.Add(this.msMain);
|
||||
this.tsContainer.TopToolStripPanel.Controls.Add(this._externalToolsToolStrip);
|
||||
//
|
||||
// tmrAutoSave
|
||||
// _quickConnectToolStrip
|
||||
//
|
||||
this.tmrAutoSave.Interval = 10000;
|
||||
this.tmrAutoSave.Tick += new System.EventHandler(this.tmrAutoSave_Tick);
|
||||
//
|
||||
// vsToolStripExtender
|
||||
//
|
||||
this.vsToolStripExtender.DefaultRenderer = null;
|
||||
this._quickConnectToolStrip.BackColor = System.Drawing.SystemColors.Control;
|
||||
this._quickConnectToolStrip.ConnectionInitiator = connectionInitiator1;
|
||||
this._quickConnectToolStrip.Dock = System.Windows.Forms.DockStyle.None;
|
||||
this._quickConnectToolStrip.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||
this._quickConnectToolStrip.Location = new System.Drawing.Point(3, 0);
|
||||
this._quickConnectToolStrip.MaximumSize = new System.Drawing.Size(0, 25);
|
||||
this._quickConnectToolStrip.Name = "_quickConnectToolStrip";
|
||||
this._quickConnectToolStrip.Size = new System.Drawing.Size(364, 25);
|
||||
this._quickConnectToolStrip.TabIndex = 18;
|
||||
//
|
||||
// _multiSshToolStrip
|
||||
//
|
||||
@@ -152,68 +168,30 @@ namespace mRemoteNG.UI.Forms
|
||||
this._externalToolsToolStrip.BackColor = System.Drawing.SystemColors.Control;
|
||||
this._externalToolsToolStrip.Dock = System.Windows.Forms.DockStyle.None;
|
||||
this._externalToolsToolStrip.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||
this._externalToolsToolStrip.Location = new System.Drawing.Point(380, 25);
|
||||
this._externalToolsToolStrip.Location = new System.Drawing.Point(39, 74);
|
||||
this._externalToolsToolStrip.MaximumSize = new System.Drawing.Size(0, 25);
|
||||
this._externalToolsToolStrip.Name = "_externalToolsToolStrip";
|
||||
this._externalToolsToolStrip.Size = new System.Drawing.Size(111, 25);
|
||||
this._externalToolsToolStrip.TabIndex = 17;
|
||||
//
|
||||
// _quickConnectToolStrip
|
||||
// tmrAutoSave
|
||||
//
|
||||
this._quickConnectToolStrip.BackColor = System.Drawing.SystemColors.Control;
|
||||
this._quickConnectToolStrip.ConnectionInitiator = connectionInitiator1;
|
||||
this._quickConnectToolStrip.Dock = System.Windows.Forms.DockStyle.None;
|
||||
this._quickConnectToolStrip.ForeColor = System.Drawing.SystemColors.ControlText;
|
||||
this._quickConnectToolStrip.Location = new System.Drawing.Point(179, 0);
|
||||
this._quickConnectToolStrip.MaximumSize = new System.Drawing.Size(0, 25);
|
||||
this._quickConnectToolStrip.Name = "_quickConnectToolStrip";
|
||||
this._quickConnectToolStrip.Size = new System.Drawing.Size(364, 25);
|
||||
this._quickConnectToolStrip.TabIndex = 18;
|
||||
this.tmrAutoSave.Interval = 10000;
|
||||
this.tmrAutoSave.Tick += new System.EventHandler(this.tmrAutoSave_Tick);
|
||||
//
|
||||
// mainFileMenu1
|
||||
// vsToolStripExtender
|
||||
//
|
||||
this.mainFileMenu1.ConnectionInitiator = null;
|
||||
this.mainFileMenu1.Name = "mMenFile";
|
||||
this.mainFileMenu1.Size = new System.Drawing.Size(37, 20);
|
||||
this.mainFileMenu1.Text = "&File";
|
||||
this.mainFileMenu1.TreeWindow = null;
|
||||
this.mainFileMenu1.DropDownOpening += new System.EventHandler(this.mainFileMenu1_DropDownOpening);
|
||||
//
|
||||
// viewMenu1
|
||||
//
|
||||
this.viewMenu1.FullscreenHandler = null;
|
||||
this.viewMenu1.MainForm = null;
|
||||
this.viewMenu1.Name = "mMenView";
|
||||
this.viewMenu1.Size = new System.Drawing.Size(44, 20);
|
||||
this.viewMenu1.Text = "&View";
|
||||
this.viewMenu1.TsExternalTools = null;
|
||||
this.viewMenu1.TsMultiSsh = null;
|
||||
this.viewMenu1.TsQuickConnect = null;
|
||||
this.viewMenu1.DropDownOpening += new System.EventHandler(this.ViewMenu_Opening);
|
||||
//
|
||||
// toolsMenu1
|
||||
//
|
||||
this.toolsMenu1.CredentialProviderCatalog = null;
|
||||
this.toolsMenu1.MainForm = null;
|
||||
this.toolsMenu1.Name = "mMenTools";
|
||||
this.toolsMenu1.Size = new System.Drawing.Size(47, 20);
|
||||
this.toolsMenu1.Text = "&Tools";
|
||||
//
|
||||
// helpMenu1
|
||||
//
|
||||
this.helpMenu1.Name = "mMenInfo";
|
||||
this.helpMenu1.Size = new System.Drawing.Size(44, 20);
|
||||
this.helpMenu1.Text = "&Help";
|
||||
this.helpMenu1.TextDirection = System.Windows.Forms.ToolStripTextDirection.Horizontal;
|
||||
this.vsToolStripExtender.DefaultRenderer = null;
|
||||
//
|
||||
// FrmMain
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(966, 523);
|
||||
this.ClientSize = new System.Drawing.Size(1129, 571);
|
||||
this.Controls.Add(this.tsContainer);
|
||||
this.Icon = global::mRemoteNG.Resources.mRemote_Icon;
|
||||
this.MainMenuStrip = this.msMain;
|
||||
this.MinimumSize = new System.Drawing.Size(1145, 610);
|
||||
this.Name = "FrmMain";
|
||||
this.Opacity = 0D;
|
||||
this.Text = "mRemoteNG";
|
||||
@@ -235,18 +213,14 @@ namespace mRemoteNG.UI.Forms
|
||||
}
|
||||
internal WeifenLuo.WinFormsUI.Docking.DockPanel pnlDock;
|
||||
internal System.Windows.Forms.MenuStrip msMain;
|
||||
internal System.Windows.Forms.ToolStripMenuItem mMenFile;
|
||||
internal System.Windows.Forms.ToolStripMenuItem mMenView;
|
||||
internal System.Windows.Forms.ToolStripMenuItem mMenTools;
|
||||
internal System.Windows.Forms.ToolStripMenuItem mMenInfo;
|
||||
internal System.Windows.Forms.ToolStripContainer tsContainer;
|
||||
internal System.Windows.Forms.Timer tmrAutoSave;
|
||||
internal System.Windows.Forms.ToolStripSeparator mMenSep3;
|
||||
private System.ComponentModel.IContainer components;
|
||||
private Menu.MainFileMenu mainFileMenu1;
|
||||
private Menu.ViewMenu viewMenu1;
|
||||
private Menu.ToolsMenu toolsMenu1;
|
||||
private Menu.HelpMenu helpMenu1;
|
||||
private Menu.MainFileMenu fileMenu;
|
||||
private Menu.ViewMenu viewMenu;
|
||||
private Menu.ToolsMenu toolsMenu;
|
||||
private Menu.HelpMenu helpMenu;
|
||||
internal mRemoteNG.UI.Controls.QuickConnectToolStrip _quickConnectToolStrip;
|
||||
internal mRemoteNG.UI.Controls.ExternalToolsToolStrip _externalToolsToolStrip;
|
||||
internal mRemoteNG.UI.Controls.MultiSshToolStrip _multiSshToolStrip;
|
||||
|
||||
@@ -66,10 +66,6 @@ namespace mRemoteNG.UI.Forms
|
||||
_screenSystemMenu = new ScreenSelectionSystemMenu(this);
|
||||
}
|
||||
|
||||
static FrmMain()
|
||||
{
|
||||
}
|
||||
|
||||
#region Properties
|
||||
public FormWindowState PreviousWindowState { get; set; }
|
||||
|
||||
@@ -176,13 +172,28 @@ namespace mRemoteNG.UI.Forms
|
||||
|
||||
_screenSystemMenu.BuildScreenList();
|
||||
SystemEvents.DisplaySettingsChanged += _screenSystemMenu.OnDisplayChanged;
|
||||
ApplyLanguage();
|
||||
|
||||
Opacity = 1;
|
||||
//Fix missing general panel at the first run
|
||||
new PanelAdder().AddPanel();
|
||||
if (Settings.Default.CreateEmptyPanelOnStartUp)
|
||||
{
|
||||
var panelName = !string.IsNullOrEmpty(Settings.Default.StartUpPanelName)
|
||||
? Settings.Default.StartUpPanelName
|
||||
: Language.strNewPanel;
|
||||
new PanelAdder().AddPanel(panelName);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnApplicationSettingChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs)
|
||||
private void ApplyLanguage()
|
||||
{
|
||||
fileMenu.ApplyLanguage();
|
||||
viewMenu.ApplyLanguage();
|
||||
toolsMenu.ApplyLanguage();
|
||||
helpMenu.ApplyLanguage();
|
||||
}
|
||||
|
||||
private void OnApplicationSettingChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs)
|
||||
{
|
||||
if (propertyChangedEventArgs.PropertyName != nameof(Settings.LockToolbars))
|
||||
return;
|
||||
@@ -192,7 +203,7 @@ namespace mRemoteNG.UI.Forms
|
||||
|
||||
private void LockToolbarPositions(bool shouldBeLocked)
|
||||
{
|
||||
var toolbars = new ToolStrip[] { _quickConnectToolStrip, _multiSshToolStrip, _externalToolsToolStrip };
|
||||
var toolbars = new ToolStrip[] { _quickConnectToolStrip, _multiSshToolStrip, _externalToolsToolStrip, msMain };
|
||||
foreach (var toolbar in toolbars)
|
||||
{
|
||||
toolbar.GripStyle = shouldBeLocked
|
||||
@@ -209,17 +220,17 @@ namespace mRemoteNG.UI.Forms
|
||||
private void SetMenuDependencies()
|
||||
{
|
||||
var connectionInitiator = new ConnectionInitiator();
|
||||
mainFileMenu1.TreeWindow = Windows.TreeForm;
|
||||
mainFileMenu1.ConnectionInitiator = connectionInitiator;
|
||||
fileMenu.TreeWindow = Windows.TreeForm;
|
||||
fileMenu.ConnectionInitiator = connectionInitiator;
|
||||
|
||||
viewMenu1.TsExternalTools = _externalToolsToolStrip;
|
||||
viewMenu1.TsQuickConnect = _quickConnectToolStrip;
|
||||
viewMenu1.TsMultiSsh = _multiSshToolStrip;
|
||||
viewMenu1.FullscreenHandler = Fullscreen;
|
||||
viewMenu1.MainForm = this;
|
||||
viewMenu.TsExternalTools = _externalToolsToolStrip;
|
||||
viewMenu.TsQuickConnect = _quickConnectToolStrip;
|
||||
viewMenu.TsMultiSsh = _multiSshToolStrip;
|
||||
viewMenu.FullscreenHandler = Fullscreen;
|
||||
viewMenu.MainForm = this;
|
||||
|
||||
toolsMenu1.MainForm = this;
|
||||
toolsMenu1.CredentialProviderCatalog = Runtime.CredentialProviderCatalog;
|
||||
toolsMenu.MainForm = this;
|
||||
toolsMenu.CredentialProviderCatalog = Runtime.CredentialProviderCatalog;
|
||||
|
||||
_quickConnectToolStrip.ConnectionInitiator = connectionInitiator;
|
||||
}
|
||||
@@ -616,12 +627,12 @@ namespace mRemoteNG.UI.Forms
|
||||
|
||||
private void ViewMenu_Opening(object sender, EventArgs e)
|
||||
{
|
||||
viewMenu1.mMenView_DropDownOpening(sender, e);
|
||||
viewMenu.mMenView_DropDownOpening(sender, e);
|
||||
}
|
||||
|
||||
private void mainFileMenu1_DropDownOpening(object sender, EventArgs e)
|
||||
{
|
||||
mainFileMenu1.mMenFile_DropDownOpening(sender, e);
|
||||
fileMenu.mMenFile_DropDownOpening(sender, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -120,15 +120,15 @@
|
||||
<metadata name="msMain.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>688, 17</value>
|
||||
</metadata>
|
||||
<metadata name="_externalToolsToolStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>510, 17</value>
|
||||
</metadata>
|
||||
<metadata name="_quickConnectToolStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="_multiSshToolStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>197, 17</value>
|
||||
</metadata>
|
||||
<metadata name="_externalToolsToolStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>510, 17</value>
|
||||
</metadata>
|
||||
<metadata name="tmrAutoSave.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>783, 17</value>
|
||||
</metadata>
|
||||
|
||||
@@ -49,6 +49,7 @@ namespace mRemoteNG.UI.Forms
|
||||
|
||||
private void ApplyLanguage()
|
||||
{
|
||||
this.Text = Language.strOptionsPageTitle;
|
||||
foreach (var optionPage in _pages.Values)
|
||||
{
|
||||
optionPage.ApplyLanguage();
|
||||
|
||||
@@ -129,6 +129,18 @@ namespace mRemoteNG.UI.Menu
|
||||
_mMenInfoAbout.Click += mMenInfoAbout_Click;
|
||||
}
|
||||
|
||||
public void ApplyLanguage()
|
||||
{
|
||||
Text = Language.strMenuHelp;
|
||||
_mMenInfoHelp.Text = Language.strMenuHelpContents;
|
||||
_mMenInfoWebsite.Text = Language.strMenuWebsite;
|
||||
_mMenInfoDonate.Text = Language.strMenuDonate;
|
||||
_mMenInfoForum.Text = Language.strMenuSupportForum;
|
||||
_mMenInfoBugReport.Text = Language.strMenuReportBug;
|
||||
_mMenToolsUpdate.Text = Language.strMenuCheckForUpdates;
|
||||
_mMenInfoAbout.Text = Language.strMenuAbout;
|
||||
}
|
||||
|
||||
#region Info
|
||||
private void mMenToolsUpdate_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
@@ -257,6 +257,23 @@ namespace mRemoteNG.UI.Menu
|
||||
_mMenFileExit.Click += mMenFileExit_Click;
|
||||
}
|
||||
|
||||
public void ApplyLanguage()
|
||||
{
|
||||
Text = Language.strMenuFile;
|
||||
_mMenFileNewConnection.Text = Language.strNewConnection;
|
||||
_mMenFileNewFolder.Text = Language.strNewFolder;
|
||||
_mMenFileNew.Text = Language.strMenuNewConnectionFile;
|
||||
_mMenFileLoad.Text = Language.strMenuOpenConnectionFile;
|
||||
_mMenFileSave.Text = Language.strMenuSaveConnectionFile;
|
||||
_mMenFileSaveAs.Text = Language.strMenuSaveConnectionFileAs;
|
||||
_mMenFileImport.Text = Language.strImportMenuItem;
|
||||
_mMenFileImportFromFile.Text = Language.strImportFromFileMenuItem;
|
||||
_mMenFileImportFromActiveDirectory.Text = Language.strImportAD;
|
||||
_mMenFileImportFromPortScan.Text = Language.strImportPortScan;
|
||||
_mMenFileExport.Text = Language.strExportToFileMenuItem;
|
||||
_mMenFileExit.Text = Language.strMenuExit;
|
||||
}
|
||||
|
||||
#region File
|
||||
internal void mMenFile_DropDownOpening(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
@@ -103,6 +103,16 @@ namespace mRemoteNG.UI.Menu
|
||||
_mMenToolsOptions.Click += mMenToolsOptions_Click;
|
||||
}
|
||||
|
||||
public void ApplyLanguage()
|
||||
{
|
||||
Text = Language.strMenuTools;
|
||||
_mMenToolsSshTransfer.Text = Language.strMenuSSHFileTransfer;
|
||||
_mMenToolsExternalApps.Text = Language.strMenuExternalTools;
|
||||
_mMenToolsPortScan.Text = Language.strMenuPortScan;
|
||||
_mMenToolsComponentsCheck.Text = Language.strComponentsCheck;
|
||||
_mMenToolsOptions.Text = Language.strMenuOptions;
|
||||
}
|
||||
|
||||
#region Tools
|
||||
private void mMenToolsSSHTransfer_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
@@ -41,7 +41,6 @@ namespace mRemoteNG.UI.Menu
|
||||
public ViewMenu()
|
||||
{
|
||||
Initialize();
|
||||
ApplyLanguage();
|
||||
_panelAdder = new PanelAdder();
|
||||
}
|
||||
|
||||
@@ -98,7 +97,7 @@ namespace mRemoteNG.UI.Menu
|
||||
_mMenViewAddConnectionPanel.Image = Resources.Panel_Add;
|
||||
_mMenViewAddConnectionPanel.Name = "mMenViewAddConnectionPanel";
|
||||
_mMenViewAddConnectionPanel.Size = new System.Drawing.Size(228, 22);
|
||||
_mMenViewAddConnectionPanel.Text = "Add Connection Panel";
|
||||
_mMenViewAddConnectionPanel.Text = Language.strMenuAddConnectionPanel;
|
||||
_mMenViewAddConnectionPanel.Click += mMenViewAddConnectionPanel_Click;
|
||||
//
|
||||
// mMenViewConnectionPanels
|
||||
@@ -106,7 +105,7 @@ namespace mRemoteNG.UI.Menu
|
||||
_mMenViewConnectionPanels.Image = Resources.Panels;
|
||||
_mMenViewConnectionPanels.Name = "mMenViewConnectionPanels";
|
||||
_mMenViewConnectionPanels.Size = new System.Drawing.Size(228, 22);
|
||||
_mMenViewConnectionPanels.Text = "Connection Panels";
|
||||
_mMenViewConnectionPanels.Text = Language.strMenuConnectionPanels;
|
||||
//
|
||||
// mMenViewSep1
|
||||
//
|
||||
@@ -120,7 +119,7 @@ namespace mRemoteNG.UI.Menu
|
||||
_mMenViewConnections.Image = Resources.Root;
|
||||
_mMenViewConnections.Name = "mMenViewConnections";
|
||||
_mMenViewConnections.Size = new System.Drawing.Size(228, 22);
|
||||
_mMenViewConnections.Text = "Connections";
|
||||
_mMenViewConnections.Text = Language.strMenuConnections;
|
||||
_mMenViewConnections.Click += mMenViewConnections_Click;
|
||||
//
|
||||
// mMenViewConfig
|
||||
@@ -130,7 +129,7 @@ namespace mRemoteNG.UI.Menu
|
||||
_mMenViewConfig.Image = Resources.cog;
|
||||
_mMenViewConfig.Name = "mMenViewConfig";
|
||||
_mMenViewConfig.Size = new System.Drawing.Size(228, 22);
|
||||
_mMenViewConfig.Text = "Config";
|
||||
_mMenViewConfig.Text = Language.strMenuConfig;
|
||||
_mMenViewConfig.Click += mMenViewConfig_Click;
|
||||
//
|
||||
// mMenViewErrorsAndInfos
|
||||
@@ -140,7 +139,7 @@ namespace mRemoteNG.UI.Menu
|
||||
_mMenViewErrorsAndInfos.Image = Resources.ErrorsAndInfos;
|
||||
_mMenViewErrorsAndInfos.Name = "mMenViewErrorsAndInfos";
|
||||
_mMenViewErrorsAndInfos.Size = new System.Drawing.Size(228, 22);
|
||||
_mMenViewErrorsAndInfos.Text = "Errors and Infos";
|
||||
_mMenViewErrorsAndInfos.Text = Language.strMenuNotifications;
|
||||
_mMenViewErrorsAndInfos.Click += mMenViewErrorsAndInfos_Click;
|
||||
//
|
||||
// mMenViewScreenshotManager
|
||||
@@ -148,7 +147,7 @@ namespace mRemoteNG.UI.Menu
|
||||
_mMenViewScreenshotManager.Image = Resources.Screenshot;
|
||||
_mMenViewScreenshotManager.Name = "mMenViewScreenshotManager";
|
||||
_mMenViewScreenshotManager.Size = new System.Drawing.Size(228, 22);
|
||||
_mMenViewScreenshotManager.Text = "Screenshot Manager";
|
||||
_mMenViewScreenshotManager.Text = Language.strScreenshots;
|
||||
_mMenViewScreenshotManager.Click += mMenViewScreenshotManager_Click;
|
||||
//
|
||||
// ToolStripSeparator1
|
||||
@@ -164,7 +163,7 @@ namespace mRemoteNG.UI.Menu
|
||||
_mMenViewJumpTo.Image = Resources.JumpTo;
|
||||
_mMenViewJumpTo.Name = "mMenViewJumpTo";
|
||||
_mMenViewJumpTo.Size = new System.Drawing.Size(228, 22);
|
||||
_mMenViewJumpTo.Text = "Jump To";
|
||||
_mMenViewJumpTo.Text = Language.strMenuJumpTo;
|
||||
//
|
||||
// mMenViewJumpToConnectionsConfig
|
||||
//
|
||||
@@ -173,7 +172,7 @@ namespace mRemoteNG.UI.Menu
|
||||
_mMenViewJumpToConnectionsConfig.ShortcutKeys = ((Keys)(((Keys.Control | Keys.Alt)
|
||||
| Keys.C)));
|
||||
_mMenViewJumpToConnectionsConfig.Size = new System.Drawing.Size(258, 22);
|
||||
_mMenViewJumpToConnectionsConfig.Text = "Connections && Config";
|
||||
_mMenViewJumpToConnectionsConfig.Text = Language.strMenuConnectionsAndConfig;
|
||||
_mMenViewJumpToConnectionsConfig.Click += mMenViewJumpToConnectionsConfig_Click;
|
||||
//
|
||||
// mMenViewJumpToErrorsInfos
|
||||
@@ -183,7 +182,7 @@ namespace mRemoteNG.UI.Menu
|
||||
_mMenViewJumpToErrorsInfos.ShortcutKeys = ((Keys)(((Keys.Control | Keys.Alt)
|
||||
| Keys.E)));
|
||||
_mMenViewJumpToErrorsInfos.Size = new System.Drawing.Size(258, 22);
|
||||
_mMenViewJumpToErrorsInfos.Text = "Errors && Infos";
|
||||
_mMenViewJumpToErrorsInfos.Text = Language.strMenuNotifications;
|
||||
_mMenViewJumpToErrorsInfos.Click += mMenViewJumpToErrorsInfos_Click;
|
||||
//
|
||||
// mMenViewResetLayout
|
||||
@@ -191,7 +190,7 @@ namespace mRemoteNG.UI.Menu
|
||||
_mMenViewResetLayout.Image = Resources.application_side_tree;
|
||||
_mMenViewResetLayout.Name = "mMenViewResetLayout";
|
||||
_mMenViewResetLayout.Size = new System.Drawing.Size(228, 22);
|
||||
_mMenViewResetLayout.Text = "Reset Layout";
|
||||
_mMenViewResetLayout.Text = Language.strMenuResetLayout;
|
||||
_mMenViewResetLayout.Click += mMenViewResetLayout_Click;
|
||||
//
|
||||
// mMenViewLockToolbars
|
||||
@@ -199,8 +198,8 @@ namespace mRemoteNG.UI.Menu
|
||||
_mMenViewLockToolbars.Image = Resources.application_side_tree;
|
||||
_mMenViewLockToolbars.Name = "mMenViewLockToolbars";
|
||||
_mMenViewLockToolbars.Size = new System.Drawing.Size(228, 22);
|
||||
_mMenViewLockToolbars.Text = "Lock Toolbar Positions";
|
||||
_mMenViewLockToolbars.Click += mMenViewLockToolbars_Click;
|
||||
_mMenViewLockToolbars.Text = Language.strMenuLockToolbars;
|
||||
_mMenViewLockToolbars.Click += mMenViewLockToolbars_Click;
|
||||
//
|
||||
// mMenViewSep2
|
||||
//
|
||||
@@ -212,7 +211,7 @@ namespace mRemoteNG.UI.Menu
|
||||
_mMenViewQuickConnectToolbar.Image = Resources.Play_Quick;
|
||||
_mMenViewQuickConnectToolbar.Name = "mMenViewQuickConnectToolbar";
|
||||
_mMenViewQuickConnectToolbar.Size = new System.Drawing.Size(228, 22);
|
||||
_mMenViewQuickConnectToolbar.Text = "Quick Connect Toolbar";
|
||||
_mMenViewQuickConnectToolbar.Text = Language.strMenuQuickConnectToolbar;
|
||||
_mMenViewQuickConnectToolbar.Click += mMenViewQuickConnectToolbar_Click;
|
||||
//
|
||||
// mMenViewExtAppsToolbar
|
||||
@@ -220,7 +219,7 @@ namespace mRemoteNG.UI.Menu
|
||||
_mMenViewExtAppsToolbar.Image = Resources.ExtApp;
|
||||
_mMenViewExtAppsToolbar.Name = "mMenViewExtAppsToolbar";
|
||||
_mMenViewExtAppsToolbar.Size = new System.Drawing.Size(228, 22);
|
||||
_mMenViewExtAppsToolbar.Text = "External Applications Toolbar";
|
||||
_mMenViewExtAppsToolbar.Text = Language.strMenuExternalToolsToolbar;
|
||||
_mMenViewExtAppsToolbar.Click += mMenViewExtAppsToolbar_Click;
|
||||
//
|
||||
// mMenViewMultiSSHToolbar
|
||||
@@ -228,8 +227,8 @@ namespace mRemoteNG.UI.Menu
|
||||
_mMenViewMultiSshToolbar.Image = Resources.Panels;
|
||||
_mMenViewMultiSshToolbar.Name = "mMenViewMultiSSHToolbar";
|
||||
_mMenViewMultiSshToolbar.Size = new System.Drawing.Size(279, 26);
|
||||
_mMenViewMultiSshToolbar.Text = "Multi SSH Toolbar";
|
||||
_mMenViewMultiSshToolbar.Click += mMenViewMultiSSHToolbar_Click;
|
||||
_mMenViewMultiSshToolbar.Text = Language.strMenuMultiSshToolbar;
|
||||
_mMenViewMultiSshToolbar.Click += mMenViewMultiSSHToolbar_Click;
|
||||
//
|
||||
// mMenViewSep3
|
||||
//
|
||||
@@ -242,15 +241,16 @@ namespace mRemoteNG.UI.Menu
|
||||
_mMenViewFullscreen.Name = "mMenViewFullscreen";
|
||||
_mMenViewFullscreen.ShortcutKeys = Keys.F11;
|
||||
_mMenViewFullscreen.Size = new System.Drawing.Size(228, 22);
|
||||
_mMenViewFullscreen.Text = "Full Screen";
|
||||
_mMenViewFullscreen.Text = Language.strMenuFullScreen;
|
||||
_mMenViewFullscreen.Checked = Settings.Default.MainFormKiosk;
|
||||
_mMenViewFullscreen.Click += mMenViewFullscreen_Click;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void ApplyLanguage()
|
||||
public void ApplyLanguage()
|
||||
{
|
||||
Text = Language.strMenuView;
|
||||
_mMenViewAddConnectionPanel.Text = Language.strMenuAddConnectionPanel;
|
||||
_mMenViewConnectionPanels.Text = Language.strMenuConnectionPanels;
|
||||
_mMenViewConnections.Text = Language.strMenuConnections;
|
||||
@@ -261,8 +261,10 @@ namespace mRemoteNG.UI.Menu
|
||||
_mMenViewJumpToConnectionsConfig.Text = Language.strMenuConnectionsAndConfig;
|
||||
_mMenViewJumpToErrorsInfos.Text = Language.strMenuNotifications;
|
||||
_mMenViewResetLayout.Text = Language.strMenuResetLayout;
|
||||
_mMenViewLockToolbars.Text = Language.strLockToolbars;
|
||||
_mMenViewQuickConnectToolbar.Text = Language.strMenuQuickConnectToolbar;
|
||||
_mMenViewExtAppsToolbar.Text = Language.strMenuExternalToolsToolbar;
|
||||
_mMenViewMultiSshToolbar.Text = Language.strMultiSshToolbar;
|
||||
_mMenViewFullscreen.Text = Language.strMenuFullScreen;
|
||||
}
|
||||
|
||||
@@ -449,4 +451,4 @@ namespace mRemoteNG.UI.Menu
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,19 +9,20 @@ namespace mRemoteNG.UI.Window
|
||||
#region Windows Form Designer generated code
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.btnImport = new Controls.Base.NGButton();
|
||||
this.btnImport = new mRemoteNG.UI.Controls.Base.NGButton();
|
||||
this.txtDomain = new mRemoteNG.UI.Controls.Base.NGTextBox();
|
||||
this.lblDomain = new mRemoteNG.UI.Controls.Base.NGLabel();
|
||||
this.btnChangeDomain = new Controls.Base.NGButton();
|
||||
this.btnChangeDomain = new mRemoteNG.UI.Controls.Base.NGButton();
|
||||
this.ActiveDirectoryTree = new ADTree.ADtree();
|
||||
this.btnClose = new Controls.Base.NGButton();
|
||||
this.btnClose = new mRemoteNG.UI.Controls.Base.NGButton();
|
||||
this.chkSubOU = new mRemoteNG.UI.Controls.Base.NGCheckBox();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// 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(362, 338);
|
||||
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.Left)));
|
||||
this.btnImport.Location = new System.Drawing.Point(12, 346);
|
||||
this.btnImport.Name = "btnImport";
|
||||
this.btnImport.Size = new System.Drawing.Size(75, 23);
|
||||
this.btnImport.TabIndex = 4;
|
||||
@@ -35,7 +36,7 @@ namespace mRemoteNG.UI.Window
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.txtDomain.Location = new System.Drawing.Point(12, 25);
|
||||
this.txtDomain.Name = "txtDomain";
|
||||
this.txtDomain.Size = new System.Drawing.Size(425, 22);
|
||||
this.txtDomain.Size = new System.Drawing.Size(406, 22);
|
||||
this.txtDomain.TabIndex = 1;
|
||||
this.txtDomain.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtDomain_KeyDown);
|
||||
//
|
||||
@@ -50,10 +51,11 @@ namespace mRemoteNG.UI.Window
|
||||
//
|
||||
// btnChangeDomain
|
||||
//
|
||||
this.btnChangeDomain._mice = mRemoteNG.UI.Controls.Base.NGButton.MouseState.HOVER;
|
||||
this.btnChangeDomain.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnChangeDomain.Location = new System.Drawing.Point(443, 23);
|
||||
this.btnChangeDomain.Location = new System.Drawing.Point(424, 25);
|
||||
this.btnChangeDomain.Name = "btnChangeDomain";
|
||||
this.btnChangeDomain.Size = new System.Drawing.Size(75, 23);
|
||||
this.btnChangeDomain.Size = new System.Drawing.Size(99, 23);
|
||||
this.btnChangeDomain.TabIndex = 2;
|
||||
this.btnChangeDomain.Text = "Change";
|
||||
this.btnChangeDomain.UseVisualStyleBackColor = true;
|
||||
@@ -71,16 +73,17 @@ namespace mRemoteNG.UI.Window
|
||||
this.ActiveDirectoryTree.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.ActiveDirectoryTree.Name = "ActiveDirectoryTree";
|
||||
this.ActiveDirectoryTree.SelectedNode = null;
|
||||
this.ActiveDirectoryTree.Size = new System.Drawing.Size(506, 280);
|
||||
this.ActiveDirectoryTree.Size = new System.Drawing.Size(510, 271);
|
||||
this.ActiveDirectoryTree.TabIndex = 3;
|
||||
this.ActiveDirectoryTree.ADPathChanged += new ADTree.ADtree.ADPathChangedEventHandler(this.ActiveDirectoryTree_ADPathChanged);
|
||||
//
|
||||
// btnClose
|
||||
//
|
||||
this.btnClose._mice = mRemoteNG.UI.Controls.Base.NGButton.MouseState.HOVER;
|
||||
this.btnClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnClose.Location = new System.Drawing.Point(444, 337);
|
||||
this.btnClose.Location = new System.Drawing.Point(447, 330);
|
||||
this.btnClose.Name = "btnClose";
|
||||
this.btnClose.Size = new System.Drawing.Size(75, 23);
|
||||
this.btnClose.Size = new System.Drawing.Size(75, 39);
|
||||
this.btnClose.TabIndex = 5;
|
||||
this.btnClose.Text = "Close";
|
||||
this.btnClose.UseVisualStyleBackColor = true;
|
||||
@@ -88,8 +91,10 @@ namespace mRemoteNG.UI.Window
|
||||
//
|
||||
// chkSubOU
|
||||
//
|
||||
this.chkSubOU.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.chkSubOU.Location = new System.Drawing.Point(248, 342);
|
||||
this.chkSubOU._mice = mRemoteNG.UI.Controls.Base.NGCheckBox.MouseState.HOVER;
|
||||
this.chkSubOU.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.chkSubOU.AutoSize = true;
|
||||
this.chkSubOU.Location = new System.Drawing.Point(12, 330);
|
||||
this.chkSubOU.Name = "chkSubOU";
|
||||
this.chkSubOU.Size = new System.Drawing.Size(108, 17);
|
||||
this.chkSubOU.TabIndex = 6;
|
||||
@@ -100,7 +105,7 @@ namespace mRemoteNG.UI.Window
|
||||
//
|
||||
this.AcceptButton = this.btnImport;
|
||||
this.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.ClientSize = new System.Drawing.Size(530, 373);
|
||||
this.ClientSize = new System.Drawing.Size(534, 381);
|
||||
this.Controls.Add(this.chkSubOU);
|
||||
this.Controls.Add(this.btnClose);
|
||||
this.Controls.Add(this.ActiveDirectoryTree);
|
||||
|
||||
@@ -85,7 +85,9 @@ namespace mRemoteNG.UI.Window
|
||||
{
|
||||
btnImport.Text = Language.strButtonImport;
|
||||
lblDomain.Text = Language.strLabelDomain;
|
||||
chkSubOU.Text = Language.strImportSubOUs;
|
||||
btnChangeDomain.Text = Language.strButtonChange;
|
||||
btnClose.Text = Language.strButtonClose;
|
||||
}
|
||||
|
||||
private void ChangeDomain()
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -274,7 +274,7 @@ namespace mRemoteNG.UI.Window
|
||||
//
|
||||
this.ShowOnToolbarCheckBox._mice = mRemoteNG.UI.Controls.Base.NGCheckBox.MouseState.HOVER;
|
||||
this.ShowOnToolbarCheckBox.AutoSize = true;
|
||||
this.ShowOnToolbarCheckBox.Location = new System.Drawing.Point(306, 158);
|
||||
this.ShowOnToolbarCheckBox.Location = new System.Drawing.Point(369, 158);
|
||||
this.ShowOnToolbarCheckBox.Name = "ShowOnToolbarCheckBox";
|
||||
this.ShowOnToolbarCheckBox.Size = new System.Drawing.Size(113, 17);
|
||||
this.ShowOnToolbarCheckBox.TabIndex = 10;
|
||||
@@ -330,7 +330,7 @@ namespace mRemoteNG.UI.Window
|
||||
//
|
||||
this.TryToIntegrateCheckBox._mice = mRemoteNG.UI.Controls.Base.NGCheckBox.MouseState.HOVER;
|
||||
this.TryToIntegrateCheckBox.AutoSize = true;
|
||||
this.TryToIntegrateCheckBox.Location = new System.Drawing.Point(306, 135);
|
||||
this.TryToIntegrateCheckBox.Location = new System.Drawing.Point(369, 135);
|
||||
this.TryToIntegrateCheckBox.Name = "TryToIntegrateCheckBox";
|
||||
this.TryToIntegrateCheckBox.Size = new System.Drawing.Size(103, 17);
|
||||
this.TryToIntegrateCheckBox.TabIndex = 8;
|
||||
|
||||
@@ -45,26 +45,34 @@ namespace mRemoteNG.UI.Window
|
||||
TabText = Language.strMenuExternalTools;
|
||||
|
||||
NewToolToolstripButton.Text = Language.strButtonNew;
|
||||
DeleteToolToolstripButton.Text = Language.strOptionsKeyboardButtonDelete;
|
||||
DeleteToolToolstripButton.Text = Language.strOptionsThemeButtonDelete;
|
||||
LaunchToolToolstripButton.Text = Language.strButtonLaunch;
|
||||
|
||||
DisplayNameColumnHeader.Text = Language.strColumnDisplayName;
|
||||
FilenameColumnHeader.Text = Language.strColumnFilename;
|
||||
ArgumentsColumnHeader.Text = Language.strColumnArguments;
|
||||
WaitForExitColumnHeader.Text = Language.strColumnWaitForExit;
|
||||
TryToIntegrateCheckBox.Text = Language.strTryIntegrate;
|
||||
WorkingDirColumnHeader.Text = Language.strWorkingDirColumnHeader;
|
||||
WaitForExitColumnHeader.Text = Language.strColumnWaitForExit;
|
||||
TryToIntegrateColumnHeader.Text = Language.strTryToIntegrateColumnHeader;
|
||||
RunElevateHeader.Text = Language.strRunElevateHeader;
|
||||
ShowOnToolbarColumnHeader.Text = Language.strShowOnToolbarColumnHeader;
|
||||
|
||||
TryToIntegrateCheckBox.Text = Language.strTryIntegrate;
|
||||
ShowOnToolbarCheckBox.Text = Language.strShowOnToolbar;
|
||||
RunElevatedCheckBox.Text = Language.strRunElevated;
|
||||
|
||||
PropertiesGroupBox.Text = Language.strGroupboxExternalToolProperties;
|
||||
PropertiesGroupBox.Text = Language.strGroupboxExternalToolProperties;
|
||||
|
||||
DisplayNameLabel.Text = Language.strLabelDisplayName;
|
||||
FilenameLabel.Text = Language.strLabelFilename;
|
||||
ArgumentsLabel.Text = Language.strLabelArguments;
|
||||
OptionsLabel.Text = Language.strLabelOptions;
|
||||
WorkingDirLabel.Text = Language.srtWorkingDirectory;
|
||||
OptionsLabel.Text = Language.strLabelOptions;
|
||||
|
||||
WaitForExitCheckBox.Text = Language.strCheckboxWaitForExit;
|
||||
BrowseButton.Text = Language.strButtonBrowse;
|
||||
|
||||
NewToolMenuItem.Text = Language.strMenuNewExternalTool;
|
||||
BrowseWorkingDir.Text = Language.strButtonBrowse;
|
||||
NewToolMenuItem.Text = Language.strMenuNewExternalTool;
|
||||
DeleteToolMenuItem.Text = Language.strMenuDeleteExternalTool;
|
||||
LaunchToolMenuItem.Text = Language.strMenuLaunchExternalTool;
|
||||
}
|
||||
|
||||
133
mRemoteV1/UI/Window/PortScanWindow.Designer.cs
generated
133
mRemoteV1/UI/Window/PortScanWindow.Designer.cs
generated
@@ -26,7 +26,7 @@ namespace mRemoteNG.UI.Window
|
||||
internal Controls.Base.NGProgressBar prgBar;
|
||||
internal Controls.Base.NGLabel lblOnlyImport;
|
||||
internal Controls.Base.NGComboBox cbProtocol;
|
||||
internal System.Windows.Forms.Panel pnlPorts;
|
||||
internal System.Windows.Forms.Panel pnlScan;
|
||||
internal Controls.Base.NGNumericUpDown portEnd;
|
||||
internal Controls.Base.NGNumericUpDown portStart;
|
||||
internal Controls.Base.NGLabel Label2;
|
||||
@@ -42,7 +42,7 @@ namespace mRemoteNG.UI.Window
|
||||
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.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();
|
||||
@@ -52,8 +52,8 @@ namespace mRemoteNG.UI.Window
|
||||
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.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()));
|
||||
@@ -66,15 +66,18 @@ namespace mRemoteNG.UI.Window
|
||||
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.pnlScan = 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();
|
||||
this.pnlScan.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.numericSelectorTimeout)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.portEnd)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.portStart)).BeginInit();
|
||||
this.pnlImport.SuspendLayout();
|
||||
@@ -82,7 +85,7 @@ namespace mRemoteNG.UI.Window
|
||||
//
|
||||
// ipStart
|
||||
//
|
||||
this.ipStart.Location = new System.Drawing.Point(12, 25);
|
||||
this.ipStart.Location = new System.Drawing.Point(5, 19);
|
||||
this.ipStart.Name = "ipStart";
|
||||
this.ipStart.Size = new System.Drawing.Size(130, 20);
|
||||
this.ipStart.TabIndex = 10;
|
||||
@@ -90,7 +93,7 @@ namespace mRemoteNG.UI.Window
|
||||
//
|
||||
// ipEnd
|
||||
//
|
||||
this.ipEnd.Location = new System.Drawing.Point(148, 25);
|
||||
this.ipEnd.Location = new System.Drawing.Point(155, 19);
|
||||
this.ipEnd.Name = "ipEnd";
|
||||
this.ipEnd.Size = new System.Drawing.Size(130, 20);
|
||||
this.ipEnd.TabIndex = 15;
|
||||
@@ -99,7 +102,7 @@ namespace mRemoteNG.UI.Window
|
||||
// lblStartIP
|
||||
//
|
||||
this.lblStartIP.AutoSize = true;
|
||||
this.lblStartIP.Location = new System.Drawing.Point(12, 7);
|
||||
this.lblStartIP.Location = new System.Drawing.Point(3, 5);
|
||||
this.lblStartIP.Name = "lblStartIP";
|
||||
this.lblStartIP.Size = new System.Drawing.Size(46, 13);
|
||||
this.lblStartIP.TabIndex = 0;
|
||||
@@ -108,7 +111,7 @@ namespace mRemoteNG.UI.Window
|
||||
// lblEndIP
|
||||
//
|
||||
this.lblEndIP.AutoSize = true;
|
||||
this.lblEndIP.Location = new System.Drawing.Point(148, 7);
|
||||
this.lblEndIP.Location = new System.Drawing.Point(152, 5);
|
||||
this.lblEndIP.Name = "lblEndIP";
|
||||
this.lblEndIP.Size = new System.Drawing.Size(42, 13);
|
||||
this.lblEndIP.TabIndex = 5;
|
||||
@@ -116,12 +119,13 @@ namespace mRemoteNG.UI.Window
|
||||
//
|
||||
// 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(597, 12);
|
||||
this.btnScan.Location = new System.Drawing.Point(769, 5);
|
||||
this.btnScan.Name = "btnScan";
|
||||
this.btnScan.Size = new System.Drawing.Size(95, 55);
|
||||
this.btnScan.Size = new System.Drawing.Size(110, 55);
|
||||
this.btnScan.TabIndex = 20;
|
||||
this.btnScan.Text = "&Scan";
|
||||
this.btnScan.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
|
||||
@@ -135,6 +139,8 @@ namespace mRemoteNG.UI.Window
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
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;
|
||||
@@ -142,7 +148,7 @@ namespace mRemoteNG.UI.Window
|
||||
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.Size = new System.Drawing.Size(883, 290);
|
||||
this.olvHosts.TabIndex = 26;
|
||||
this.olvHosts.UseCompatibleStateImageBehavior = false;
|
||||
this.olvHosts.View = System.Windows.Forms.View.Details;
|
||||
@@ -211,10 +217,11 @@ namespace mRemoteNG.UI.Window
|
||||
//
|
||||
// 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(594, 3);
|
||||
this.btnImport.Location = new System.Drawing.Point(800, 5);
|
||||
this.btnImport.Name = "btnImport";
|
||||
this.btnImport.Size = new System.Drawing.Size(75, 31);
|
||||
this.btnImport.Size = new System.Drawing.Size(80, 40);
|
||||
this.btnImport.TabIndex = 101;
|
||||
this.btnImport.Text = "&Import";
|
||||
this.btnImport.UseVisualStyleBackColor = true;
|
||||
@@ -222,6 +229,7 @@ namespace mRemoteNG.UI.Window
|
||||
//
|
||||
// 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;
|
||||
@@ -233,7 +241,7 @@ namespace mRemoteNG.UI.Window
|
||||
"Rlogin",
|
||||
"RDP",
|
||||
"VNC"});
|
||||
this.cbProtocol.Location = new System.Drawing.Point(157, 6);
|
||||
this.cbProtocol.Location = new System.Drawing.Point(5, 25);
|
||||
this.cbProtocol.Name = "cbProtocol";
|
||||
this.cbProtocol.Size = new System.Drawing.Size(122, 21);
|
||||
this.cbProtocol.TabIndex = 28;
|
||||
@@ -242,7 +250,7 @@ namespace mRemoteNG.UI.Window
|
||||
//
|
||||
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.Location = new System.Drawing.Point(2, 5);
|
||||
this.lblOnlyImport.Name = "lblOnlyImport";
|
||||
this.lblOnlyImport.Size = new System.Drawing.Size(104, 13);
|
||||
this.lblOnlyImport.TabIndex = 1;
|
||||
@@ -315,26 +323,57 @@ namespace mRemoteNG.UI.Window
|
||||
//
|
||||
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.Location = new System.Drawing.Point(5, 45);
|
||||
this.prgBar.Name = "prgBar";
|
||||
this.prgBar.Size = new System.Drawing.Size(571, 16);
|
||||
this.prgBar.Size = new System.Drawing.Size(760, 15);
|
||||
this.prgBar.Step = 1;
|
||||
this.prgBar.TabIndex = 28;
|
||||
//
|
||||
// pnlPorts
|
||||
// pnlScan
|
||||
//
|
||||
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;
|
||||
this.pnlScan.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.pnlScan.Controls.Add(this.numericSelectorTimeout);
|
||||
this.pnlScan.Controls.Add(this.lblTimeout);
|
||||
this.pnlScan.Controls.Add(this.portEnd);
|
||||
this.pnlScan.Controls.Add(this.portStart);
|
||||
this.pnlScan.Controls.Add(this.prgBar);
|
||||
this.pnlScan.Controls.Add(this.Label2);
|
||||
this.pnlScan.Controls.Add(this.lblStartIP);
|
||||
this.pnlScan.Controls.Add(this.lblEndIP);
|
||||
this.pnlScan.Controls.Add(this.ipStart);
|
||||
this.pnlScan.Controls.Add(this.btnScan);
|
||||
this.pnlScan.Controls.Add(this.Label1);
|
||||
this.pnlScan.Controls.Add(this.ipEnd);
|
||||
this.pnlScan.Location = new System.Drawing.Point(12, 5);
|
||||
this.pnlScan.Name = "pnlScan";
|
||||
this.pnlScan.Size = new System.Drawing.Size(883, 65);
|
||||
this.pnlScan.TabIndex = 18;
|
||||
//
|
||||
// numericSelectorTimeout
|
||||
//
|
||||
this.numericSelectorTimeout.Location = new System.Drawing.Point(600, 17);
|
||||
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(597, 1);
|
||||
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.Location = new System.Drawing.Point(490, 17);
|
||||
this.portEnd.Maximum = new decimal(new int[] {
|
||||
65535,
|
||||
0,
|
||||
@@ -347,7 +386,7 @@ namespace mRemoteNG.UI.Window
|
||||
//
|
||||
// portStart
|
||||
//
|
||||
this.portStart.Location = new System.Drawing.Point(79, 12);
|
||||
this.portStart.Location = new System.Drawing.Point(375, 17);
|
||||
this.portStart.Maximum = new decimal(new int[] {
|
||||
65535,
|
||||
0,
|
||||
@@ -361,7 +400,7 @@ namespace mRemoteNG.UI.Window
|
||||
// Label2
|
||||
//
|
||||
this.Label2.AutoSize = true;
|
||||
this.Label2.Location = new System.Drawing.Point(162, 16);
|
||||
this.Label2.Location = new System.Drawing.Point(487, 1);
|
||||
this.Label2.Name = "Label2";
|
||||
this.Label2.Size = new System.Drawing.Size(54, 13);
|
||||
this.Label2.TabIndex = 10;
|
||||
@@ -370,7 +409,7 @@ namespace mRemoteNG.UI.Window
|
||||
// Label1
|
||||
//
|
||||
this.Label1.AutoSize = true;
|
||||
this.Label1.Location = new System.Drawing.Point(3, 17);
|
||||
this.Label1.Location = new System.Drawing.Point(372, 1);
|
||||
this.Label1.Name = "Label1";
|
||||
this.Label1.Size = new System.Drawing.Size(58, 13);
|
||||
this.Label1.TabIndex = 0;
|
||||
@@ -383,40 +422,36 @@ namespace mRemoteNG.UI.Window
|
||||
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.Location = new System.Drawing.Point(12, 364);
|
||||
this.pnlImport.Name = "pnlImport";
|
||||
this.pnlImport.Size = new System.Drawing.Size(680, 40);
|
||||
this.pnlImport.Size = new System.Drawing.Size(883, 50);
|
||||
this.pnlImport.TabIndex = 102;
|
||||
//
|
||||
// PortScanWindow
|
||||
//
|
||||
this.AcceptButton = this.btnImport;
|
||||
this.ClientSize = new System.Drawing.Size(704, 421);
|
||||
this.AutoScroll = true;
|
||||
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.Controls.Add(this.pnlScan);
|
||||
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.MinimumSize = new System.Drawing.Size(924, 460);
|
||||
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();
|
||||
this.pnlScan.ResumeLayout(false);
|
||||
this.pnlScan.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 +466,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)
|
||||
{
|
||||
@@ -122,13 +122,13 @@ namespace mRemoteNG.UI.Window
|
||||
else
|
||||
{
|
||||
Runtime.MessageCollector.AddMessage(MessageClass.WarningMsg, Language.strCannotStartPortScan);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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,13 +147,14 @@ namespace mRemoteNG.UI.Window
|
||||
clmClosedPorts.Text = Language.strClosedPorts;
|
||||
Label2.Text = $"{Language.strEndPort}:";
|
||||
Label1.Text = $"{Language.strStartPort}:";
|
||||
lblTimeout.Text = $"{Language.strTimeoutInSeconds}";
|
||||
TabText = Language.strMenuPortScan;
|
||||
Text = Language.strMenuPortScan;
|
||||
}
|
||||
|
||||
private void ShowImportControls(bool controlsVisible)
|
||||
{
|
||||
pnlPorts.Visible = controlsVisible;
|
||||
pnlScan.Visible = controlsVisible;
|
||||
pnlImport.Visible = controlsVisible;
|
||||
if (controlsVisible)
|
||||
{
|
||||
@@ -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;
|
||||
|
||||
@@ -692,6 +692,12 @@
|
||||
<setting name="MultiSshToolbarVisible" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="CreateEmptyPanelOnStartUp" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="StartUpPanelName" serializeAs="String">
|
||||
<value>General</value>
|
||||
</setting>
|
||||
</mRemoteNG.Settings>
|
||||
</userSettings>
|
||||
<applicationSettings>
|
||||
|
||||
@@ -167,15 +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\CsvConnectionsDeserializerMremotengFormat.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" />
|
||||
@@ -188,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" />
|
||||
@@ -321,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" />
|
||||
@@ -964,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