aboutsummaryrefslogtreecommitdiff
path: root/ask
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-05-01 18:12:15 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-05-01 18:12:15 +0200
commit0b4847b75c33a19e0b909c08cde1951176111702 (patch)
tree10e0f156c7a8ae2d371a1cf6a9970488bff98102 /ask
parent7df5d02ba7a47cc19ed11b361aed24ec4e9dbc6f (diff)
makeRaw
Diffstat (limited to 'ask')
-rw-r--r--ask/ask.go32
1 files changed, 22 insertions, 10 deletions
diff --git a/ask/ask.go b/ask/ask.go
index 86dfa6d..dc55aa2 100644
--- a/ask/ask.go
+++ b/ask/ask.go
@@ -3,6 +3,7 @@ package ask
import (
"errors"
+ "io"
"os"
"golang.org/x/crypto/ssh/terminal"
@@ -15,6 +16,12 @@ var (
// Confirmed asks for password twice
func Confirmed() (string, error) {
+ restore, err := makeRaw(os.Stdin)
+ if err != nil {
+ return "", err
+ }
+ defer restore()
+
pass, err := ask(os.Stdin, "passphrase: ")
if err != nil {
return "", err
@@ -31,25 +38,30 @@ func Confirmed() (string, error) {
// Password ask for password once
func Password() (string, error) {
- return ask(os.Stdin, "passphrase: ")
-}
-
-func ask(f *os.File, prompt string) (string, error) {
- fd := int(f.Fd())
- oldState, err := terminal.MakeRaw(fd)
+ restore, err := makeRaw(os.Stdin)
if err != nil {
return "", err
}
- defer terminal.Restore(fd, oldState)
+ defer restore()
+ return ask(os.Stdin, "passphrase: ")
+}
- term := terminal.NewTerminal(f, "")
- pass, err := term.ReadPassword(prompt)
+func ask(rw io.ReadWriter, prompt string) (string, error) {
+ pass, err := terminal.NewTerminal(rw, "").ReadPassword(prompt)
if err != nil {
return "", err
}
if len(pass) == 0 {
return "", ErrNoPassword
}
-
return pass, nil
}
+
+func makeRaw(f *os.File) (func(), error) {
+ fd := int(f.Fd())
+ oldState, err := terminal.MakeRaw(fd)
+ if err != nil {
+ return nil, err
+ }
+ return func() { terminal.Restore(fd, oldState) }, nil
+}