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  }