From d92baf234a56fae29db2e4578d2b42aa5aa25e54 Mon Sep 17 00:00:00 2001 From: Jason Ginchereau Date: Thu, 22 Aug 2024 08:31:28 -1000 Subject: [PATCH] Fix checks for local development DNS name --- cs/src/Management/TunnelManagementClient.cs | 4 +++- go/tunnels/manager.go | 8 +++++--- go/tunnels/tunnels.go | 2 +- .../tunnels/management/TunnelManagementClient.java | 3 ++- ts/src/connections/package.json | 4 ++-- ts/src/management/package.json | 2 +- ts/src/management/tunnelManagementHttpClient.ts | 4 +++- 7 files changed, 17 insertions(+), 10 deletions(-) diff --git a/cs/src/Management/TunnelManagementClient.cs b/cs/src/Management/TunnelManagementClient.cs index b5d21325..4d1eb8d0 100644 --- a/cs/src/Management/TunnelManagementClient.cs +++ b/cs/src/Management/TunnelManagementClient.cs @@ -785,7 +785,9 @@ private Uri BuildUri( if (!string.IsNullOrEmpty(clusterId) && baseAddress.HostNameType == UriHostNameType.Dns) { - if (baseAddress.Host != "localhost" && !baseAddress.Host.Contains(".local") && + // tunnels.local.api.visualstudio.com resolves to localhost (for local development). + if (baseAddress.Host != "localhost" && + baseAddress.Host != "tunnels.local.api.visualstudio.com" && !baseAddress.Host.StartsWith($"{clusterId}.")) { // A specific cluster ID was specified (while not running on localhost). diff --git a/go/tunnels/manager.go b/go/tunnels/manager.go index 52546097..7c3c648d 100644 --- a/go/tunnels/manager.go +++ b/go/tunnels/manager.go @@ -108,7 +108,8 @@ func NewManager(userAgents []UserAgent, tp tokenProviderfn, tunnelServiceUrl *ur var client *http.Client if httpHandler == nil { - if strings.Contains(tunnelServiceUrl.Host, "localhost") || strings.Contains(tunnelServiceUrl.Host, ".local") { + // tunnels.local.api.visualstudio.com resolves to localhost (for local development). + if tunnelServiceUrl.Host == "localhost" || tunnelServiceUrl.Host == "tunnels.local.api.visualstudio.com" { client = &http.Client{Transport: &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: true}}} } else { client = &http.Client{} @@ -825,8 +826,9 @@ func (m *Manager) getAccessToken(tunnel *Tunnel, tunnelRequestOptions *TunnelReq func (m *Manager) buildUri(clusterId string, path string, options *TunnelRequestOptions, query string) *url.URL { baseAddress := m.uri if clusterId != "" { - if !strings.HasPrefix(baseAddress.Host, "localhost") && - !strings.Contains(baseAddress.Host, ".local") && + // tunnels.local.api.visualstudio.com resolves to localhost (for local development). + if baseAddress.Host != "localhost" && + baseAddress.Host != "tunnels.local.api.visualstudio.com" && !strings.HasPrefix(baseAddress.Host, clusterId) { // A specific cluster ID was specified (while not running on localhost). // Prepend the cluster ID to the hostname, and optionally strip a global prefix. diff --git a/go/tunnels/tunnels.go b/go/tunnels/tunnels.go index a452b386..5523b501 100644 --- a/go/tunnels/tunnels.go +++ b/go/tunnels/tunnels.go @@ -10,7 +10,7 @@ import ( "github.com/rodaine/table" ) -const PackageVersion = "0.1.11" +const PackageVersion = "0.1.12" func (tunnel *Tunnel) requestObject() (*Tunnel, error) { convertedTunnel := &Tunnel{ diff --git a/java/src/main/java/com/microsoft/tunnels/management/TunnelManagementClient.java b/java/src/main/java/com/microsoft/tunnels/management/TunnelManagementClient.java index fc4f5ffb..8ab1e43e 100644 --- a/java/src/main/java/com/microsoft/tunnels/management/TunnelManagementClient.java +++ b/java/src/main/java/com/microsoft/tunnels/management/TunnelManagementClient.java @@ -300,9 +300,10 @@ private URI buildUri(String clusterId, String host = null; int port = baseAddress.getPort(); + // tunnels.local.api.visualstudio.com resolves to localhost (for local development). if (StringUtils.isNotBlank(clusterId)) { if (!baseAddress.getHost().equals("localhost") - && !baseAddress.getHost().contains(".local") + && !baseAddress.getHost().equals("tunnels.local.api.visualstudio.com") && !baseAddress.getHost().startsWith(clusterId + ".")) { host = (clusterId + "." + baseAddress.getHost()).replace("global.", ""); } else if (baseAddress.getScheme().equals("https") diff --git a/ts/src/connections/package.json b/ts/src/connections/package.json index a2a83472..acc889aa 100644 --- a/ts/src/connections/package.json +++ b/ts/src/connections/package.json @@ -18,8 +18,8 @@ "buffer": "^5.2.1", "debug": "^4.1.1", "vscode-jsonrpc": "^4.0.0", - "@microsoft/dev-tunnels-contracts": ">1.1.32", - "@microsoft/dev-tunnels-management": ">1.1.32", + "@microsoft/dev-tunnels-contracts": ">1.1.37", + "@microsoft/dev-tunnels-management": ">1.1.37", "@microsoft/dev-tunnels-ssh": "^3.11.36", "@microsoft/dev-tunnels-ssh-tcp": "^3.11.36", "uuid": "^3.3.3", diff --git a/ts/src/management/package.json b/ts/src/management/package.json index d1bff272..4b318338 100644 --- a/ts/src/management/package.json +++ b/ts/src/management/package.json @@ -18,7 +18,7 @@ "buffer": "^5.2.1", "debug": "^4.1.1", "vscode-jsonrpc": "^4.0.0", - "@microsoft/dev-tunnels-contracts": ">1.1.32", + "@microsoft/dev-tunnels-contracts": ">1.1.37", "axios": "^1.6.6" } } diff --git a/ts/src/management/tunnelManagementHttpClient.ts b/ts/src/management/tunnelManagementHttpClient.ts index b41abccd..268d318e 100644 --- a/ts/src/management/tunnelManagementHttpClient.ts +++ b/ts/src/management/tunnelManagementHttpClient.ts @@ -875,8 +875,10 @@ export class TunnelManagementHttpClient implements TunnelManagementClient { if (clusterId) { const url = new URL(baseAddress); const portNumber = parseInt(url.port, 10); + + // tunnels.local.api.visualstudio.com resolves to localhost (for local development). if (url.hostname !== 'localhost' && - !url.hostname.includes('.local') && + url.hostname !== 'tunnels.local.api.visualstudio.com' && !url.hostname.startsWith(`${clusterId}.`) ) { // A specific cluster ID was specified (while not running on localhost).