aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ask.go37
1 files changed, 22 insertions, 15 deletions
diff --git a/ask.go b/ask.go
index 96123e0..df8f62e 100644
--- a/ask.go
+++ b/ask.go
@@ -1,40 +1,47 @@
-// +build ignore
-
package main
import (
"errors"
- "log"
"os"
"golang.org/x/crypto/ssh/terminal"
)
-func AskPassword(confirm bool) error {
- fd := os.Stdin.Fd()
- state, err := terminal.MakeRaw(int(fd))
+var (
+ ErrNoPassword = errors.New("please provide a password")
+ ErrNoMatch = errors.New("passwords don't match")
+)
+
+func AskPassword(f *os.File, confirm bool) (string, error) {
+ if f == nil {
+ f = os.Stdin
+ }
+
+ fd := f.Fd()
+ oldState, err := terminal.MakeRaw(int(fd))
if err != nil {
- return err
+ return "", err
}
- defer terminal.Restore(int(fd), state)
+ defer terminal.Restore(int(fd), oldState)
- term := terminal.NewTerminal(os.Stdin, "")
+ term := terminal.NewTerminal(f, "")
pass, err := term.ReadPassword("passphrase: ")
if err != nil {
- return err
+ return "", err
}
if len(pass) == 0 {
- return errors.New("please provide a password")
+ return "", ErrNoPassword
}
+
if confirm {
pass2, err := term.ReadPassword("confirm passphrase: ")
if err != nil {
- return err
+ return "", err
}
if pass != pass2 {
- return errors.New("passwords don't match")
+ return "", ErrNoMatch
}
}
- log.Println(pass)
- return nil
+
+ return pass, nil
}