Skip to content

Commit 8674492

Browse files
committed
fix: unify credential resolution across all commands
- Add resolveBaseURL() and resolveAPIKey() helpers to config.go - Update exec, cp, and push commands to use shared helpers - All commands now consistently use: flag > env > config file - WebSocket commands no longer bypass cli.yaml configuration
1 parent 672a55a commit 8674492

File tree

4 files changed

+40
-31
lines changed

4 files changed

+40
-31
lines changed

pkg/cmd/config.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/knadh/koanf/parsers/yaml"
88
"github.com/knadh/koanf/providers/file"
99
"github.com/knadh/koanf/v2"
10+
"github.com/urfave/cli/v3"
1011
)
1112

1213
// CLIConfig holds CLI configuration loaded from cli.yaml
@@ -44,3 +45,32 @@ func loadCLIConfig() *CLIConfig {
4445
_ = k.Unmarshal("", cfg)
4546
return cfg
4647
}
48+
49+
// resolveBaseURL returns the effective base URL with precedence:
50+
// CLI flag > env var > config file > default.
51+
func resolveBaseURL(cmd *cli.Command) string {
52+
if u := cmd.Root().String("base-url"); u != "" {
53+
return u
54+
}
55+
if u := os.Getenv("HYPEMAN_BASE_URL"); u != "" {
56+
return u
57+
}
58+
cfg := loadCLIConfig()
59+
if cfg.BaseURL != "" {
60+
return cfg.BaseURL
61+
}
62+
return "http://localhost:8080"
63+
}
64+
65+
// resolveAPIKey returns the effective API key with precedence:
66+
// env var > config file.
67+
func resolveAPIKey() string {
68+
if k := os.Getenv("HYPEMAN_BEARER_TOKEN"); k != "" {
69+
return k
70+
}
71+
if k := os.Getenv("HYPEMAN_API_KEY"); k != "" {
72+
return k
73+
}
74+
cfg := loadCLIConfig()
75+
return cfg.APIKey
76+
}

pkg/cmd/cp.go

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -145,18 +145,12 @@ func handleCp(ctx context.Context, cmd *cli.Command) error {
145145
return err
146146
}
147147

148-
// Get base URL and API key
149-
baseURL := cmd.Root().String("base-url")
150-
if baseURL == "" {
151-
baseURL = os.Getenv("HYPEMAN_BASE_URL")
152-
}
153-
if baseURL == "" {
154-
baseURL = "http://localhost:8080"
155-
}
148+
// Get base URL and API key (flag > env > config file)
149+
baseURL := resolveBaseURL(cmd)
156150

157-
apiKey := os.Getenv("HYPEMAN_API_KEY")
151+
apiKey := resolveAPIKey()
158152
if apiKey == "" {
159-
return fmt.Errorf("HYPEMAN_API_KEY environment variable required")
153+
return fmt.Errorf("API key required: set HYPEMAN_API_KEY or configure api_key in ~/.config/hypeman/cli.yaml")
160154
}
161155

162156
archive := cmd.Bool("archive")

pkg/cmd/exec.go

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -145,18 +145,12 @@ func handleExec(ctx context.Context, cmd *cli.Command) error {
145145
return fmt.Errorf("failed to marshal request: %w", err)
146146
}
147147

148-
// Get base URL and API key
149-
baseURL := cmd.Root().String("base-url")
150-
if baseURL == "" {
151-
baseURL = os.Getenv("HYPEMAN_BASE_URL")
152-
}
153-
if baseURL == "" {
154-
baseURL = "http://localhost:8080"
155-
}
148+
// Get base URL and API key (flag > env > config file)
149+
baseURL := resolveBaseURL(cmd)
156150

157-
apiKey := os.Getenv("HYPEMAN_API_KEY")
151+
apiKey := resolveAPIKey()
158152
if apiKey == "" {
159-
return fmt.Errorf("HYPEMAN_API_KEY environment variable required")
153+
return fmt.Errorf("API key required: set HYPEMAN_API_KEY or configure api_key in ~/.config/hypeman/cli.yaml")
160154
}
161155

162156
// Build WebSocket URL

pkg/cmd/push.go

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,7 @@ func handlePush(ctx context.Context, cmd *cli.Command) error {
3535
targetName = args[1]
3636
}
3737

38-
baseURL := cmd.String("base-url")
39-
if baseURL == "" {
40-
baseURL = os.Getenv("HYPEMAN_BASE_URL")
41-
}
42-
if baseURL == "" {
43-
baseURL = "http://localhost:8080"
44-
}
38+
baseURL := resolveBaseURL(cmd)
4539

4640
parsedURL, err := url.Parse(baseURL)
4741
if err != nil {
@@ -71,10 +65,7 @@ func handlePush(ctx context.Context, cmd *cli.Command) error {
7165
return fmt.Errorf("invalid target: %w", err)
7266
}
7367

74-
token := os.Getenv("HYPEMAN_BEARER_TOKEN")
75-
if token == "" {
76-
token = os.Getenv("HYPEMAN_API_KEY")
77-
}
68+
token := resolveAPIKey()
7869

7970
// Use custom transport that always sends Basic auth header
8071
transport := &authTransport{

0 commit comments

Comments
 (0)