| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package cli
- import (
- "fmt"
- "sort"
- "github.com/spf13/cobra"
- "github.com/kotoyuuko/cc-switch-cli/internal/config"
- "github.com/kotoyuuko/cc-switch-cli/internal/mask"
- )
- func newListCmd(app *appState) *cobra.Command {
- var verbose bool
- cmd := &cobra.Command{
- Use: "list",
- Aliases: []string{"ls"},
- Short: "List configured providers",
- RunE: func(cmd *cobra.Command, args []string) error {
- return runList(app, verbose)
- },
- }
- cmd.Flags().BoolVarP(&verbose, "verbose", "V", false,
- "also print env keys with masked values (references shown as-is)")
- return cmd
- }
- func runList(app *appState, verbose bool) error {
- if len(app.cfg.Providers) == 0 {
- fmt.Fprintln(app.stdout, "(no providers configured)")
- return nil
- }
- names := app.cfg.SortedProviderNames()
- for _, name := range names {
- p := app.cfg.Providers[name]
- marker := " "
- if app.cfg.DefaultProvider == name {
- marker = "*"
- }
- line := fmt.Sprintf("%s %s", marker, name)
- if p.Description != "" {
- line += " " + p.Description
- }
- fmt.Fprintln(app.stdout, line)
- if verbose {
- keys := make([]string, 0, len(p.Env))
- for k := range p.Env {
- keys = append(keys, k)
- }
- sort.Strings(keys)
- for _, k := range keys {
- fmt.Fprintf(app.stdout, " %s=%s\n", k, displayValue(p.Env[k]))
- }
- }
- }
- return nil
- }
- // displayValue returns the string to show the user for an env value.
- // `env:VAR` references are shown as-is (they are pointers, not secrets);
- // literal values are masked.
- func displayValue(v string) string {
- if _, ok := config.IsEnvRef(v); ok {
- return v
- }
- return mask.Value(v)
- }
|