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"