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 }