diff --git a/modules/context/context.go b/modules/context/context.go index 13c7e50..5c16198 100644 --- a/modules/context/context.go +++ b/modules/context/context.go @@ -120,7 +120,7 @@ func InitCommand(cmd *cli.Command) *TeaContext { // override config user with env variable envLogin := GetLoginByEnvVar() if envLogin != nil { - _, err := utils.ValidateAuthenticationMethod(envLogin.URL, envLogin.Token, "", "", false, "", "") + _, err := utils.ValidateAuthenticationMethod(envLogin.URL, envLogin.Token, "", "") if err != nil { log.Fatal(err.Error()) } diff --git a/modules/interact/login.go b/modules/interact/login.go index 58b9002..a8a3b75 100644 --- a/modules/interact/login.go +++ b/modules/interact/login.go @@ -86,7 +86,7 @@ func CreateLogin() error { printTitleAndContent("Name of new Login: ", name) - loginMethod, err := promptSelectV2("Login with: ", []string{"token", "ssh-key/certificate", "oauth"}) + loginMethod, err := promptSelectV2("Login with: ", []string{"token", "oauth"}) if err != nil { return err } @@ -104,7 +104,7 @@ func CreateLogin() error { printTitleAndContent("Allow Insecure connections:", strconv.FormatBool(insecure)) return auth.OAuthLoginWithOptions(name, giteaURL, insecure) - default: // token + case "token": var hasToken bool if err := huh.NewConfirm(). Title("Do you have an access token?"). @@ -154,7 +154,7 @@ func CreateLogin() error { Value(&tokenScopes). Validate(func(s []string) error { if len(s) == 0 { - return errors.New("At least one scope is required") + return errors.New("at least one scope is required") } return nil }). @@ -176,26 +176,36 @@ func CreateLogin() error { } printTitleAndContent("OTP (if applicable):", otp) } - case "ssh-key/certificate": - if err := huh.NewInput(). - Title("SSH Key/Certificate Path (leave empty for auto-discovery in ~/.ssh and ssh-agent):"). - Value(&sshKey). - WithTheme(theme.GetTheme()). - Run(); err != nil { + default: + return fmt.Errorf("unknown login method: %s", loginMethod) + } + + var optSettings bool + if err := huh.NewConfirm(). + Title("Set Optional settings:"). + Value(&optSettings). + WithTheme(theme.GetTheme()). + Run(); err != nil { + return err + } + printTitleAndContent("Set Optional settings:", strconv.FormatBool(optSettings)) + + if optSettings { + pubKeys := task.ListSSHPubkey() + emptyOpt := "Auto-discovery SSH Key in ~/.ssh and ssh-agent" + pubKeys = append([]string{emptyOpt}, pubKeys...) + + sshKey, err = promptSelect("Select ssh-key: ", pubKeys, "", "", "") + if err != nil { return err } - printTitleAndContent("SSH Key/Certificate Path (leave empty for auto-discovery in ~/.ssh and ssh-agent):", sshKey) + if sshKey == emptyOpt { + sshKey = "" + } - if sshKey == "" { - pubKeys := task.ListSSHPubkey() - if len(pubKeys) == 0 { - fmt.Println("No SSH keys found in ~/.ssh or ssh-agent") - return nil - } - sshKey, err = promptSelect("Select ssh-key: ", pubKeys, "", "", "") - if err != nil { - return err - } + printTitleAndContent("SSH Key Path (leave empty for auto-discovery) in ~/.ssh and ssh-agent):", sshKey) + + if sshKey != "" { printTitleAndContent("Selected ssh-key:", sshKey) // ssh certificate @@ -219,27 +229,6 @@ func CreateLogin() error { } } } - } - - var optSettings bool - if err := huh.NewConfirm(). - Title("Set Optional settings:"). - Value(&optSettings). - WithTheme(theme.GetTheme()). - Run(); err != nil { - return err - } - printTitleAndContent("Set Optional settings:", strconv.FormatBool(optSettings)) - - if optSettings { - if err := huh.NewInput(). - Title("SSH Key Path (leave empty for auto-discovery):"). - Value(&sshKey). - WithTheme(theme.GetTheme()). - Run(); err != nil { - return err - } - printTitleAndContent("SSH Key Path (leave empty for auto-discovery):", sshKey) if err := huh.NewConfirm(). Title("Allow Insecure connections:"). diff --git a/modules/task/login_create.go b/modules/task/login_create.go index 94e5e74..44f3956 100644 --- a/modules/task/login_create.go +++ b/modules/task/login_create.go @@ -68,9 +68,6 @@ func CreateLogin(name, token, user, passwd, otp, scopes, sshKey, giteaURL, sshCe token, user, passwd, - sshAgent, - sshKey, - sshCertPrincipal, ) if err != nil { return err @@ -95,7 +92,7 @@ func CreateLogin(name, token, user, passwd, otp, scopes, sshKey, giteaURL, sshCe VersionCheck: versionCheck, } - if len(token) == 0 && sshCertPrincipal == "" && !sshAgent && sshKey == "" { + if len(token) == 0 { if login.Token, err = generateToken(login, user, passwd, otp, scopes); err != nil { return err } diff --git a/modules/utils/validate.go b/modules/utils/validate.go index 9924c2f..bedf1d8 100644 --- a/modules/utils/validate.go +++ b/modules/utils/validate.go @@ -14,25 +14,21 @@ func ValidateAuthenticationMethod( token string, user string, passwd string, - sshAgent bool, - sshKey string, - sshCertPrincipal string, ) (*url.URL, error) { // Normalize URL serverURL, err := NormalizeURL(giteaURL) if err != nil { - return nil, fmt.Errorf("Unable to parse URL: %s", err) + return nil, fmt.Errorf("unable to parse URL: %s", err) } - if !sshAgent && sshCertPrincipal == "" && sshKey == "" { - // .. if we have enough information to authenticate - if len(token) == 0 && (len(user)+len(passwd)) == 0 { - return nil, fmt.Errorf("No token set") - } else if len(user) != 0 && len(passwd) == 0 { - return nil, fmt.Errorf("No password set") - } else if len(user) == 0 && len(passwd) != 0 { - return nil, fmt.Errorf("No user set") - } + // .. if we have enough information to authenticate + if len(token) == 0 && (len(user)+len(passwd)) == 0 { + return nil, fmt.Errorf("no token set") + } else if len(user) != 0 && len(passwd) == 0 { + return nil, fmt.Errorf("no password set") + } else if len(user) == 0 && len(passwd) != 0 { + return nil, fmt.Errorf("no user set") } + return serverURL, nil }