diff --git a/pkg/cli/config/config.go b/pkg/cli/config/config.go index 1e453b02b..3c1fbeb29 100644 --- a/pkg/cli/config/config.go +++ b/pkg/cli/config/config.go @@ -17,9 +17,11 @@ package config import ( "fmt" "maps" + "net/url" "os" "path/filepath" "slices" + "strings" "time" "gopkg.in/yaml.v3" @@ -147,6 +149,16 @@ func Load() (*Config, error) { cfg.Hosts = make(map[string]*HostConfig) } + normalized := make(map[string]*HostConfig, len(cfg.Hosts)) + for host, hc := range cfg.Hosts { + normalized[normalizeHost(host)] = hc + } + cfg.Hosts = normalized + + if cfg.ActiveHost != "" { + cfg.ActiveHost = normalizeHost(cfg.ActiveHost) + } + return &cfg, nil } @@ -172,8 +184,19 @@ func (c *Config) Save() error { return nil } +func normalizeHost(host string) string { + if strings.HasPrefix(host, "http://") || strings.HasPrefix(host, "https://") { + if u, err := url.Parse(host); err == nil { + return u.Host + } + } + + return strings.TrimRight(host, "/") +} + func (c *Config) DefaultHost() (string, *HostConfig, error) { if host := os.Getenv("PROBO_HOST"); host != "" { + host = normalizeHost(host) hc := &HostConfig{} if saved, ok := c.Hosts[host]; ok { *hc = *saved diff --git a/pkg/cmd/browse/browse.go b/pkg/cmd/browse/browse.go index 82ff1c3a4..f70f6ef5b 100644 --- a/pkg/cmd/browse/browse.go +++ b/pkg/cmd/browse/browse.go @@ -18,6 +18,7 @@ import ( "fmt" "os/exec" "runtime" + "strings" "github.com/spf13/cobra" "go.probo.inc/probo/pkg/cmd/cmdutil" @@ -57,11 +58,15 @@ func NewCmdBrowse(f *cmdutil.Factory) *cobra.Command { flagOrg = hc.Organization } + if !strings.HasPrefix(host, "http://") && !strings.HasPrefix(host, "https://") { + host = "https://" + host + } + var url string if flagOrg != "" { - url = fmt.Sprintf("https://%s/organizations/%s", host, flagOrg) + url = fmt.Sprintf("%s/organizations/%s", host, flagOrg) } else { - url = fmt.Sprintf("https://%s", host) + url = host } if flagNoBrowser || f.IOStreams.ForceNonInteractive {