aboutsummaryrefslogtreecommitdiff
path: root/ask.go
blob: 96123e0ed57d60fd4e586821ab0028e7b07cc1ea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// +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))
	if err != nil {
		return err
	}
	defer terminal.Restore(int(fd), state)

	term := terminal.NewTerminal(os.Stdin, "")
	pass, err := term.ReadPassword("passphrase: ")
	if err != nil {
		return err
	}
	if len(pass) == 0 {
		return errors.New("please provide a password")
	}
	if confirm {
		pass2, err := term.ReadPassword("confirm passphrase: ")
		if err != nil {
			return err
		}
		if pass != pass2 {
			return errors.New("passwords don't match")
		}
	}
	log.Println(pass)
	return nil
}