askPass presents a given prompt and asks the user for password.
(out io.Writer, prompt string)
| 95 | |
| 96 | // askPass presents a given prompt and asks the user for password. |
| 97 | func askPass(out io.Writer, prompt string) (string, error) { |
| 98 | fd, err := intFd(os.Stdin) |
| 99 | if err != nil { |
| 100 | return "", errors.Wrap(err, "password input error") |
| 101 | } |
| 102 | |
| 103 | for range 5 { |
| 104 | fmt.Fprint(out, prompt) //nolint:errcheck |
| 105 | |
| 106 | passBytes, err := term.ReadPassword(fd) |
| 107 | if err != nil { |
| 108 | return "", errors.Wrap(err, "password prompt error") |
| 109 | } |
| 110 | |
| 111 | fmt.Fprintln(out) //nolint:errcheck |
| 112 | |
| 113 | if len(passBytes) == 0 { |
| 114 | continue |
| 115 | } |
| 116 | |
| 117 | return string(passBytes), nil |
| 118 | } |
| 119 | |
| 120 | return "", errors.New("can't get password") |
| 121 | } |
| 122 | |
| 123 | var errFdConversionOverflows = errors.New("uintptr file descriptor conversion to int overflows") |
| 124 |
no test coverage detected