prompt.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package utils
  2. import (
  3. "bufio"
  4. "errors"
  5. "fmt"
  6. "os"
  7. "strings"
  8. "golang.org/x/crypto/ssh/terminal"
  9. )
  10. // PromptPlaintext prompts a user to input plain text
  11. func PromptPlaintext(prompt string) (string, error) {
  12. reader := bufio.NewReader(os.Stdin)
  13. fmt.Print(prompt)
  14. text, err := reader.ReadString('\n')
  15. if err != nil {
  16. return "", err
  17. }
  18. return strings.TrimSpace(text), nil
  19. }
  20. // PromptPassword prompts a user to input a hidden field
  21. func PromptPassword(prompt string) (string, error) {
  22. fmt.Print(prompt)
  23. pw, err := terminal.ReadPassword(0)
  24. fmt.Print("\r")
  25. if err != nil {
  26. return "", err
  27. }
  28. return strings.TrimSpace(string(pw)), nil
  29. }
  30. // PromptPasswordWithConfirmation is a helper function to prompt
  31. // for a password twice
  32. func PromptPasswordWithConfirmation() (string, error) {
  33. pw, err := PromptPassword("Password: ")
  34. if err != nil {
  35. return "", err
  36. }
  37. confirmPw, err := PromptPassword("Confirm password: ")
  38. if err != nil {
  39. return "", err
  40. }
  41. if pw != confirmPw {
  42. return "", errors.New("Passwords do not match")
  43. }
  44. return pw, nil
  45. }