passwords.go 489 B

12345678910111213141516171819202122232425262728
  1. package main
  2. import (
  3. "errors"
  4. "fmt"
  5. "os"
  6. "golang.org/x/term"
  7. )
  8. var ErrNoTerminal = errors.New("cannot read password from nonexistent terminal")
  9. type PasswordReader interface {
  10. ReadPassword() ([]byte, error)
  11. }
  12. type StdinPasswordReader struct{}
  13. func (pr StdinPasswordReader) ReadPassword() ([]byte, error) {
  14. if !term.IsTerminal(int(os.Stdin.Fd())) {
  15. return nil, ErrNoTerminal
  16. }
  17. password, err := term.ReadPassword(int(os.Stdin.Fd()))
  18. fmt.Println()
  19. return password, err
  20. }