|
|
|
@ -41,14 +41,14 @@ type prompter interface { |
|
|
|
|
PasswordPrompt(p string) (string, error) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
type dumbPrompter struct{ r *bufio.Reader } |
|
|
|
|
type dumbterm struct{ r *bufio.Reader } |
|
|
|
|
|
|
|
|
|
func (r dumbPrompter) Prompt(p string) (string, error) { |
|
|
|
|
func (r dumbterm) Prompt(p string) (string, error) { |
|
|
|
|
fmt.Print(p) |
|
|
|
|
return r.r.ReadString('\n') |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (r dumbPrompter) PasswordPrompt(p string) (string, error) { |
|
|
|
|
func (r dumbterm) PasswordPrompt(p string) (string, error) { |
|
|
|
|
fmt.Println("!! Unsupported terminal, password will echo.") |
|
|
|
|
fmt.Print(p) |
|
|
|
|
input, err := bufio.NewReader(os.Stdin).ReadString('\n') |
|
|
|
@ -56,13 +56,14 @@ func (r dumbPrompter) PasswordPrompt(p string) (string, error) { |
|
|
|
|
return input, err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (r dumbPrompter) AppendHistory(string) {} |
|
|
|
|
func (r dumbterm) AppendHistory(string) {} |
|
|
|
|
|
|
|
|
|
type jsre struct { |
|
|
|
|
re *javascript.JSRE |
|
|
|
|
ethereum *eth.Ethereum |
|
|
|
|
xeth *xeth.XEth |
|
|
|
|
ps1 string |
|
|
|
|
|
|
|
|
|
prompter |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -73,7 +74,7 @@ func newJSRE(ethereum *eth.Ethereum) *jsre { |
|
|
|
|
js.initStdFuncs() |
|
|
|
|
|
|
|
|
|
if !liner.TerminalSupported() { |
|
|
|
|
js.prompter = dumbPrompter{bufio.NewReader(os.Stdin)} |
|
|
|
|
js.prompter = dumbterm{bufio.NewReader(os.Stdin)} |
|
|
|
|
} else { |
|
|
|
|
lr := liner.NewLiner() |
|
|
|
|
lr.SetCtrlCAborts(true) |
|
|
|
@ -87,13 +88,13 @@ func newJSRE(ethereum *eth.Ethereum) *jsre { |
|
|
|
|
|
|
|
|
|
func (self *jsre) ConfirmTransaction(tx *types.Transaction) bool { |
|
|
|
|
p := fmt.Sprintf("Confirm Transaction %v\n[y/n] ", tx) |
|
|
|
|
answer, _ := self.prompter.Prompt(p) |
|
|
|
|
answer, _ := self.Prompt(p) |
|
|
|
|
return strings.HasPrefix(strings.Trim(answer, " "), "y") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (self *jsre) UnlockAccount(addr []byte) bool { |
|
|
|
|
fmt.Printf("Please unlock account %x.\n", addr) |
|
|
|
|
pass, err := self.prompter.PasswordPrompt("Passphrase: ") |
|
|
|
|
pass, err := self.PasswordPrompt("Passphrase: ") |
|
|
|
|
if err != nil { |
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
@ -124,7 +125,7 @@ func (self *jsre) exec(filename string) error { |
|
|
|
|
|
|
|
|
|
func (self *jsre) interactive() { |
|
|
|
|
for { |
|
|
|
|
input, err := self.prompter.Prompt(self.ps1) |
|
|
|
|
input, err := self.Prompt(self.ps1) |
|
|
|
|
if err != nil { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
@ -138,7 +139,7 @@ func (self *jsre) interactive() { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
hist := str[:len(str)-1] |
|
|
|
|
self.prompter.AppendHistory(hist) |
|
|
|
|
self.AppendHistory(hist) |
|
|
|
|
self.parseInput(str) |
|
|
|
|
str = "" |
|
|
|
|
} |
|
|
|
|