From f14feea43683fee58e26a48a51145e72d3ae7ad8 Mon Sep 17 00:00:00 2001
From: Taylor Gerring <taylor.gerring@gmail.com>
Date: Mon, 18 May 2015 12:24:30 -0500
Subject: [PATCH] Refactor user prompts into utils

---
 cmd/geth/admin.go |  6 +++---
 cmd/geth/main.go  | 49 +++--------------------------------------------
 cmd/utils/cmd.go  | 44 ++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 50 insertions(+), 49 deletions(-)

diff --git a/cmd/geth/admin.go b/cmd/geth/admin.go
index ebdf3512a..53dd0e6ad 100644
--- a/cmd/geth/admin.go
+++ b/cmd/geth/admin.go
@@ -383,7 +383,7 @@ func (js *jsre) unlock(call otto.FunctionCall) otto.Value {
 	var passphrase string
 	if arg.IsUndefined() {
 		fmt.Println("Please enter a passphrase now.")
-		passphrase, err = readPassword("Passphrase: ", true)
+		passphrase, err = utils.PromptPassword("Passphrase: ", true)
 		if err != nil {
 			fmt.Println(err)
 			return otto.FalseValue()
@@ -410,12 +410,12 @@ func (js *jsre) newAccount(call otto.FunctionCall) otto.Value {
 	if arg.IsUndefined() {
 		fmt.Println("The new account will be encrypted with a passphrase.")
 		fmt.Println("Please enter a passphrase now.")
-		auth, err := readPassword("Passphrase: ", true)
+		auth, err := utils.PromptPassword("Passphrase: ", true)
 		if err != nil {
 			fmt.Println(err)
 			return otto.FalseValue()
 		}
-		confirm, err := readPassword("Repeat Passphrase: ", false)
+		confirm, err := utils.PromptPassword("Repeat Passphrase: ", false)
 		if err != nil {
 			fmt.Println(err)
 			return otto.FalseValue()
diff --git a/cmd/geth/main.go b/cmd/geth/main.go
index 7db175eb9..df0af3e79 100644
--- a/cmd/geth/main.go
+++ b/cmd/geth/main.go
@@ -21,7 +21,6 @@
 package main
 
 import (
-	"bufio"
 	"fmt"
 	"io"
 	"io/ioutil"
@@ -44,7 +43,6 @@ import (
 	"github.com/ethereum/go-ethereum/logger"
 	"github.com/mattn/go-colorable"
 	"github.com/mattn/go-isatty"
-	"github.com/peterh/liner"
 )
 import _ "net/http/pprof"
 
@@ -426,12 +424,12 @@ func getPassPhrase(ctx *cli.Context, desc string, confirmation bool) (passphrase
 	passfile := ctx.GlobalString(utils.PasswordFileFlag.Name)
 	if len(passfile) == 0 {
 		fmt.Println(desc)
-		auth, err := readPassword("Passphrase: ", true)
+		auth, err := utils.PromptPassword("Passphrase: ", true)
 		if err != nil {
 			utils.Fatalf("%v", err)
 		}
 		if confirmation {
-			confirm, err := readPassword("Repeat Passphrase: ", false)
+			confirm, err := utils.PromptPassword("Repeat Passphrase: ", false)
 			if err != nil {
 				utils.Fatalf("%v", err)
 			}
@@ -549,7 +547,7 @@ func exportchain(ctx *cli.Context) {
 }
 
 func removeDb(ctx *cli.Context) {
-	confirm, err := readConfirm("Remove local databases?")
+	confirm, err := utils.PromptConfirm("Remove local databases?")
 	if err != nil {
 		utils.Fatalf("%v", err)
 	}
@@ -690,44 +688,3 @@ func hashish(x string) bool {
 	_, err := strconv.Atoi(x)
 	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
-}
diff --git a/cmd/utils/cmd.go b/cmd/utils/cmd.go
index fb55a64af..62d350066 100644
--- a/cmd/utils/cmd.go
+++ b/cmd/utils/cmd.go
@@ -22,11 +22,13 @@
 package utils
 
 import (
+	"bufio"
 	"fmt"
 	"io"
 	"os"
 	"os/signal"
 	"regexp"
+	"strings"
 
 	"github.com/ethereum/go-ethereum/common"
 	"github.com/ethereum/go-ethereum/core"
@@ -35,6 +37,7 @@ import (
 	"github.com/ethereum/go-ethereum/logger"
 	"github.com/ethereum/go-ethereum/logger/glog"
 	"github.com/ethereum/go-ethereum/rlp"
+	"github.com/peterh/liner"
 )
 
 var interruptCallbacks = []func(os.Signal){}
@@ -85,6 +88,47 @@ func confirm(message string) bool {
 	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) {
 	_, err := os.Stat(Datadir)
 	if err != nil {
-- 
GitLab