github.com/taubyte/tau-cli@v0.1.13-0.20240326000942-487f0d57edfc/cli/commands/login/command.go (about)

     1  package login
     2  
     3  import (
     4  	"github.com/taubyte/tau-cli/cli/common/options"
     5  	"github.com/taubyte/tau-cli/flags"
     6  	loginFlags "github.com/taubyte/tau-cli/flags/login"
     7  	"github.com/taubyte/tau-cli/i18n"
     8  	loginI18n "github.com/taubyte/tau-cli/i18n/login"
     9  	loginLib "github.com/taubyte/tau-cli/lib/login"
    10  	"github.com/taubyte/tau-cli/prompts"
    11  	loginPrompts "github.com/taubyte/tau-cli/prompts/login"
    12  	slices "github.com/taubyte/utils/slices/string"
    13  	"github.com/urfave/cli/v2"
    14  )
    15  
    16  var Command = &cli.Command{
    17  	Name: "login",
    18  	Flags: flags.Combine(
    19  		flags.Name,
    20  		loginFlags.Token,
    21  		loginFlags.Provider,
    22  		loginFlags.New,
    23  		loginFlags.SetDefault,
    24  	),
    25  	ArgsUsage: i18n.ArgsUsageName,
    26  	Action:    Run,
    27  	Before:    options.SetNameAsArgs0,
    28  }
    29  
    30  func Run(ctx *cli.Context) error {
    31  	_default, options, err := loginLib.GetProfiles()
    32  	if err != nil {
    33  		return loginI18n.GetProfilesFailed(err)
    34  	}
    35  
    36  	// New: if --new or no selectable profiles
    37  	if ctx.Bool(loginFlags.New.Name) || len(options) == 0 {
    38  		return New(ctx, options)
    39  	}
    40  
    41  	// Selection
    42  	var name string
    43  	if ctx.IsSet(flags.Name.Name) {
    44  		name = ctx.String(flags.Name.Name)
    45  
    46  		if !slices.Contains(options, name) {
    47  			return loginI18n.DoesNotExistIn(name, options)
    48  		}
    49  	} else {
    50  		name, err = prompts.SelectInterface(options, loginPrompts.SelectAProfile, _default)
    51  		if err != nil {
    52  			return err
    53  		}
    54  	}
    55  
    56  	return Select(ctx, name, ctx.Bool(loginFlags.SetDefault.Name))
    57  }