diff --git a/tool/tsh/tsh.go b/tool/tsh/tsh.go index 603e723ef5a3a..96104cde3ceed 100644 --- a/tool/tsh/tsh.go +++ b/tool/tsh/tsh.go @@ -1084,6 +1084,10 @@ func Run(ctx context.Context, args []string, opts ...cliOption) error { } } + // Remove HTTPS:// in proxy parameter as https is automatically added + cf.Proxy = strings.TrimPrefix(cf.Proxy, "https://") + cf.Proxy = strings.TrimPrefix(cf.Proxy, "HTTPS://") + // Identity files do not currently contain a proxy address. When loading an // Identity file, a proxy must be passed on the command line as well. if cf.IdentityFileIn != "" && cf.Proxy == "" { diff --git a/tool/tsh/tsh_test.go b/tool/tsh/tsh_test.go index 0f6a2fce8d77f..91dc0a57af36b 100644 --- a/tool/tsh/tsh_test.go +++ b/tool/tsh/tsh_test.go @@ -630,6 +630,45 @@ func TestRelogin(t *testing.T) { require.NoError(t, err) } +// Test when https:// is included in --proxy address +func TestIgnoreHTTPSPrefix(t *testing.T) { + t.Parallel() + + tmpHomePath := t.TempDir() + + connector := mockConnector(t) + + alice, err := types.NewUser("alice@example.com") + require.NoError(t, err) + alice.SetRoles([]string{"access"}) + + authProcess, proxyProcess := makeTestServers(t, + withBootstrap(connector, alice), + ) + + authServer := authProcess.GetAuthServer() + require.NotNil(t, authServer) + + proxyAddr, err := proxyProcess.ProxyWebAddr() + require.NoError(t, err) + + var buf bytes.Buffer + + proxyAddress := "https://" + proxyAddr.String() + err = Run(context.Background(), []string{ + "login", + "--insecure", + "--debug", + "--auth", connector.GetName(), + "--proxy", proxyAddress, + }, setHomePath(tmpHomePath), func(cf *CLIConf) error { + cf.mockSSOLogin = mockSSOLogin(t, authServer, alice) + cf.overrideStderr = &buf + return nil + }) + require.NoError(t, err) +} + func TestSwitchingProxies(t *testing.T) { t.Parallel()