Refactor user prompts into utils
This commit is contained in:
parent
36a4ba3248
commit
f14feea436
|
@ -383,7 +383,7 @@ func (js *jsre) unlock(call otto.FunctionCall) otto.Value {
|
||||||
var passphrase string
|
var passphrase string
|
||||||
if arg.IsUndefined() {
|
if arg.IsUndefined() {
|
||||||
fmt.Println("Please enter a passphrase now.")
|
fmt.Println("Please enter a passphrase now.")
|
||||||
passphrase, err = readPassword("Passphrase: ", true)
|
passphrase, err = utils.PromptPassword("Passphrase: ", true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return otto.FalseValue()
|
return otto.FalseValue()
|
||||||
|
@ -410,12 +410,12 @@ func (js *jsre) newAccount(call otto.FunctionCall) otto.Value {
|
||||||
if arg.IsUndefined() {
|
if arg.IsUndefined() {
|
||||||
fmt.Println("The new account will be encrypted with a passphrase.")
|
fmt.Println("The new account will be encrypted with a passphrase.")
|
||||||
fmt.Println("Please enter a passphrase now.")
|
fmt.Println("Please enter a passphrase now.")
|
||||||
auth, err := readPassword("Passphrase: ", true)
|
auth, err := utils.PromptPassword("Passphrase: ", true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return otto.FalseValue()
|
return otto.FalseValue()
|
||||||
}
|
}
|
||||||
confirm, err := readPassword("Repeat Passphrase: ", false)
|
confirm, err := utils.PromptPassword("Repeat Passphrase: ", false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return otto.FalseValue()
|
return otto.FalseValue()
|
||||||
|
|
|
@ -21,7 +21,6 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
@ -44,7 +43,6 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/logger"
|
"github.com/ethereum/go-ethereum/logger"
|
||||||
"github.com/mattn/go-colorable"
|
"github.com/mattn/go-colorable"
|
||||||
"github.com/mattn/go-isatty"
|
"github.com/mattn/go-isatty"
|
||||||
"github.com/peterh/liner"
|
|
||||||
)
|
)
|
||||||
import _ "net/http/pprof"
|
import _ "net/http/pprof"
|
||||||
|
|
||||||
|
@ -426,12 +424,12 @@ func getPassPhrase(ctx *cli.Context, desc string, confirmation bool) (passphrase
|
||||||
passfile := ctx.GlobalString(utils.PasswordFileFlag.Name)
|
passfile := ctx.GlobalString(utils.PasswordFileFlag.Name)
|
||||||
if len(passfile) == 0 {
|
if len(passfile) == 0 {
|
||||||
fmt.Println(desc)
|
fmt.Println(desc)
|
||||||
auth, err := readPassword("Passphrase: ", true)
|
auth, err := utils.PromptPassword("Passphrase: ", true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Fatalf("%v", err)
|
utils.Fatalf("%v", err)
|
||||||
}
|
}
|
||||||
if confirmation {
|
if confirmation {
|
||||||
confirm, err := readPassword("Repeat Passphrase: ", false)
|
confirm, err := utils.PromptPassword("Repeat Passphrase: ", false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Fatalf("%v", err)
|
utils.Fatalf("%v", err)
|
||||||
}
|
}
|
||||||
|
@ -549,7 +547,7 @@ func exportchain(ctx *cli.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func removeDb(ctx *cli.Context) {
|
func removeDb(ctx *cli.Context) {
|
||||||
confirm, err := readConfirm("Remove local databases?")
|
confirm, err := utils.PromptConfirm("Remove local databases?")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.Fatalf("%v", err)
|
utils.Fatalf("%v", err)
|
||||||
}
|
}
|
||||||
|
@ -690,44 +688,3 @@ func hashish(x string) bool {
|
||||||
_, err := strconv.Atoi(x)
|
_, err := strconv.Atoi(x)
|
||||||
return err != nil
|
return err != nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func readConfirm(prompt string) (bool, error) {
|
|
||||||
var (
|
|
||||||
input string
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
prompt = prompt + " [y/N] "
|
|
||||||
|
|
||||||
if liner.TerminalSupported() {
|
|
||||||
lr := liner.NewLiner()
|
|
||||||
defer lr.Close()
|
|
||||||
input, err = lr.Prompt(prompt)
|
|
||||||
} else {
|
|
||||||
fmt.Print(prompt)
|
|
||||||
input, err = bufio.NewReader(os.Stdin).ReadString('\n')
|
|
||||||
fmt.Println()
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(input) > 0 && strings.ToUpper(input[:1]) == "Y" {
|
|
||||||
return true, nil
|
|
||||||
} else {
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func readPassword(prompt string, warnTerm bool) (string, error) {
|
|
||||||
if liner.TerminalSupported() {
|
|
||||||
lr := liner.NewLiner()
|
|
||||||
defer lr.Close()
|
|
||||||
return lr.PasswordPrompt(prompt)
|
|
||||||
}
|
|
||||||
if warnTerm {
|
|
||||||
fmt.Println("!! Unsupported terminal, password will be echoed.")
|
|
||||||
}
|
|
||||||
fmt.Print(prompt)
|
|
||||||
input, err := bufio.NewReader(os.Stdin).ReadString('\n')
|
|
||||||
fmt.Println()
|
|
||||||
return input, err
|
|
||||||
}
|
|
||||||
|
|
|
@ -22,11 +22,13 @@
|
||||||
package utils
|
package utils
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/core"
|
"github.com/ethereum/go-ethereum/core"
|
||||||
|
@ -35,6 +37,7 @@ import (
|
||||||
"github.com/ethereum/go-ethereum/logger"
|
"github.com/ethereum/go-ethereum/logger"
|
||||||
"github.com/ethereum/go-ethereum/logger/glog"
|
"github.com/ethereum/go-ethereum/logger/glog"
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
|
"github.com/peterh/liner"
|
||||||
)
|
)
|
||||||
|
|
||||||
var interruptCallbacks = []func(os.Signal){}
|
var interruptCallbacks = []func(os.Signal){}
|
||||||
|
@ -85,6 +88,47 @@ func confirm(message string) bool {
|
||||||
return r == "y"
|
return r == "y"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func PromptConfirm(prompt string) (bool, error) {
|
||||||
|
var (
|
||||||
|
input string
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
prompt = prompt + " [y/N] "
|
||||||
|
|
||||||
|
if liner.TerminalSupported() {
|
||||||
|
lr := liner.NewLiner()
|
||||||
|
defer lr.Close()
|
||||||
|
input, err = lr.Prompt(prompt)
|
||||||
|
} else {
|
||||||
|
fmt.Print(prompt)
|
||||||
|
input, err = bufio.NewReader(os.Stdin).ReadString('\n')
|
||||||
|
fmt.Println()
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(input) > 0 && strings.ToUpper(input[:1]) == "Y" {
|
||||||
|
return true, nil
|
||||||
|
} else {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func PromptPassword(prompt string, warnTerm bool) (string, error) {
|
||||||
|
if liner.TerminalSupported() {
|
||||||
|
lr := liner.NewLiner()
|
||||||
|
defer lr.Close()
|
||||||
|
return lr.PasswordPrompt(prompt)
|
||||||
|
}
|
||||||
|
if warnTerm {
|
||||||
|
fmt.Println("!! Unsupported terminal, password will be echoed.")
|
||||||
|
}
|
||||||
|
fmt.Print(prompt)
|
||||||
|
input, err := bufio.NewReader(os.Stdin).ReadString('\n')
|
||||||
|
fmt.Println()
|
||||||
|
return input, err
|
||||||
|
}
|
||||||
|
|
||||||
func initDataDir(Datadir string) {
|
func initDataDir(Datadir string) {
|
||||||
_, err := os.Stat(Datadir)
|
_, err := os.Stat(Datadir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue