github.com/nats-io/nsc/v2@v2.8.7-0.20240307184528-efd7023c6896/cmd/context_ui_utils.go (about) 1 package cmd 2 3 import ( 4 "fmt" 5 cli "github.com/nats-io/cliprompts/v2" 6 "github.com/nats-io/nsc/v2/cmd/store" 7 ) 8 9 func PickAccount(ctx *store.Context, name string) (string, error) { 10 if name == "" { 11 name = ctx.Account.Name 12 } 13 14 accounts, err := ctx.Store.ListSubContainers(store.Accounts) 15 if err != nil { 16 return "", err 17 } 18 if len(accounts) == 0 { 19 return "", fmt.Errorf("no accounts defined - add one first") 20 } 21 if len(accounts) == 1 { 22 name = accounts[0] 23 } 24 if len(accounts) > 1 { 25 i, err := cli.Select("select account", name, accounts) 26 if err != nil { 27 return "", err 28 } 29 name = accounts[i] 30 } 31 32 // allow downstream use of context to have account 33 ctx.Account.Name = name 34 35 return name, nil 36 } 37 38 func PickUser(ctx *store.Context, accountName string) (string, error) { 39 var err error 40 if accountName == "" { 41 accountName = ctx.Account.Name 42 } 43 44 if accountName == "" { 45 accountName, err = PickAccount(ctx, accountName) 46 if err != nil { 47 return "", err 48 } 49 } 50 // allow downstream use of context to have account 51 ctx.Account.Name = accountName 52 53 users, err := ctx.Store.ListEntries(store.Accounts, accountName, store.Users) 54 if err != nil { 55 return "", err 56 } 57 if len(users) == 0 { 58 return "", fmt.Errorf("account %q doesn't have any users - add one first", accountName) 59 } 60 if len(users) == 1 { 61 return users[0], nil 62 } 63 if len(users) > 1 { 64 i, err := cli.Select("select user", "", users) 65 if err != nil { 66 return "", err 67 } 68 return users[i], nil 69 } 70 return "", nil 71 }