diff --git a/mRemoteNGTests/Config/Serializers/XmlConnectionNodeSerializer27Tests.cs b/mRemoteNGTests/Config/Serializers/XmlConnectionNodeSerializer27Tests.cs index cde29295b..2bd6f3a2f 100644 --- a/mRemoteNGTests/Config/Serializers/XmlConnectionNodeSerializer27Tests.cs +++ b/mRemoteNGTests/Config/Serializers/XmlConnectionNodeSerializer27Tests.cs @@ -3,7 +3,9 @@ using System.Xml.Linq; using mRemoteNG.Config.Serializers; using mRemoteNG.Connection; using mRemoteNG.Container; +using mRemoteNG.Credential; using mRemoteNG.Security; +using NSubstitute; using NUnit.Framework; @@ -76,6 +78,7 @@ namespace mRemoteNGTests.Config.Serializers Username = "myuser", Domain = "superdomain", Password = "pass", + CredentialRecord = Substitute.For(), Hostname = "somehost", ExtApp = "myextapp", PreExtApp = "preext1", @@ -108,6 +111,7 @@ namespace mRemoteNGTests.Config.Serializers yield return new TestCaseData("RDGatewayPassword", ConnectionInfo); yield return new TestCaseData("VNCProxyUsername", ConnectionInfo); yield return new TestCaseData("VNCProxyPassword", ConnectionInfo); + yield return new TestCaseData("CredentialId", ConnectionInfo); } } diff --git a/mRemoteNGTests/Config/Serializers/XmlConnectionsSerializerTests.cs b/mRemoteNGTests/Config/Serializers/XmlConnectionsSerializerTests.cs index 4958ab606..86a5ea484 100644 --- a/mRemoteNGTests/Config/Serializers/XmlConnectionsSerializerTests.cs +++ b/mRemoteNGTests/Config/Serializers/XmlConnectionsSerializerTests.cs @@ -53,6 +53,7 @@ namespace mRemoteNGTests.Config.Serializers Assert.That(connectionNode, Is.Not.Null); } + [TestCase("CredentialId", "")] [TestCase("InheritAutomaticResize", "False")] public void SerializerRespectsSaveFilterSettings(string attributeName, string expectedValue) { diff --git a/mRemoteV1/App/Export.cs b/mRemoteV1/App/Export.cs index 560e982eb..e9c467a12 100644 --- a/mRemoteV1/App/Export.cs +++ b/mRemoteV1/App/Export.cs @@ -20,7 +20,7 @@ namespace mRemoteNG.App { try { - var saveSecurity = new SaveFilter(); + var saveFilter = new SaveFilter(); using (var exportForm = new ExportForm()) { @@ -50,12 +50,13 @@ namespace mRemoteNG.App break; } - saveSecurity.SaveUsername = exportForm.IncludeUsername; - saveSecurity.SavePassword = exportForm.IncludePassword; - saveSecurity.SaveDomain = exportForm.IncludeDomain; - saveSecurity.SaveInheritance = exportForm.IncludeInheritance; + saveFilter.SaveUsername = exportForm.IncludeUsername; + saveFilter.SavePassword = exportForm.IncludePassword; + saveFilter.SaveDomain = exportForm.IncludeDomain; + saveFilter.SaveInheritance = exportForm.IncludeInheritance; + saveFilter.SaveCredentialId = exportForm.IncludeAssignedCredential; - SaveExportFile(exportForm.FileName, exportForm.SaveFormat, saveSecurity, exportTarget); + SaveExportFile(exportForm.FileName, exportForm.SaveFormat, saveFilter, exportTarget); } } diff --git a/mRemoteV1/Config/Serializers/XmlConnectionNodeSerializer27.cs b/mRemoteV1/Config/Serializers/XmlConnectionNodeSerializer27.cs index 45e23d2e1..b9635bc41 100644 --- a/mRemoteV1/Config/Serializers/XmlConnectionNodeSerializer27.cs +++ b/mRemoteV1/Config/Serializers/XmlConnectionNodeSerializer27.cs @@ -11,7 +11,7 @@ namespace mRemoteNG.Config.Serializers { private readonly ICryptographyProvider _cryptographyProvider; private readonly SecureString _encryptionKey; - private readonly SaveFilter _saveFilter = new SaveFilter(); + private readonly SaveFilter _saveFilter; public XmlConnectionNodeSerializer27(ICryptographyProvider cryptographyProvider, SecureString encryptionKey, SaveFilter saveFilter) @@ -41,7 +41,9 @@ namespace mRemoteNG.Config.Serializers element.Add(new XAttribute("Panel", connectionInfo.Panel)); element.Add(new XAttribute("Id", connectionInfo.ConstantID)); - element.Add(new XAttribute("CredentialId", connectionInfo.CredentialRecord?.Id.ToString() ?? "")); + element.Add(_saveFilter.SaveCredentialId + ? new XAttribute("CredentialId", connectionInfo.CredentialRecord?.Id.ToString() ?? "") + : new XAttribute("CredentialId", "")); element.Add(new XAttribute("Hostname", connectionInfo.Hostname)); element.Add(new XAttribute("Protocol", connectionInfo.Protocol)); diff --git a/mRemoteV1/Resources/Language/Language.Designer.cs b/mRemoteV1/Resources/Language/Language.Designer.cs index aef88f01a..b00d9f8c5 100644 --- a/mRemoteV1/Resources/Language/Language.Designer.cs +++ b/mRemoteV1/Resources/Language/Language.Designer.cs @@ -258,6 +258,15 @@ namespace mRemoteNG { } } + /// + /// Looks up a localized string similar to Assigned Credential. + /// + internal static string strAssignedCredential { + get { + return ResourceManager.GetString("strAssignedCredential", resourceCulture); + } + } + /// /// Looks up a localized string similar to Automatically get session information. /// diff --git a/mRemoteV1/Resources/Language/Language.resx b/mRemoteV1/Resources/Language/Language.resx index 538b65306..2774da8a2 100644 --- a/mRemoteV1/Resources/Language/Language.resx +++ b/mRemoteV1/Resources/Language/Language.resx @@ -2505,4 +2505,7 @@ mRemoteNG will now quit and begin with the installation. Log to application directory + + Assigned Credential + \ No newline at end of file diff --git a/mRemoteV1/Security/SaveFilter.cs b/mRemoteV1/Security/SaveFilter.cs index 24d65eeca..7216e82d9 100644 --- a/mRemoteV1/Security/SaveFilter.cs +++ b/mRemoteV1/Security/SaveFilter.cs @@ -9,7 +9,8 @@ namespace mRemoteNG.Security SaveUsername = true; SavePassword = true; SaveDomain = true; - SaveInheritance = true; + SaveCredentialId = true; + SaveInheritance = true; } public bool SaveUsername { get; set; } @@ -18,6 +19,8 @@ namespace mRemoteNG.Security public bool SaveDomain { get; set; } + public bool SaveCredentialId { get; set; } + public bool SaveInheritance { get; set; } } } \ No newline at end of file diff --git a/mRemoteV1/UI/Forms/ExportForm.Designer.cs b/mRemoteV1/UI/Forms/ExportForm.Designer.cs index eb040fa43..928ce9bbf 100644 --- a/mRemoteV1/UI/Forms/ExportForm.Designer.cs +++ b/mRemoteV1/UI/Forms/ExportForm.Designer.cs @@ -18,6 +18,7 @@ namespace mRemoteNG.UI.Forms this.txtFileName = new System.Windows.Forms.TextBox(); this.btnBrowse = new System.Windows.Forms.Button(); this.grpProperties = new System.Windows.Forms.GroupBox(); + this.chkAssignedCredential = new System.Windows.Forms.CheckBox(); this.grpFile = new System.Windows.Forms.GroupBox(); this.lblFileFormat = new System.Windows.Forms.Label(); this.lblFileName = new System.Windows.Forms.Label(); @@ -131,6 +132,7 @@ namespace mRemoteNG.UI.Forms // // grpProperties // + this.grpProperties.Controls.Add(this.chkAssignedCredential); this.grpProperties.Controls.Add(this.lblUncheckProperties); this.grpProperties.Controls.Add(this.chkInheritance); this.grpProperties.Controls.Add(this.chkUsername); @@ -143,6 +145,18 @@ namespace mRemoteNG.UI.Forms this.grpProperties.TabStop = false; this.grpProperties.Text = "Export Properties"; // + // chkAssignedCredential + // + this.chkAssignedCredential.AutoSize = true; + this.chkAssignedCredential.Checked = true; + this.chkAssignedCredential.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkAssignedCredential.Location = new System.Drawing.Point(143, 32); + this.chkAssignedCredential.Name = "chkAssignedCredential"; + this.chkAssignedCredential.Size = new System.Drawing.Size(119, 17); + this.chkAssignedCredential.TabIndex = 5; + this.chkAssignedCredential.Text = "Assigned Credential"; + this.chkAssignedCredential.UseVisualStyleBackColor = true; + // // grpFile // this.grpFile.Controls.Add(this.lblFileFormat); @@ -183,6 +197,7 @@ namespace mRemoteNG.UI.Forms this.cboFileFormat.Name = "cboFileFormat"; this.cboFileFormat.Size = new System.Drawing.Size(294, 21); this.cboFileFormat.TabIndex = 4; + this.cboFileFormat.SelectedIndexChanged += new System.EventHandler(this.cboFileformat_SelectedIndexChanged); // // grpItems // @@ -299,5 +314,7 @@ namespace mRemoteNG.UI.Forms private System.Windows.Forms.RadioButton rdoExportSelectedFolder; private System.Windows.Forms.RadioButton rdoExportEverything; #endregion - } + + private CheckBox chkAssignedCredential; + } } diff --git a/mRemoteV1/UI/Forms/ExportForm.cs b/mRemoteV1/UI/Forms/ExportForm.cs index a7a74c3b2..2a4a5c79e 100644 --- a/mRemoteV1/UI/Forms/ExportForm.cs +++ b/mRemoteV1/UI/Forms/ExportForm.cs @@ -47,20 +47,13 @@ namespace mRemoteNG.UI.Forms { get { - if (rdoExportSelectedFolder.Checked) - { + if (rdoExportSelectedFolder.Checked) return ExportScope.SelectedFolder; - } - else if (rdoExportSelectedConnection.Checked) - { - return ExportScope.SelectedConnection; - } - else - { - return ExportScope.Everything; - } + if (rdoExportSelectedConnection.Checked) + return ExportScope.SelectedConnection; + return ExportScope.Everything; } - set + set { switch (value) { @@ -142,7 +135,13 @@ namespace mRemoteNG.UI.Forms chkDomain.Checked = value; } } - + + public bool IncludeAssignedCredential + { + get { return chkAssignedCredential.Checked; } + set { chkAssignedCredential.Checked = value; } + } + public bool IncludeInheritance { get @@ -160,19 +159,15 @@ namespace mRemoteNG.UI.Forms public ExportForm() { InitializeComponent(); - Runtime.FontOverride(this); - SelectedFolder = null; SelectedConnection = null; - btnOK.Enabled = false; } #endregion #region Private Methods #region Event Handlers - private void ExportForm_Load(object sender, EventArgs e) { cboFileFormat.Items.Clear(); @@ -225,6 +220,24 @@ namespace mRemoteNG.UI.Forms { DialogResult = DialogResult.Cancel; } + + private void cboFileformat_SelectedIndexChanged(object sender, EventArgs e) + { + if (SaveFormat == ConnectionsSaver.Format.mRXML) + { + chkUsername.Enabled = false; + chkPassword.Enabled = false; + chkDomain.Enabled = false; + chkAssignedCredential.Enabled = true; + } + else + { + chkUsername.Enabled = true; + chkPassword.Enabled = true; + chkDomain.Enabled = true; + chkAssignedCredential.Enabled = false; + } + } #endregion private void ApplyLanguage() @@ -245,6 +258,7 @@ namespace mRemoteNG.UI.Forms chkUsername.Text = Language.strCheckboxUsername; chkPassword.Text = Language.strCheckboxPassword; chkDomain.Text = Language.strCheckboxDomain; + chkAssignedCredential.Text = Language.strAssignedCredential; chkInheritance.Text = Language.strCheckboxInheritance; lblUncheckProperties.Text = Language.strUncheckProperties;