cmd/clef: list accounts at startup (#26082)

Reports accounts known to Clef during startup, after master seed is provided by the user.
This commit is contained in:
Joseph Cook 2022-11-07 15:41:36 +00:00 committed by GitHub
parent ca948b8579
commit 55a92fa0a4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 7 deletions

View File

@ -707,6 +707,7 @@ func signer(c *cli.Context) error {
// it with the UI. // it with the UI.
ui.RegisterUIServer(core.NewUIServerAPI(apiImpl)) ui.RegisterUIServer(core.NewUIServerAPI(apiImpl))
api = apiImpl api = apiImpl
// Audit logging // Audit logging
if logfile := c.String(auditLogFlag.Name); logfile != "" { if logfile := c.String(auditLogFlag.Name); logfile != "" {
api, err = core.NewAuditLogger(logfile, api) api, err = core.NewAuditLogger(logfile, api)
@ -768,7 +769,6 @@ func signer(c *cli.Context) error {
log.Info("IPC endpoint closed", "url", ipcapiURL) log.Info("IPC endpoint closed", "url", ipcapiURL)
}() }()
} }
if c.Bool(testFlag.Name) { if c.Bool(testFlag.Name) {
log.Info("Performing UI test") log.Info("Performing UI test")
go testExternalUI(apiImpl) go testExternalUI(apiImpl)
@ -779,8 +779,7 @@ func signer(c *cli.Context) error {
"extapi_version": core.ExternalAPIVersion, "extapi_version": core.ExternalAPIVersion,
"extapi_http": extapiURL, "extapi_http": extapiURL,
"extapi_ipc": ipcapiURL, "extapi_ipc": ipcapiURL,
}, }})
})
abortChan := make(chan os.Signal, 1) abortChan := make(chan os.Signal, 1)
signal.Notify(abortChan, os.Interrupt) signal.Notify(abortChan, os.Interrupt)

View File

@ -18,6 +18,7 @@ package core
import ( import (
"bufio" "bufio"
"context"
"encoding/json" "encoding/json"
"fmt" "fmt"
"os" "os"
@ -33,6 +34,7 @@ import (
type CommandlineUI struct { type CommandlineUI struct {
in *bufio.Reader in *bufio.Reader
mu sync.Mutex mu sync.Mutex
api *UIServerAPI
} }
func NewCommandlineUI() *CommandlineUI { func NewCommandlineUI() *CommandlineUI {
@ -40,7 +42,7 @@ func NewCommandlineUI() *CommandlineUI {
} }
func (ui *CommandlineUI) RegisterUIServer(api *UIServerAPI) { func (ui *CommandlineUI) RegisterUIServer(api *UIServerAPI) {
// noop ui.api = api
} }
// readString reads a single line from stdin, trimming if from spaces, enforcing // readString reads a single line from stdin, trimming if from spaces, enforcing
@ -241,9 +243,28 @@ func (ui *CommandlineUI) OnApprovedTx(tx ethapi.SignTransactionResult) {
} }
} }
func (ui *CommandlineUI) showAccounts() {
accounts, err := ui.api.ListAccounts(context.Background())
if err != nil {
log.Error("Error listing accounts", "err", err)
return
}
if len(accounts) == 0 {
fmt.Print("No accounts found\n")
return
}
var out = new(strings.Builder)
fmt.Fprint(out, "\n------- Available accounts -------\n")
for i, account := range accounts {
fmt.Fprintf(out, "%d. %s at %s\n", i, account.Address, account.URL)
}
fmt.Print(out.String())
}
func (ui *CommandlineUI) OnSignerStartup(info StartupInfo) { func (ui *CommandlineUI) OnSignerStartup(info StartupInfo) {
fmt.Printf("------- Signer info -------\n") fmt.Print("\n------- Signer info -------\n")
for k, v := range info.Info { for k, v := range info.Info {
fmt.Printf("* %v : %v\n", k, v) fmt.Printf("* %v : %v\n", k, v)
} }
go ui.showAccounts()
} }