From 9b3cd5a35ac2b1ba42d11cc8340f2d373a8e54f5 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 18 Apr 2017 14:26:23 +0200 Subject: Refine ask pw --- ask.go | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) (limited to 'ask.go') 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 } -- cgit v1.2.3