diff --git a/tool/tsh/tsh.go b/tool/tsh/tsh.go index ee4857a127140..bb433552c4501 100644 --- a/tool/tsh/tsh.go +++ b/tool/tsh/tsh.go @@ -1012,6 +1012,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://") + // prevent Kingpin from calling os.Exit(), we want to handle errors ourselves. // shouldTerminate will be checked after app.Parse() call. var shouldTerminate *int diff --git a/tool/tsh/tsh_test.go b/tool/tsh/tsh_test.go index 96a7e6bfd5834..bfb4a4d75885d 100644 --- a/tool/tsh/tsh_test.go +++ b/tool/tsh/tsh_test.go @@ -4794,3 +4794,42 @@ func TestMakeProfileInfo_NoInternalLogins(t *testing.T) { }) } } + +// 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) +}