forked from mirror/go-ethereum
cmd: abstract `getPassPhrase` functions into one (#21219)
* [cmd] Abstract `getPassPhrase` functions into one. * cmd/ethkey: fix compilation failure Co-authored-by: rjl493456442 <garyrong0905@gmail.com>release/1.9
parent
c13df14581
commit
dd91c7ce6a
@ -0,0 +1,62 @@ |
|||||||
|
// Copyright 2020 The go-ethereum Authors
|
||||||
|
// This file is part of go-ethereum.
|
||||||
|
//
|
||||||
|
// The go-ethereum library is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// The go-ethereum library is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Lesser General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
// Package utils contains internal helper functions for go-ethereum commands.
|
||||||
|
package utils |
||||||
|
|
||||||
|
import ( |
||||||
|
"fmt" |
||||||
|
|
||||||
|
"github.com/ethereum/go-ethereum/console/prompt" |
||||||
|
) |
||||||
|
|
||||||
|
// GetPassPhrase displays the given text(prompt) to the user and requests some textual
|
||||||
|
// data to be entered, but one which must not be echoed out into the terminal.
|
||||||
|
// The method returns the input provided by the user.
|
||||||
|
func GetPassPhrase(text string, confirmation bool) string { |
||||||
|
if text != "" { |
||||||
|
fmt.Println(text) |
||||||
|
} |
||||||
|
password, err := prompt.Stdin.PromptPassword("Password: ") |
||||||
|
if err != nil { |
||||||
|
Fatalf("Failed to read password: %v", err) |
||||||
|
} |
||||||
|
if confirmation { |
||||||
|
confirm, err := prompt.Stdin.PromptPassword("Repeat password: ") |
||||||
|
if err != nil { |
||||||
|
Fatalf("Failed to read password confirmation: %v", err) |
||||||
|
} |
||||||
|
if password != confirm { |
||||||
|
Fatalf("Passwords do not match") |
||||||
|
} |
||||||
|
} |
||||||
|
return password |
||||||
|
} |
||||||
|
|
||||||
|
// GetPassPhraseWithList retrieves the password associated with an account, either fetched
|
||||||
|
// from a list of preloaded passphrases, or requested interactively from the user.
|
||||||
|
func GetPassPhraseWithList(text string, confirmation bool, index int, passwords []string) string { |
||||||
|
// If a list of passwords was supplied, retrieve from them
|
||||||
|
if len(passwords) > 0 { |
||||||
|
if index < len(passwords) { |
||||||
|
return passwords[index] |
||||||
|
} |
||||||
|
return passwords[len(passwords)-1] |
||||||
|
} |
||||||
|
// Otherwise prompt the user for the password
|
||||||
|
password := GetPassPhrase(text, confirmation) |
||||||
|
return password |
||||||
|
} |
@ -0,0 +1,74 @@ |
|||||||
|
// Copyright 2020 The go-ethereum Authors
|
||||||
|
// This file is part of go-ethereum.
|
||||||
|
//
|
||||||
|
// The go-ethereum library is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// The go-ethereum library is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Lesser General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
|
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
// Package utils contains internal helper functions for go-ethereum commands.
|
||||||
|
package utils |
||||||
|
|
||||||
|
import ( |
||||||
|
"testing" |
||||||
|
) |
||||||
|
|
||||||
|
func TestGetPassPhraseWithList(t *testing.T) { |
||||||
|
type args struct { |
||||||
|
text string |
||||||
|
confirmation bool |
||||||
|
index int |
||||||
|
passwords []string |
||||||
|
} |
||||||
|
tests := []struct { |
||||||
|
name string |
||||||
|
args args |
||||||
|
want string |
||||||
|
}{ |
||||||
|
{ |
||||||
|
"test1", |
||||||
|
args{ |
||||||
|
"text1", |
||||||
|
false, |
||||||
|
0, |
||||||
|
[]string{"zero", "one", "two"}, |
||||||
|
}, |
||||||
|
"zero", |
||||||
|
}, |
||||||
|
{ |
||||||
|
"test2", |
||||||
|
args{ |
||||||
|
"text2", |
||||||
|
false, |
||||||
|
5, |
||||||
|
[]string{"zero", "one", "two"}, |
||||||
|
}, |
||||||
|
"two", |
||||||
|
}, |
||||||
|
{ |
||||||
|
"test3", |
||||||
|
args{ |
||||||
|
"text3", |
||||||
|
true, |
||||||
|
1, |
||||||
|
[]string{"zero", "one", "two"}, |
||||||
|
}, |
||||||
|
"one", |
||||||
|
}, |
||||||
|
} |
||||||
|
for _, tt := range tests { |
||||||
|
t.Run(tt.name, func(t *testing.T) { |
||||||
|
if got := GetPassPhraseWithList(tt.args.text, tt.args.confirmation, tt.args.index, tt.args.passwords); got != tt.want { |
||||||
|
t.Errorf("GetPassPhraseWithList() = %v, want %v", got, tt.want) |
||||||
|
} |
||||||
|
}) |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue