From 0e83e525febdac8df0f72c2dd0141ba737ae0989 Mon Sep 17 00:00:00 2001 From: "massimo.antonello" Date: Thu, 16 Oct 2025 15:06:16 +0200 Subject: [PATCH] Properties --- ExternalConnectors/VO/VaultOpenbao.cs | 3 ++ .../Connection/AbstractConnectionRecord.cs | 16 +++++++++ mRemoteNG/Connection/Protocol/PuttyBase.cs | 12 +++---- .../Connection/Protocol/RDP/RdpProtocol.cs | 7 ++++ mRemoteNG/Language/Language.Designer.cs | 36 +++++++++++++++++++ mRemoteNG/Language/Language.cs-CZ.resx | 18 ++++++++-- mRemoteNG/Language/Language.de.resx | 13 +++++++ mRemoteNG/Language/Language.el.resx | 13 +++++++ mRemoteNG/Language/Language.es-AR.resx | 12 +++++++ mRemoteNG/Language/Language.es.resx | 13 +++++++ mRemoteNG/Language/Language.fi-FI.resx | 13 +++++++ mRemoteNG/Language/Language.fr.resx | 13 +++++++ mRemoteNG/Language/Language.hu.resx | 13 +++++++ mRemoteNG/Language/Language.it.resx | 16 +++++++++ mRemoteNG/Language/Language.ja-JP.resx | 13 +++++++ mRemoteNG/Language/Language.ko-KR.resx | 13 +++++++ mRemoteNG/Language/Language.lt.resx | 13 +++++++ mRemoteNG/Language/Language.nb-NO.resx | 13 +++++++ mRemoteNG/Language/Language.nl.resx | 13 +++++++ mRemoteNG/Language/Language.pl.resx | 13 +++++++ mRemoteNG/Language/Language.pt-BR.resx | 13 +++++++ mRemoteNG/Language/Language.pt.resx | 13 +++++++ mRemoteNG/Language/Language.resx | 12 +++++++ mRemoteNG/Language/Language.ru.resx | 12 +++++++ mRemoteNG/Language/Language.sv-SE.resx | 13 +++++++ mRemoteNG/Language/Language.ta.resx | 13 +++++++ mRemoteNG/Language/Language.tr-TR.resx | 13 +++++++ mRemoteNG/Language/Language.uk.resx | 13 +++++++ mRemoteNG/Language/Language.zh-CN.resx | 13 +++++++ mRemoteNG/Language/Language.zh-TW.resx | 13 +++++++ .../ConnectionInfoPropertyGrid.cs | 14 +++++++- 31 files changed, 407 insertions(+), 11 deletions(-) diff --git a/ExternalConnectors/VO/VaultOpenbao.cs b/ExternalConnectors/VO/VaultOpenbao.cs index 9ddbede98..eb2cb57ca 100644 --- a/ExternalConnectors/VO/VaultOpenbao.cs +++ b/ExternalConnectors/VO/VaultOpenbao.cs @@ -3,6 +3,9 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using VaultSharp; +using VaultSharp.V1.AuthMethods; +using VaultSharp.V1.AuthMethods.Token; namespace ExternalConnectors.VO { public class VaultOpenbao { diff --git a/mRemoteNG/Connection/AbstractConnectionRecord.cs b/mRemoteNG/Connection/AbstractConnectionRecord.cs index 5e35d375a..8139eb984 100644 --- a/mRemoteNG/Connection/AbstractConnectionRecord.cs +++ b/mRemoteNG/Connection/AbstractConnectionRecord.cs @@ -247,6 +247,22 @@ namespace mRemoteNG.Connection set => SetField(ref _password, value, "Password"); } + [LocalizedAttributes.LocalizedCategory(nameof(Language.Connection), 2), + LocalizedAttributes.LocalizedDisplayName(nameof(Language.VaultOpenbaoMount)), + LocalizedAttributes.LocalizedDescription(nameof(Language.VaultOpenbaoMountDescription)), + AttributeUsedInProtocol(ProtocolType.RDP, ProtocolType.VNC, ProtocolType.ARD, ProtocolType.SSH1, + ProtocolType.SSH2, ProtocolType.Telnet, ProtocolType.RAW, ProtocolType.HTTP, ProtocolType.HTTPS, + ProtocolType.IntApp)] + public virtual string VaultMount { get; set; } + + [LocalizedAttributes.LocalizedCategory(nameof(Language.Connection), 2), + LocalizedAttributes.LocalizedDisplayName(nameof(Language.VaultOpenbaoRole)), + LocalizedAttributes.LocalizedDescription(nameof(Language.VaultOpenbaoRoleDescription)), + AttributeUsedInProtocol(ProtocolType.RDP, ProtocolType.VNC, ProtocolType.ARD, ProtocolType.SSH1, + ProtocolType.SSH2, ProtocolType.Telnet, ProtocolType.RAW, ProtocolType.HTTP, ProtocolType.HTTPS, + ProtocolType.IntApp)] + public virtual string VaultRole { get; set; } + [LocalizedAttributes.LocalizedCategory(nameof(Language.Connection), 2), LocalizedAttributes.LocalizedDisplayName(nameof(Language.Domain)), LocalizedAttributes.LocalizedDescription(nameof(Language.PropertyDescriptionDomain)), diff --git a/mRemoteNG/Connection/Protocol/PuttyBase.cs b/mRemoteNG/Connection/Protocol/PuttyBase.cs index 384938f8f..ec1a527fa 100644 --- a/mRemoteNG/Connection/Protocol/PuttyBase.cs +++ b/mRemoteNG/Connection/Protocol/PuttyBase.cs @@ -15,7 +15,6 @@ using System.Linq; using System.Runtime.Versioning; using System.Threading; using System.Windows.Forms; -using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel; // ReSharper disable ArrangeAccessorOwnerBody @@ -104,7 +103,6 @@ namespace mRemoteNG.Connection.Protocol string username = InterfaceControl.Info?.Username ?? ""; //string password = InterfaceControl.Info?.Password?.ConvertToUnsecureString() ?? ""; string password = InterfaceControl.Info?.Password ?? ""; - string domain = InterfaceControl.Info?.Domain ?? ""; string UserViaAPI = InterfaceControl.Info?.UserViaAPI ?? ""; string privatekey = ""; @@ -113,7 +111,7 @@ namespace mRemoteNG.Connection.Protocol { try { - ExternalConnectors.DSS.SecretServerInterface.FetchSecretFromServer($"{UserViaAPI}", out username, out password, out domain, out privatekey); + ExternalConnectors.DSS.SecretServerInterface.FetchSecretFromServer($"{UserViaAPI}", out username, out password, out _, out privatekey); if (!string.IsNullOrEmpty(privatekey)) { @@ -134,7 +132,7 @@ namespace mRemoteNG.Connection.Protocol { try { - ExternalConnectors.CPS.PasswordstateInterface.FetchSecretFromServer($"{UserViaAPI}", out username, out password, out domain, out privatekey); + ExternalConnectors.CPS.PasswordstateInterface.FetchSecretFromServer($"{UserViaAPI}", out username, out password, out _, out privatekey); if (!string.IsNullOrEmpty(privatekey)) { @@ -154,7 +152,7 @@ namespace mRemoteNG.Connection.Protocol else if (InterfaceControl.Info.ExternalCredentialProvider == ExternalCredentialProvider.OnePassword) { try { - ExternalConnectors.OP.OnePasswordCli.ReadPassword($"{UserViaAPI}", out username, out password, out domain, out privatekey); + ExternalConnectors.OP.OnePasswordCli.ReadPassword($"{UserViaAPI}", out username, out password, out _, out privatekey); } catch (ExternalConnectors.OP.OnePasswordCliException ex) { @@ -181,7 +179,7 @@ namespace mRemoteNG.Connection.Protocol try { ExternalConnectors.DSS.SecretServerInterface.FetchSecretFromServer( - $"{Properties.OptionsCredentialsPage.Default.UserViaAPIDefault}", out username, out password, out domain, out privatekey); + $"{Properties.OptionsCredentialsPage.Default.UserViaAPIDefault}", out username, out password, out _, out privatekey); } catch (Exception ex) { @@ -214,7 +212,7 @@ namespace mRemoteNG.Connection.Protocol if (!string.IsNullOrEmpty(password)) { - string random = string.Join("", Guid.NewGuid().ToString("n").Take(8).Select(o => o)); + string random = string.Join("", Guid.NewGuid().ToString("n").Take(8)); // write data to pipe Thread thread = new(new ParameterizedThreadStart(CreatePipe)); thread.Start($"{random}{password}"); diff --git a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol.cs b/mRemoteNG/Connection/Protocol/RDP/RdpProtocol.cs index 991114811..77227a256 100644 --- a/mRemoteNG/Connection/Protocol/RDP/RdpProtocol.cs +++ b/mRemoteNG/Connection/Protocol/RDP/RdpProtocol.cs @@ -595,6 +595,13 @@ namespace mRemoteNG.Connection.Protocol.RDP Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, Language.ECPOnePasswordReadFailed + Environment.NewLine + ex.Message); } } + else if (InterfaceControl.Info.ExternalCredentialProvider == ExternalCredentialProvider.VaultOpenbao) { + try { + ExternalConnectors.VO.VaultOpenbao.ReadPassword($"{userViaApi}", out userName, out password, out domain, out pkey); + } catch (ExternalConnectors.VO.VaultOpenbaoException ex) { + Event_ErrorOccured(this, "Secret Server Interface Error: " + ex.Message, 0); + } + } if (string.IsNullOrEmpty(userName)) { diff --git a/mRemoteNG/Language/Language.Designer.cs b/mRemoteNG/Language/Language.Designer.cs index 781f50bba..40797ae05 100644 --- a/mRemoteNG/Language/Language.Designer.cs +++ b/mRemoteNG/Language/Language.Designer.cs @@ -6829,6 +6829,42 @@ namespace mRemoteNG.Resources.Language { } } + /// + /// Looks up a localized string similar to Mount. + /// + internal static string VaultOpenbaoMount { + get { + return ResourceManager.GetString("VaultOpenbaoMount", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Mount where the secret is stored. + /// + internal static string VaultOpenbaoMountDescription { + get { + return ResourceManager.GetString("VaultOpenbaoMountDescription", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Role. + /// + internal static string VaultOpenbaoRole { + get { + return ResourceManager.GetString("VaultOpenbaoRole", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Name or path of the secret. + /// + internal static string VaultOpenbaoRoleDescription { + get { + return ResourceManager.GetString("VaultOpenbaoRoleDescription", resourceCulture); + } + } + /// /// Looks up a localized string similar to Verify:. /// diff --git a/mRemoteNG/Language/Language.cs-CZ.resx b/mRemoteNG/Language/Language.cs-CZ.resx index 242375c49..5af302aa9 100644 --- a/mRemoteNG/Language/Language.cs-CZ.resx +++ b/mRemoteNG/Language/Language.cs-CZ.resx @@ -1878,11 +1878,23 @@ mRemoteNG se nyní ukončí a zahájí instalaci. Kliknutím na již otevřené připojení v seznamu otevře jeho záložku - - Upozornit mě pouze při ukončení několika připojení - + + Upozornit mě pouze při ukončení několika připojení + + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.de.resx b/mRemoteNG/Language/Language.de.resx index cd6224d8e..a1a11719b 100644 --- a/mRemoteNG/Language/Language.de.resx +++ b/mRemoteNG/Language/Language.de.resx @@ -2050,4 +2050,17 @@ Nightly umfasst Alphas, Betas und Release Candidates. WebView2-Erstellung fehlgeschlagen + + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.el.resx b/mRemoteNG/Language/Language.el.resx index 7bd9d12e1..d137f21b4 100644 --- a/mRemoteNG/Language/Language.el.resx +++ b/mRemoteNG/Language/Language.el.resx @@ -273,4 +273,17 @@ Πύλη + + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.es-AR.resx b/mRemoteNG/Language/Language.es-AR.resx index bc08c7cea..115774fa9 100644 --- a/mRemoteNG/Language/Language.es-AR.resx +++ b/mRemoteNG/Language/Language.es-AR.resx @@ -313,4 +313,16 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.es.resx b/mRemoteNG/Language/Language.es.resx index b04613a04..e89d5f72d 100644 --- a/mRemoteNG/Language/Language.es.resx +++ b/mRemoteNG/Language/Language.es.resx @@ -1541,4 +1541,17 @@ mRemoteNG ahora se cerrará y comenzará la instalación. Guardar conexiones al salir + + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.fi-FI.resx b/mRemoteNG/Language/Language.fi-FI.resx index dd6242e58..972b7392e 100644 --- a/mRemoteNG/Language/Language.fi-FI.resx +++ b/mRemoteNG/Language/Language.fi-FI.resx @@ -138,4 +138,17 @@ 65536 Värit (16-bit) + + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.fr.resx b/mRemoteNG/Language/Language.fr.resx index a1c1a5299..6e1ead5cb 100644 --- a/mRemoteNG/Language/Language.fr.resx +++ b/mRemoteNG/Language/Language.fr.resx @@ -2153,4 +2153,17 @@ Le canal nightly inclut les versions alpha, beta et release candidates. Création WebView2 échouée avec une exception + + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.hu.resx b/mRemoteNG/Language/Language.hu.resx index e66fcf125..383a87b4a 100644 --- a/mRemoteNG/Language/Language.hu.resx +++ b/mRemoteNG/Language/Language.hu.resx @@ -333,4 +333,17 @@ Átjáró + + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.it.resx b/mRemoteNG/Language/Language.it.resx index 75256c54f..67a917af2 100644 --- a/mRemoteNG/Language/Language.it.resx +++ b/mRemoteNG/Language/Language.it.resx @@ -1556,4 +1556,20 @@ mRemoteNG verrà chiuso e l'installazione avrà inizio. Salva le connessioni all'uscita + + Vault o Openbao + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.ja-JP.resx b/mRemoteNG/Language/Language.ja-JP.resx index 6121aa5b4..f49c296f7 100644 --- a/mRemoteNG/Language/Language.ja-JP.resx +++ b/mRemoteNG/Language/Language.ja-JP.resx @@ -1716,4 +1716,17 @@ mRemoteNGを終了してインストールを開始します 終了時に保存する + + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.ko-KR.resx b/mRemoteNG/Language/Language.ko-KR.resx index aa28909da..ef615b515 100644 --- a/mRemoteNG/Language/Language.ko-KR.resx +++ b/mRemoteNG/Language/Language.ko-KR.resx @@ -1806,4 +1806,17 @@ mRemoteNG는 이제 종료되고 설치로 시작됩니다. 종료시 연결 저장 + + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.lt.resx b/mRemoteNG/Language/Language.lt.resx index eb884b7db..176bfacf9 100644 --- a/mRemoteNG/Language/Language.lt.resx +++ b/mRemoteNG/Language/Language.lt.resx @@ -228,4 +228,17 @@ Nightly Channel includes Alphas, Betas & Release Candidates. Proxy + + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.nb-NO.resx b/mRemoteNG/Language/Language.nb-NO.resx index cd5f88c5e..afea821ca 100644 --- a/mRemoteNG/Language/Language.nb-NO.resx +++ b/mRemoteNG/Language/Language.nb-NO.resx @@ -2005,4 +2005,17 @@ Nightly-kanalen inkluderer alpha-, beta- og release candidate-versjoner. Lagre tilkoblinger ved avslutning + + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.nl.resx b/mRemoteNG/Language/Language.nl.resx index 740879e57..167e520bc 100644 --- a/mRemoteNG/Language/Language.nl.resx +++ b/mRemoteNG/Language/Language.nl.resx @@ -1588,4 +1588,17 @@ mRemoteNG zal nu worden gesloten en beginnen met de installatie. Sla verbindingen op bij afsluiten + + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.pl.resx b/mRemoteNG/Language/Language.pl.resx index 5756cf8d6..365511d3d 100644 --- a/mRemoteNG/Language/Language.pl.resx +++ b/mRemoteNG/Language/Language.pl.resx @@ -2359,4 +2359,17 @@ Kanał nocny obejmuje wersje alfa, beta i RC (gotowe do wydania). Brama + + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.pt-BR.resx b/mRemoteNG/Language/Language.pt-BR.resx index f14c096d5..5afad580b 100644 --- a/mRemoteNG/Language/Language.pt-BR.resx +++ b/mRemoteNG/Language/Language.pt-BR.resx @@ -369,4 +369,17 @@ Gateway + + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.pt.resx b/mRemoteNG/Language/Language.pt.resx index 36a8cb1f5..ee2a41a08 100644 --- a/mRemoteNG/Language/Language.pt.resx +++ b/mRemoteNG/Language/Language.pt.resx @@ -1554,4 +1554,17 @@ Salvar as ligações à saída + + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.resx b/mRemoteNG/Language/Language.resx index 50ed009ff..8f1458458 100644 --- a/mRemoteNG/Language/Language.resx +++ b/mRemoteNG/Language/Language.resx @@ -2470,4 +2470,16 @@ Nightly Channel includes Alphas, Betas & Release Candidates. Vault or Openbao + + Mount + + + Mount where the secret is stored + + + Role + + + Name or path of the secret + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.ru.resx b/mRemoteNG/Language/Language.ru.resx index 999c82edc..949b645a6 100644 --- a/mRemoteNG/Language/Language.ru.resx +++ b/mRemoteNG/Language/Language.ru.resx @@ -1999,4 +1999,16 @@ mRemoteNG сейчас прекратит работу и начнет проц + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.sv-SE.resx b/mRemoteNG/Language/Language.sv-SE.resx index 50408a066..10c1ce534 100644 --- a/mRemoteNG/Language/Language.sv-SE.resx +++ b/mRemoteNG/Language/Language.sv-SE.resx @@ -2172,4 +2172,17 @@ Nattliga kanalen inkluderar Alfa, Betor & Utgåvokandidater. Nätverksnod (gateway) + + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.ta.resx b/mRemoteNG/Language/Language.ta.resx index 6eb7bce82..78d40e5e5 100644 --- a/mRemoteNG/Language/Language.ta.resx +++ b/mRemoteNG/Language/Language.ta.resx @@ -2416,4 +2416,17 @@ முன்னறிவிப்பு + + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.tr-TR.resx b/mRemoteNG/Language/Language.tr-TR.resx index 7196be5d5..b2293ab54 100644 --- a/mRemoteNG/Language/Language.tr-TR.resx +++ b/mRemoteNG/Language/Language.tr-TR.resx @@ -1628,4 +1628,17 @@ MRemoteNG şimdi kapanacak ve kurulum başlayacak. Çıkışta bağlantıları kaydet + + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.uk.resx b/mRemoteNG/Language/Language.uk.resx index 632fbb952..4933e6657 100644 --- a/mRemoteNG/Language/Language.uk.resx +++ b/mRemoteNG/Language/Language.uk.resx @@ -2002,4 +2002,17 @@ mRemoteNG зараз припинить роботу і почне процес Зберігати з'єднання при виході + + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.zh-CN.resx b/mRemoteNG/Language/Language.zh-CN.resx index 5700271d4..477df2236 100644 --- a/mRemoteNG/Language/Language.zh-CN.resx +++ b/mRemoteNG/Language/Language.zh-CN.resx @@ -2080,4 +2080,17 @@ mRemoteNG 将退出并安装更新。 退出时保存连接配置文件 + + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/Language/Language.zh-TW.resx b/mRemoteNG/Language/Language.zh-TW.resx index 7502972b2..f0fa6a881 100644 --- a/mRemoteNG/Language/Language.zh-TW.resx +++ b/mRemoteNG/Language/Language.zh-TW.resx @@ -1575,4 +1575,17 @@ mRemoteNG 將立即結束並開始安裝。 結束時儲存連線 + + + + + + + + + + + + + \ No newline at end of file diff --git a/mRemoteNG/UI/Controls/ConnectionInfoPropertyGrid/ConnectionInfoPropertyGrid.cs b/mRemoteNG/UI/Controls/ConnectionInfoPropertyGrid/ConnectionInfoPropertyGrid.cs index 241c19d8e..dd916e6f0 100644 --- a/mRemoteNG/UI/Controls/ConnectionInfoPropertyGrid/ConnectionInfoPropertyGrid.cs +++ b/mRemoteNG/UI/Controls/ConnectionInfoPropertyGrid/ConnectionInfoPropertyGrid.cs @@ -238,6 +238,8 @@ namespace mRemoteNG.UI.Controls.ConnectionInfoPropertyGrid if (SelectedConnectionInfo.ExternalCredentialProvider == ExternalCredentialProvider.None) { strHide.Add(nameof(AbstractConnectionRecord.UserViaAPI)); + strHide.Add(nameof(AbstractConnectionRecord.VaultMount)); + strHide.Add(nameof(AbstractConnectionRecord.VaultRole)); } else if (SelectedConnectionInfo.ExternalCredentialProvider == ExternalCredentialProvider.DelineaSecretServer || SelectedConnectionInfo.ExternalCredentialProvider == ExternalCredentialProvider.ClickstudiosPasswordState) @@ -245,8 +247,18 @@ namespace mRemoteNG.UI.Controls.ConnectionInfoPropertyGrid strHide.Add(nameof(AbstractConnectionRecord.Username)); strHide.Add(nameof(AbstractConnectionRecord.Password)); strHide.Add(nameof(AbstractConnectionRecord.Domain)); + strHide.Add(nameof(AbstractConnectionRecord.VaultMount)); + strHide.Add(nameof(AbstractConnectionRecord.VaultRole)); + } + else if(SelectedConnectionInfo.ExternalCredentialProvider == ExternalCredentialProvider.OnePassword) { + strHide.Add(nameof(AbstractConnectionRecord.VaultMount)); + strHide.Add(nameof(AbstractConnectionRecord.VaultRole)); + } + else if (SelectedConnectionInfo.ExternalCredentialProvider == ExternalCredentialProvider.VaultOpenbao) { + strHide.Add(nameof(AbstractConnectionRecord.Username)); + strHide.Add(nameof(AbstractConnectionRecord.Password)); + strHide.Add(nameof(AbstractConnectionRecord.Domain)); } - return strHide; }