diff --git a/package/WindowsManaged/Actions/CustomActions.cs b/package/WindowsManaged/Actions/CustomActions.cs index 20bf703a0..4a0b71030 100644 --- a/package/WindowsManaged/Actions/CustomActions.cs +++ b/package/WindowsManaged/Actions/CustomActions.cs @@ -328,6 +328,25 @@ public static ActionResult ConfigureNgrokListeners(Session session) return ExecuteCommand(session, command); } + [CustomAction] + public static ActionResult ConfigureAgentTunnel(Session session) + { + string command; + + try + { + command = $"$AgentTunnel = New-DGatewayAgentTunnelConfig -Enabled -ListenPort {session.Get(GatewayProperties.agentTunnelPort)}; Set-DGatewayConfig -AgentTunnel $AgentTunnel"; + command = FormatPowerShellCommand(session, command); + } + catch (Exception e) + { + session.Log($"command {nameof(ConfigureAgentTunnel)} execution failure: {e}"); + return ActionResult.Failure; + } + + return ExecuteCommand(session, command); + } + [CustomAction] public static ActionResult ConfigurePublicKey(Session session) { diff --git a/package/WindowsManaged/Actions/GatewayActions.cs b/package/WindowsManaged/Actions/GatewayActions.cs index 015645418..2cfbafdd0 100644 --- a/package/WindowsManaged/Actions/GatewayActions.cs +++ b/package/WindowsManaged/Actions/GatewayActions.cs @@ -327,13 +327,27 @@ internal static class GatewayActions }, new[] { GatewayProperties.configureNgrok.Equal(true) }); + private static readonly ElevatedManagedAction configureAgentTunnel = BuildConfigureAction( + $"CA.{nameof(configureAgentTunnel)}", + CustomActions.ConfigureAgentTunnel, + When.After, new Step(configureNgrokListeners.Id), + new IWixProperty[] + { + GatewayProperties.agentTunnelPort, + }, + new[] + { + GatewayProperties.firstInstall.Equal(true), + GatewayProperties.enableAgentTunnel.Equal(true) + }); + /// /// Configure the certificate using PowerShell /// private static readonly ElevatedManagedAction configureCertificate = BuildConfigureAction( $"CA.{nameof(configureCertificate)}", CustomActions.ConfigureCertificate, - When.After, new Step(configureNgrokListeners.Id), + When.After, new Step(configureAgentTunnel.Id), new IWixProperty[] { GatewayProperties.certificateMode, @@ -534,9 +548,10 @@ private static ElevatedManagedAction BuildConfigureAction( configureInit, configureAccessUri, configureListeners, + configureNgrokListeners, + configureAgentTunnel, configureCertificate, setCertificatePrivateKeyPermissions, - configureNgrokListeners, configurePublicKey, configureWebApp, configureWebAppUser, diff --git a/package/WindowsManaged/Dialogs/CustomizeDialog.Designer.cs b/package/WindowsManaged/Dialogs/CustomizeDialog.Designer.cs index fd4d29c14..310ede92e 100644 --- a/package/WindowsManaged/Dialogs/CustomizeDialog.Designer.cs +++ b/package/WindowsManaged/Dialogs/CustomizeDialog.Designer.cs @@ -38,6 +38,10 @@ private void InitializeComponent() this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); this.gbConfigure = new System.Windows.Forms.GroupBox(); this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.chkEnableAgentTunnel = new System.Windows.Forms.CheckBox(); + this.flowAgentTunnelPort = new System.Windows.Forms.FlowLayoutPanel(); + this.lblAgentTunnelPort = new System.Windows.Forms.Label(); + this.txtAgentTunnelPort = new System.Windows.Forms.TextBox(); this.chkWebApp = new System.Windows.Forms.CheckBox(); this.chkGenerateCertificate = new System.Windows.Forms.CheckBox(); this.chkGenerateKeyPair = new System.Windows.Forms.CheckBox(); @@ -62,6 +66,7 @@ private void InitializeComponent() this.tableLayoutPanel2.SuspendLayout(); this.gbConfigure.SuspendLayout(); this.tableLayoutPanel3.SuspendLayout(); + this.flowAgentTunnelPort.SuspendLayout(); this.topPanel.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.banner)).BeginInit(); this.bottomPanel.SuspendLayout(); @@ -130,15 +135,18 @@ private void InitializeComponent() this.tableLayoutPanel3.ColumnCount = 2; this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel3.Controls.Add(this.chkWebApp, 0, 2); - this.tableLayoutPanel3.Controls.Add(this.chkGenerateCertificate, 0, 3); - this.tableLayoutPanel3.Controls.Add(this.chkGenerateKeyPair, 0, 4); + this.tableLayoutPanel3.Controls.Add(this.chkEnableAgentTunnel, 0, 1); + this.tableLayoutPanel3.Controls.Add(this.flowAgentTunnelPort, 0, 2); + this.tableLayoutPanel3.Controls.Add(this.chkWebApp, 0, 3); + this.tableLayoutPanel3.Controls.Add(this.chkGenerateCertificate, 0, 4); + this.tableLayoutPanel3.Controls.Add(this.chkGenerateKeyPair, 0, 5); this.tableLayoutPanel3.Controls.Add(this.chkConfigureNgrok, 0, 0); this.tableLayoutPanel3.Controls.Add(this.lnkNgrok, 1, 0); this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 16); this.tableLayoutPanel3.Name = "tableLayoutPanel3"; - this.tableLayoutPanel3.RowCount = 6; + this.tableLayoutPanel3.RowCount = 7; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle()); @@ -147,6 +155,53 @@ private void InitializeComponent() this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tableLayoutPanel3.Size = new System.Drawing.Size(458, 146); this.tableLayoutPanel3.TabIndex = 0; + // + // chkEnableAgentTunnel + // + this.chkEnableAgentTunnel.AutoSize = true; + this.tableLayoutPanel3.SetColumnSpan(this.chkEnableAgentTunnel, 2); + this.chkEnableAgentTunnel.Dock = System.Windows.Forms.DockStyle.Fill; + this.chkEnableAgentTunnel.Enabled = false; + this.chkEnableAgentTunnel.Location = new System.Drawing.Point(10, 26); + this.chkEnableAgentTunnel.Margin = new System.Windows.Forms.Padding(10, 3, 3, 3); + this.chkEnableAgentTunnel.Name = "chkEnableAgentTunnel"; + this.chkEnableAgentTunnel.Size = new System.Drawing.Size(445, 17); + this.chkEnableAgentTunnel.TabIndex = 2; + this.chkEnableAgentTunnel.Text = "[EnableAgentTunnel]"; + this.chkEnableAgentTunnel.UseVisualStyleBackColor = true; + this.chkEnableAgentTunnel.CheckedChanged += new System.EventHandler(this.chkEnableAgentTunnel_CheckedChanged); + // + // flowAgentTunnelPort + // + this.flowAgentTunnelPort.AutoSize = true; + this.tableLayoutPanel3.SetColumnSpan(this.flowAgentTunnelPort, 2); + this.flowAgentTunnelPort.Controls.Add(this.lblAgentTunnelPort); + this.flowAgentTunnelPort.Controls.Add(this.txtAgentTunnelPort); + this.flowAgentTunnelPort.Dock = System.Windows.Forms.DockStyle.Fill; + this.flowAgentTunnelPort.Location = new System.Drawing.Point(30, 46); + this.flowAgentTunnelPort.Margin = new System.Windows.Forms.Padding(30, 0, 3, 0); + this.flowAgentTunnelPort.Name = "flowAgentTunnelPort"; + this.flowAgentTunnelPort.Size = new System.Drawing.Size(425, 26); + this.flowAgentTunnelPort.TabIndex = 3; + this.flowAgentTunnelPort.WrapContents = false; + // + // lblAgentTunnelPort + // + this.lblAgentTunnelPort.AutoSize = true; + this.lblAgentTunnelPort.Location = new System.Drawing.Point(0, 6); + this.lblAgentTunnelPort.Margin = new System.Windows.Forms.Padding(0, 6, 3, 0); + this.lblAgentTunnelPort.Name = "lblAgentTunnelPort"; + this.lblAgentTunnelPort.Size = new System.Drawing.Size(54, 13); + this.lblAgentTunnelPort.TabIndex = 0; + this.lblAgentTunnelPort.Text = "[AgentTunnelUdpPort]"; + // + // txtAgentTunnelPort + // + this.txtAgentTunnelPort.Enabled = false; + this.txtAgentTunnelPort.Location = new System.Drawing.Point(60, 3); + this.txtAgentTunnelPort.Name = "txtAgentTunnelPort"; + this.txtAgentTunnelPort.Size = new System.Drawing.Size(50, 20); + this.txtAgentTunnelPort.TabIndex = 1; // // chkWebApp // @@ -154,11 +209,11 @@ private void InitializeComponent() this.tableLayoutPanel3.SetColumnSpan(this.chkWebApp, 2); this.chkWebApp.Dock = System.Windows.Forms.DockStyle.Fill; this.chkWebApp.Enabled = false; - this.chkWebApp.Location = new System.Drawing.Point(10, 26); + this.chkWebApp.Location = new System.Drawing.Point(10, 75); this.chkWebApp.Margin = new System.Windows.Forms.Padding(10, 3, 3, 3); this.chkWebApp.Name = "chkWebApp"; this.chkWebApp.Size = new System.Drawing.Size(445, 17); - this.chkWebApp.TabIndex = 2; + this.chkWebApp.TabIndex = 4; this.chkWebApp.Text = "[EnableTheGatewayWebInterface]"; this.chkWebApp.UseVisualStyleBackColor = true; this.chkWebApp.CheckedChanged += new System.EventHandler(this.chkWebApp_CheckedChanged); @@ -169,11 +224,11 @@ private void InitializeComponent() this.tableLayoutPanel3.SetColumnSpan(this.chkGenerateCertificate, 2); this.chkGenerateCertificate.Dock = System.Windows.Forms.DockStyle.Fill; this.chkGenerateCertificate.Enabled = false; - this.chkGenerateCertificate.Location = new System.Drawing.Point(30, 49); + this.chkGenerateCertificate.Location = new System.Drawing.Point(30, 98); this.chkGenerateCertificate.Margin = new System.Windows.Forms.Padding(30, 3, 3, 3); this.chkGenerateCertificate.Name = "chkGenerateCertificate"; this.chkGenerateCertificate.Size = new System.Drawing.Size(425, 17); - this.chkGenerateCertificate.TabIndex = 3; + this.chkGenerateCertificate.TabIndex = 5; this.chkGenerateCertificate.Text = "[GenerateASelfSignedHttpsCertificate]"; this.chkGenerateCertificate.UseVisualStyleBackColor = true; // @@ -183,11 +238,11 @@ private void InitializeComponent() this.tableLayoutPanel3.SetColumnSpan(this.chkGenerateKeyPair, 2); this.chkGenerateKeyPair.Dock = System.Windows.Forms.DockStyle.Fill; this.chkGenerateKeyPair.Enabled = false; - this.chkGenerateKeyPair.Location = new System.Drawing.Point(30, 72); + this.chkGenerateKeyPair.Location = new System.Drawing.Point(30, 121); this.chkGenerateKeyPair.Margin = new System.Windows.Forms.Padding(30, 3, 3, 3); this.chkGenerateKeyPair.Name = "chkGenerateKeyPair"; this.chkGenerateKeyPair.Size = new System.Drawing.Size(425, 17); - this.chkGenerateKeyPair.TabIndex = 4; + this.chkGenerateKeyPair.TabIndex = 6; this.chkGenerateKeyPair.Text = "[GenerateEncryptionKeys]"; this.chkGenerateKeyPair.UseVisualStyleBackColor = true; // @@ -405,6 +460,8 @@ private void InitializeComponent() this.gbConfigure.ResumeLayout(false); this.tableLayoutPanel3.ResumeLayout(false); this.tableLayoutPanel3.PerformLayout(); + this.flowAgentTunnelPort.ResumeLayout(false); + this.flowAgentTunnelPort.PerformLayout(); this.topPanel.ResumeLayout(false); this.topPanel.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.banner)).EndInit(); @@ -432,6 +489,10 @@ private void InitializeComponent() private System.Windows.Forms.Panel topBorder; private System.Windows.Forms.Panel middlePanel; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; + private System.Windows.Forms.CheckBox chkEnableAgentTunnel; + private System.Windows.Forms.FlowLayoutPanel flowAgentTunnelPort; + private System.Windows.Forms.Label lblAgentTunnelPort; + private System.Windows.Forms.TextBox txtAgentTunnelPort; private System.Windows.Forms.CheckBox chkWebApp; private System.Windows.Forms.GroupBox gbConfigure; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; diff --git a/package/WindowsManaged/Dialogs/CustomizeDialog.cs b/package/WindowsManaged/Dialogs/CustomizeDialog.cs index 937d949ba..a276c3c31 100644 --- a/package/WindowsManaged/Dialogs/CustomizeDialog.cs +++ b/package/WindowsManaged/Dialogs/CustomizeDialog.cs @@ -25,6 +25,8 @@ public override void FromProperties() { GatewayProperties properties = new(this.Runtime.Session); this.cmbConfigure.SelectedIndex = properties.ConfigureGateway ? 0 : 1; + this.chkEnableAgentTunnel.Checked = properties.EnableAgentTunnel; + this.txtAgentTunnelPort.Text = properties.AgentTunnelPort.ToString(); this.chkConfigureNgrok.Checked = properties.ConfigureNgrok; this.chkWebApp.Checked = properties.ConfigureWebApp; this.chkGenerateCertificate.Checked = properties.GenerateCertificate; @@ -33,12 +35,28 @@ public override void FromProperties() this.SetControlStates(); } + public override bool DoValidate() + { + if (this.ConfigureNow && this.chkEnableAgentTunnel.Checked && + (string.IsNullOrWhiteSpace(this.txtAgentTunnelPort.Text) || !Validation.IsValidPort(this.txtAgentTunnelPort.Text, out _))) + { + ShowValidationError(I18n(Strings.YouMustEnterAValidPort)); + return false; + } + + return true; + } + public override bool ToProperties() { new GatewayProperties(this.Runtime.Session) { ConfigureGateway = this.ConfigureNow, ConfigureNgrok = this.ConfigureNow && this.chkConfigureNgrok.Checked, + EnableAgentTunnel = this.ConfigureNow && this.chkEnableAgentTunnel.Checked, + AgentTunnelPort = Validation.IsValidPort(this.txtAgentTunnelPort.Text, out uint agentTunnelPort) + ? agentTunnelPort + : GatewayProperties.agentTunnelPort.Default, ConfigureWebApp = this.ConfigureNow && this.chkWebApp.Checked, GenerateCertificate = this.ConfigureNow && this.chkGenerateCertificate.Checked && !this.chkConfigureNgrok.Checked, GenerateKeyPair = this.ConfigureNow && this.chkGenerateKeyPair.Checked, @@ -73,6 +91,8 @@ public override void OnLoad(object sender, EventArgs e) private void SetControlStates() { this.chkConfigureNgrok.Enabled = this.ConfigureNow; + this.chkEnableAgentTunnel.Enabled = this.ConfigureNow; + this.txtAgentTunnelPort.Enabled = this.chkEnableAgentTunnel.Checked && this.chkEnableAgentTunnel.Enabled; this.chkWebApp.Enabled = this.ConfigureNow; this.chkGenerateCertificate.Enabled = this.chkWebApp.Checked && this.chkWebApp.Enabled && !this.chkConfigureNgrok.Checked; @@ -117,6 +137,11 @@ private void chkConfigureNgrok_CheckedChanged(object sender, EventArgs e) } } + private void chkEnableAgentTunnel_CheckedChanged(object sender, EventArgs e) + { + this.SetControlStates(); + } + private void cmbConfigure_SelectedIndexChanged(object sender, EventArgs e) { this.SetControlStates(); diff --git a/package/WindowsManaged/Dialogs/SummaryDialog.cs b/package/WindowsManaged/Dialogs/SummaryDialog.cs index f0acf2983..4ff49e5ad 100644 --- a/package/WindowsManaged/Dialogs/SummaryDialog.cs +++ b/package/WindowsManaged/Dialogs/SummaryDialog.cs @@ -168,6 +168,17 @@ private void Init() => this.Groups = new[] } }, + new PropertyGroup() + { + Name = Strings.Group_AgentTunnel, + If = p => p.EnableAgentTunnel, + Properties = new IProperty[] + { + new InstallerProperty(this.MsiRuntime, GatewayProperties.enableAgentTunnel), + new InstallerProperty(this.MsiRuntime, GatewayProperties.agentTunnelPort) + } + }, + new PropertyGroup() { Name = Strings.Group_EncryptionKeys, diff --git a/package/WindowsManaged/Properties/GatewayProperties.g.cs b/package/WindowsManaged/Properties/GatewayProperties.g.cs index d4f114b6b..520997ee0 100644 --- a/package/WindowsManaged/Properties/GatewayProperties.g.cs +++ b/package/WindowsManaged/Properties/GatewayProperties.g.cs @@ -518,6 +518,63 @@ public Boolean ConfigureGateway } + internal static readonly WixProperty enableAgentTunnel = new() + { + Id = "P.ENABLEAGENTTUNNEL", + Default = false, + Name = "EnableAgentTunnel", + Secure = true, + Hidden = false, + Public = true, + Encode = false, + }; + + /// `true` to enable Agent Tunnel + public Boolean EnableAgentTunnel + { + get + { + string stringValue = this.FnGetPropValue(enableAgentTunnel.Id); + return WixProperties.GetPropertyValue(stringValue); + } + set + { + if (this.runtimeSession is not null) + { + this.runtimeSession.Set(enableAgentTunnel, value); + } + } + } + + + internal static readonly WixProperty agentTunnelPort = new() + { + Id = "P.AGENTTUNNELPORT", + Default = 4433, + Name = "AgentTunnelPort", + Secure = true, + Hidden = false, + Public = true, + Encode = false, + }; + + public UInt32 AgentTunnelPort + { + get + { + string stringValue = this.FnGetPropValue(agentTunnelPort.Id); + return WixProperties.GetPropertyValue(stringValue); + } + set + { + if (this.runtimeSession is not null) + { + this.runtimeSession.Set(agentTunnelPort, value); + } + } + } + + internal static readonly WixProperty hasPowerShell = new() { Id = "P.HasPowerShell", @@ -1522,6 +1579,12 @@ public Boolean Maintenance configureGateway, + enableAgentTunnel, + + + agentTunnelPort, + + hasPowerShell, diff --git a/package/WindowsManaged/Properties/GatewayProperties.g.tt b/package/WindowsManaged/Properties/GatewayProperties.g.tt index 52a0916fd..0a6c399d3 100644 --- a/package/WindowsManaged/Properties/GatewayProperties.g.tt +++ b/package/WindowsManaged/Properties/GatewayProperties.g.tt @@ -271,6 +271,8 @@ namespace DevolutionsGateway.Properties new PropertyDefinition("DevolutionsServerCertificateExceptions", "", isPublic: true, hidden: false, secure: true, encode: true), new PropertyDefinition("ConfigureGateway", false, secure: false, comment: "`true` to configure the Gateway interactively"), + new PropertyDefinition("EnableAgentTunnel", false, comment: "`true` to enable Agent Tunnel"), + new PropertyDefinition("AgentTunnelPort", 4433), new PropertyDefinition("HasPowerShell", false, isPublic: false, secure: false), new PropertyDefinition("HttpListenerHost", "0.0.0.0"), diff --git a/package/WindowsManaged/Resources/DevolutionsGateway_de-de.wxl b/package/WindowsManaged/Resources/DevolutionsGateway_de-de.wxl index b702f9398..a44fc17fd 100644 --- a/package/WindowsManaged/Resources/DevolutionsGateway_de-de.wxl +++ b/package/WindowsManaged/Resources/DevolutionsGateway_de-de.wxl @@ -49,6 +49,7 @@ Konfigurationsprobleme anzeigen Protokoll anzeigen + Agent Tunnel Zertifikat Verschlüsselungsschlüssel Externer Zugriff @@ -94,6 +95,7 @@ Vertrauenswürdige Herausgeber Zugriffs-URI + UDP-Port Authentifizierungsmodus Zertifikatsdatei Zertifikatort @@ -104,6 +106,7 @@ Zertifikatspeicher Devolutions Server-URL Verzeichnis + Aktiviert HTTP-Listener Ein neues selbstsigniertes Zertifikat wird generiert Ein neues Schlüsselpaar wird generiert @@ -152,12 +155,14 @@ Wenn sie minimiert erscheint, aktivieren Sie sie über die Taskleiste. Willkommen beim Setup-Assistenten für [ProductName] 20[ProductVersion] + UDP-Port Konfigurationsoptionen Gateway-Installation konfigurieren Wählen Sie, wie [ProductName] konfiguriert werden soll. Der Setup-Assistent generiert eine Konfiguration, die Sie später aktualisieren können; oder Sie können die Konfigurationsinformationen jetzt angeben. Konfiguration Internetzugriff über ngrok aktivieren + Agent Tunnel aktivieren Gateway-Weboberfläche aktivieren Selbstsigniertes HTTPS-Zertifikat generieren Verschlüsselungsschlüssel generieren diff --git a/package/WindowsManaged/Resources/DevolutionsGateway_en-us.wxl b/package/WindowsManaged/Resources/DevolutionsGateway_en-us.wxl index 1526baa82..dc78431e7 100644 --- a/package/WindowsManaged/Resources/DevolutionsGateway_en-us.wxl +++ b/package/WindowsManaged/Resources/DevolutionsGateway_en-us.wxl @@ -49,6 +49,7 @@ View configuration issues View Log + Agent Tunnel Certificate Encryption Keys External Access @@ -94,6 +95,7 @@ Trusted Publishers Access URI + UDP Port Authentication Mode Certificate File Certificate Location @@ -104,6 +106,7 @@ Certificate Store Devolutions Server URL Directory + Enabled HTTP Listener A new self-signed certificate will be generated A new key pair will be generated @@ -152,12 +155,14 @@ If it appears minimized then active it from the taskbar. Welcome to the [ProductName] 20[ProductVersion] Setup Wizard + UDP port Configuration Options Configure the Gateway installation Choose how to configure [ProductName]. The Setup Wizard will generate a configuration which you can update later; or you can provide configuration information now. Configuration Enable access over the internet using ngrok + Enable Agent Tunnel Enable the Gateway web interface Generate a self-signed HTTPS certificate Generate encryption keys diff --git a/package/WindowsManaged/Resources/DevolutionsGateway_fr-fr.wxl b/package/WindowsManaged/Resources/DevolutionsGateway_fr-fr.wxl index f8bd3a47d..a5e511885 100644 --- a/package/WindowsManaged/Resources/DevolutionsGateway_fr-fr.wxl +++ b/package/WindowsManaged/Resources/DevolutionsGateway_fr-fr.wxl @@ -84,6 +84,7 @@ Vous devez fournir un nom d'hôte valide Vous devez sélectionner un certificat dans le magasin de certificats du système + Agent Tunnel Certificat Clés de chiffrement Accès externe @@ -94,6 +95,7 @@ Application Web URI d'accès + Port UDP Mode authentification Fichier de certificat Emplacement du certificat @@ -104,6 +106,7 @@ Magasin de certificats URL du Devolutions Server Répertoire + Activé Écouteur HTTP Un nouveau certificat autosigné sera généré Une nouvelle paire de clés sera générée @@ -170,12 +173,14 @@ Si elle apparaît en mode réduit, alors vous devez l'activer à partir de la ba Bienvenue dans l'assistant d'installation de [ProductName] 20[ProductVersion] + Port UDP Options de configuration Configurer l'installation de Gateway Veuillez choisir comment configurer [ProductName]. L'assistant d'installation va générer une configuration minimale à finaliser plus tard, ou vous pouvez compléter la configuration maintenant. Configuration Autoriser l'accès Web via ngrok. + Activer Agent Tunnel Activer l'interface Web de Gateway Générer un certificat HTTPS autosigné Générer des clés de chiffrement diff --git a/package/WindowsManaged/Resources/Strings.g.cs b/package/WindowsManaged/Resources/Strings.g.cs index 41cb34cc9..2462e9892 100644 --- a/package/WindowsManaged/Resources/Strings.g.cs +++ b/package/WindowsManaged/Resources/Strings.g.cs @@ -197,6 +197,10 @@ public static string I18n(this MsiRuntime runtime, string res) /// public const string Group_Ngrok = "Group_Ngrok"; /// + /// Agent Tunnel + /// + public const string Group_AgentTunnel = "Group_AgentTunnel"; + /// /// External Access /// public const string Group_ExternalAccess = "Group_ExternalAccess"; @@ -417,6 +421,14 @@ public static string I18n(this MsiRuntime runtime, string res) /// public const string Property_NgrokRemoteAddress = "Property_NgrokRemoteAddress"; /// + /// Enabled + /// + public const string Property_EnableAgentTunnel = "Property_EnableAgentTunnel"; + /// + /// UDP Port + /// + public const string Property_AgentTunnelPort = "Property_AgentTunnelPort"; + /// /// Directory /// public const string Property_Directory = "Property_Directory"; @@ -577,6 +589,14 @@ public static string I18n(this MsiRuntime runtime, string res) /// public const string EnableAccessOverTheInternetUsingNgrok = "EnableAccessOverTheInternetUsingNgrok"; /// + /// Enable Agent Tunnel + /// + public const string EnableAgentTunnel = "EnableAgentTunnel"; + /// + /// UDP port + /// + public const string AgentTunnelUdpPort = "AgentTunnelUdpPort"; + /// /// Enable the Gateway web interface /// public const string EnableTheGatewayWebInterface = "EnableTheGatewayWebInterface"; diff --git a/package/WindowsManaged/Resources/Strings_de-DE.json b/package/WindowsManaged/Resources/Strings_de-DE.json index 2c6817dc2..2103db794 100644 --- a/package/WindowsManaged/Resources/Strings_de-DE.json +++ b/package/WindowsManaged/Resources/Strings_de-DE.json @@ -198,6 +198,10 @@ "id": "Group_Ngrok", "text": "ngrok" }, + { + "id": "Group_AgentTunnel", + "text": "Agent Tunnel" + }, { "id": "Group_ExternalAccess", "text": "Externer Zugriff" @@ -422,6 +426,14 @@ "id": "Property_NgrokRemoteAddress", "text": "TCP-Adresse" }, + { + "id": "Property_EnableAgentTunnel", + "text": "Aktiviert" + }, + { + "id": "Property_AgentTunnelPort", + "text": "UDP-Port" + }, { "id": "Property_Directory", "text": "Verzeichnis" @@ -602,6 +614,14 @@ "id": "EnableAccessOverTheInternetUsingNgrok", "text": "Internetzugriff über ngrok aktivieren" }, + { + "id": "EnableAgentTunnel", + "text": "Agent Tunnel aktivieren" + }, + { + "id": "AgentTunnelUdpPort", + "text": "UDP-Port" + }, { "id": "EnableTheGatewayWebInterface", "text": "Gateway-Weboberfläche aktivieren" diff --git a/package/WindowsManaged/Resources/Strings_en-US.json b/package/WindowsManaged/Resources/Strings_en-US.json index 0b6c59f42..fb6ffec26 100644 --- a/package/WindowsManaged/Resources/Strings_en-US.json +++ b/package/WindowsManaged/Resources/Strings_en-US.json @@ -198,6 +198,10 @@ "id": "Group_Ngrok", "text": "ngrok" }, + { + "id": "Group_AgentTunnel", + "text": "Agent Tunnel" + }, { "id": "Group_ExternalAccess", "text": "External Access" @@ -422,6 +426,14 @@ "id": "Property_NgrokRemoteAddress", "text": "TCP Address" }, + { + "id": "Property_EnableAgentTunnel", + "text": "Enabled" + }, + { + "id": "Property_AgentTunnelPort", + "text": "UDP Port" + }, { "id": "Property_Directory", "text": "Directory" @@ -602,6 +614,14 @@ "id": "EnableAccessOverTheInternetUsingNgrok", "text": "Enable access over the internet using ngrok" }, + { + "id": "EnableAgentTunnel", + "text": "Enable Agent Tunnel" + }, + { + "id": "AgentTunnelUdpPort", + "text": "UDP port" + }, { "id": "EnableTheGatewayWebInterface", "text": "Enable the Gateway web interface" diff --git a/package/WindowsManaged/Resources/Strings_fr-FR.json b/package/WindowsManaged/Resources/Strings_fr-FR.json index 06a1132c5..c73ab906e 100644 --- a/package/WindowsManaged/Resources/Strings_fr-FR.json +++ b/package/WindowsManaged/Resources/Strings_fr-FR.json @@ -337,6 +337,10 @@ "id": "Group_Ngrok", "text": "ngrok" }, + { + "id": "Group_AgentTunnel", + "text": "Agent Tunnel" + }, { "id": "Group_ExternalAccess", "text": "Accès externe" @@ -435,6 +439,14 @@ "id": "Property_NgrokRemoteAddress", "text": "Adresse TCP" }, + { + "id": "Property_EnableAgentTunnel", + "text": "Activé" + }, + { + "id": "Property_AgentTunnelPort", + "text": "Port UDP" + }, { "id": "Property_Directory", "text": "Répertoire" @@ -663,6 +675,14 @@ "id": "EnableAccessOverTheInternetUsingNgrok", "text": "Autoriser l'accès Web via ngrok." }, + { + "id": "EnableAgentTunnel", + "text": "Activer Agent Tunnel" + }, + { + "id": "AgentTunnelUdpPort", + "text": "Port UDP" + }, { "id": "EnableTheGatewayWebInterface", "text": "Activer l'interface Web de Gateway"