helpers.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package cmd
  2. import (
  3. "bufio"
  4. "errors"
  5. "fmt"
  6. "os"
  7. "os/signal"
  8. "strings"
  9. "syscall"
  10. "golang.org/x/crypto/ssh/terminal"
  11. )
  12. func closeHandler(closer func() error) {
  13. sig := make(chan os.Signal)
  14. signal.Notify(sig, os.Interrupt, syscall.SIGTERM)
  15. go func() {
  16. <-sig
  17. err := closer()
  18. if err == nil {
  19. fmt.Println("shutdown successful")
  20. os.Exit(0)
  21. }
  22. fmt.Printf("shutdown unsuccessful: %s\n", err.Error())
  23. os.Exit(1)
  24. }()
  25. }
  26. func promptPlaintext(prompt string) (string, error) {
  27. reader := bufio.NewReader(os.Stdin)
  28. fmt.Print(prompt)
  29. text, err := reader.ReadString('\n')
  30. if err != nil {
  31. return "", err
  32. }
  33. return strings.TrimSpace(text), nil
  34. }
  35. func promptPasswordWithConfirmation() (string, error) {
  36. fmt.Print("Password: ")
  37. pw, err := terminal.ReadPassword(0)
  38. fmt.Print("\r")
  39. if err != nil {
  40. return "", err
  41. }
  42. fmt.Print("Confirm password: ")
  43. confirmPw, err := terminal.ReadPassword(0)
  44. fmt.Print("\n")
  45. if strings.TrimSpace(string(pw)) != strings.TrimSpace(string(confirmPw)) {
  46. return "", errors.New("Passwords do not match")
  47. }
  48. return strings.TrimSpace(string(pw)), nil
  49. }