diff options
author | Jakob Unterwurzacher | 2016-06-15 22:43:31 +0200 |
---|---|---|
committer | Jakob Unterwurzacher | 2016-06-15 22:44:24 +0200 |
commit | c89455063cfd9c531c0a671251ccfcd46f09403d (patch) | |
tree | 1bd5330aad0ac7b16ecb5b35150a304e56271be3 /password.go | |
parent | 218bf83ce399832a0eccfbd025e5dd0399db6bed (diff) |
readpassword: create internal package for password reading
* Supports stdin
* Add tests for extpass and stdin
As per user request at https://github.com/rfjakob/gocryptfs/issues/30
Diffstat (limited to 'password.go')
-rw-r--r-- | password.go | 64 |
1 files changed, 0 insertions, 64 deletions
diff --git a/password.go b/password.go deleted file mode 100644 index 01c71a7..0000000 --- a/password.go +++ /dev/null @@ -1,64 +0,0 @@ -package main - -import ( - "fmt" - "os" - "os/exec" - "strings" - - "golang.org/x/crypto/ssh/terminal" - - "github.com/rfjakob/gocryptfs/internal/toggledlog" -) - -func readPasswordTwice(extpass string) string { - if extpass == "" { - fmt.Fprintf(os.Stderr, "Password: ") - p1 := readPassword("") - fmt.Fprintf(os.Stderr, "Repeat: ") - p2 := readPassword("") - if p1 != p2 { - toggledlog.Fatal.Println(colorRed + "Passwords do not match" + colorReset) - os.Exit(ERREXIT_PASSWORD) - } - return p1 - } else { - return readPassword(extpass) - } -} - -// readPassword - get password from terminal -// or from the "extpass" program -func readPassword(extpass string) string { - var password string - var err error - var output []byte - if extpass != "" { - parts := strings.Split(extpass, " ") - cmd := exec.Command(parts[0], parts[1:]...) - cmd.Stderr = os.Stderr - output, err = cmd.Output() - if err != nil { - toggledlog.Fatal.Printf(colorRed+"extpass program returned error: %v\n"+colorReset, err) - os.Exit(ERREXIT_PASSWORD) - } - // Trim trailing newline like terminal.ReadPassword() does - if output[len(output)-1] == '\n' { - output = output[:len(output)-1] - } - } else { - fd := int(os.Stdin.Fd()) - output, err = terminal.ReadPassword(fd) - if err != nil { - toggledlog.Fatal.Printf(colorRed+"Could not read password from terminal: %v\n"+colorReset, err) - os.Exit(ERREXIT_PASSWORD) - } - fmt.Fprintf(os.Stderr, "\n") - } - password = string(output) - if password == "" { - toggledlog.Fatal.Printf(colorRed + "Password is empty\n" + colorReset) - os.Exit(ERREXIT_PASSWORD) - } - return password -} |