From 55a92fa0a4570ac2bd1774c7f7d8c52311863e32 Mon Sep 17 00:00:00 2001 From: Joseph Cook <33655003+jmcook1186@users.noreply.github.com> Date: Mon, 7 Nov 2022 15:41:36 +0000 Subject: [PATCH] cmd/clef: list accounts at startup (#26082) Reports accounts known to Clef during startup, after master seed is provided by the user. --- cmd/clef/main.go | 5 ++--- signer/core/cliui.go | 29 +++++++++++++++++++++++++---- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/cmd/clef/main.go b/cmd/clef/main.go index be7089ce4..7dc12a14a 100644 --- a/cmd/clef/main.go +++ b/cmd/clef/main.go @@ -707,6 +707,7 @@ func signer(c *cli.Context) error { // it with the UI. ui.RegisterUIServer(core.NewUIServerAPI(apiImpl)) api = apiImpl + // Audit logging if logfile := c.String(auditLogFlag.Name); logfile != "" { api, err = core.NewAuditLogger(logfile, api) @@ -768,7 +769,6 @@ func signer(c *cli.Context) error { log.Info("IPC endpoint closed", "url", ipcapiURL) }() } - if c.Bool(testFlag.Name) { log.Info("Performing UI test") go testExternalUI(apiImpl) @@ -779,8 +779,7 @@ func signer(c *cli.Context) error { "extapi_version": core.ExternalAPIVersion, "extapi_http": extapiURL, "extapi_ipc": ipcapiURL, - }, - }) + }}) abortChan := make(chan os.Signal, 1) signal.Notify(abortChan, os.Interrupt) diff --git a/signer/core/cliui.go b/signer/core/cliui.go index 187eb1390..6278e53c0 100644 --- a/signer/core/cliui.go +++ b/signer/core/cliui.go @@ -18,6 +18,7 @@ package core import ( "bufio" + "context" "encoding/json" "fmt" "os" @@ -31,8 +32,9 @@ import ( ) type CommandlineUI struct { - in *bufio.Reader - mu sync.Mutex + in *bufio.Reader + mu sync.Mutex + api *UIServerAPI } func NewCommandlineUI() *CommandlineUI { @@ -40,7 +42,7 @@ func NewCommandlineUI() *CommandlineUI { } func (ui *CommandlineUI) RegisterUIServer(api *UIServerAPI) { - // noop + ui.api = api } // 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) { - fmt.Printf("------- Signer info -------\n") + fmt.Print("\n------- Signer info -------\n") for k, v := range info.Info { fmt.Printf("* %v : %v\n", k, v) } + go ui.showAccounts() }