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

     1  package loginPrompts
     2  
     3  import (
     4  	"fmt"
     5  
     6  	flags "github.com/taubyte/tau-cli/flags/login"
     7  	i18n "github.com/taubyte/tau-cli/i18n/login"
     8  	"github.com/taubyte/tau-cli/prompts"
     9  	"github.com/urfave/cli/v2"
    10  	"golang.org/x/exp/slices"
    11  )
    12  
    13  func SelectAProvider(ctx *cli.Context) (provider string, err error) {
    14  	if ctx.IsSet(flags.Provider.Name) {
    15  		provider = ctx.String(flags.Provider.Name)
    16  		if slices.Contains(Providers, provider) {
    17  			return
    18  		}
    19  	}
    20  
    21  	provider, err = prompts.SelectInterface(Providers, GitProviderPrompt, DefaultProvider)
    22  	if err != nil {
    23  		err = i18n.SelectProviderFailed(err)
    24  		return
    25  	}
    26  
    27  	return
    28  }
    29  
    30  func GetOrRequireAProviderAndToken(ctx *cli.Context) (provider, token string, err error) {
    31  	if ctx.IsSet(flags.Token.Name) {
    32  		token = ctx.String(flags.Token.Name)
    33  	}
    34  
    35  	if ctx.IsSet(flags.Provider.Name) {
    36  		provider = ctx.String(flags.Provider.Name)
    37  	}
    38  
    39  	if len(provider) != 0 && len(token) != 0 {
    40  		return
    41  	}
    42  
    43  	if len(provider) == 0 {
    44  		provider, err = prompts.SelectInterface(Providers, GitProviderPrompt, DefaultProvider)
    45  		if err != nil {
    46  			err = i18n.SelectProviderFailed(err)
    47  			return
    48  		}
    49  	}
    50  
    51  	// Ask to get from web or enter a token
    52  	webOpt := fmt.Sprintf(GetTokenFromWeb, provider)
    53  	selection, err := prompts.SelectInterface(
    54  		[]string{webOpt, EnterTokenManually},
    55  		GetTokenWith,
    56  		webOpt,
    57  	)
    58  	if err != nil {
    59  		err = i18n.SelectTokenFromFailed(err)
    60  		return
    61  	}
    62  
    63  	if selection == webOpt {
    64  		token, err = TokenFromWeb(ctx, provider)
    65  	} else {
    66  		token = prompts.GetOrRequireAString(ctx, flags.Token.Name, TokenPrompt, nil) // TODO: validator
    67  	}
    68  
    69  	return
    70  }