You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

76 lines
1.5 KiB

  1. package cmd
  2. import (
  3. "fmt"
  4. "github.com/bgentry/speakeasy"
  5. "github.com/pkg/errors"
  6. data "github.com/tendermint/go-data"
  7. keys "github.com/tendermint/go-keys"
  8. )
  9. const PassLength = 10
  10. func getPassword(prompt string) (string, error) {
  11. pass, err := speakeasy.Ask(prompt)
  12. if err != nil {
  13. return "", err
  14. }
  15. if len(pass) < PassLength {
  16. return "", errors.Errorf("Password must be at least %d characters", PassLength)
  17. }
  18. return pass, nil
  19. }
  20. func getCheckPassword(prompt, prompt2 string) (string, error) {
  21. // TODO: own function???
  22. pass, err := getPassword(prompt)
  23. if err != nil {
  24. return "", err
  25. }
  26. pass2, err := getPassword(prompt2)
  27. if err != nil {
  28. return "", err
  29. }
  30. if pass != pass2 {
  31. return "", errors.New("Passphrases don't match")
  32. }
  33. return pass, nil
  34. }
  35. func printInfo(info keys.Info) {
  36. switch output {
  37. case "text":
  38. addr, err := data.ToText(info.Address)
  39. if err != nil {
  40. panic(err) // really shouldn't happen...
  41. }
  42. sep := "\t\t"
  43. if len(info.Name) > 7 {
  44. sep = "\t"
  45. }
  46. fmt.Printf("%s%s%s\n", info.Name, sep, addr)
  47. case "json":
  48. json, err := data.ToJSON(info)
  49. if err != nil {
  50. panic(err) // really shouldn't happen...
  51. }
  52. fmt.Println(string(json))
  53. }
  54. }
  55. func printInfos(infos keys.Infos) {
  56. switch output {
  57. case "text":
  58. fmt.Println("All keys:")
  59. for _, i := range infos {
  60. printInfo(i)
  61. }
  62. case "json":
  63. json, err := data.ToJSON(infos)
  64. if err != nil {
  65. panic(err) // really shouldn't happen...
  66. }
  67. fmt.Println(string(json))
  68. }
  69. }