aboutsummaryrefslogtreecommitdiff
path: root/ask.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-04-18 14:26:23 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-04-18 14:26:23 +0200
commit9b3cd5a35ac2b1ba42d11cc8340f2d373a8e54f5 (patch)
tree113b63909bdda1959bd1315700964c5a6cfe2960 /ask.go
parent7424279fd2a904fc944edde67494be0584f204f5 (diff)
Refine ask pw
Diffstat (limited to 'ask.go')
-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
}