From 600780fcb4b380737d8f09a46ccfa98deb0c78a8 Mon Sep 17 00:00:00 2001 From: Joe Date: Tue, 1 Nov 2022 10:18:07 +0000 Subject: [PATCH 01/10] dumps account info at startup --- cmd/clef/main.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/cmd/clef/main.go b/cmd/clef/main.go index a3e4815ed5fa..7090cbc9c038 100644 --- a/cmd/clef/main.go +++ b/cmd/clef/main.go @@ -634,6 +634,28 @@ func signer(c *cli.Context) error { log.Info("Performing UI test") go testExternalUI(apiImpl) } + + // list known accounts to console on startup + ui_server := core.NewUIServerAPI(apiImpl) + accs, err := ui_server.ListAccounts(c.Context) + if err != nil { + return err + } + fmt.Println("\nAccounts known to Clef:\n") + for _, account := range accs { + fmt.Println(account.Address) + } + fmt.Println() + + ui.OnSignerStartup(core.StartupInfo{ + Info: map[string]interface{}{ + "intapi_version": core.InternalAPIVersion, + "extapi_version": core.ExternalAPIVersion, + "extapi_http": extapiURL, + "extapi_ipc": ipcapiURL, + }, + }) + ui.OnSignerStartup(core.StartupInfo{ Info: map[string]interface{}{ "intapi_version": core.InternalAPIVersion, From d932ac64558dc6cd6e3622014b54ed1b1c52d967 Mon Sep 17 00:00:00 2001 From: Joe Date: Tue, 1 Nov 2022 10:21:02 +0000 Subject: [PATCH 02/10] fix accidental ctrl-v --- cmd/clef/main.go | 9 --------- 1 file changed, 9 deletions(-) diff --git a/cmd/clef/main.go b/cmd/clef/main.go index 7090cbc9c038..7c2fc5c5c2cb 100644 --- a/cmd/clef/main.go +++ b/cmd/clef/main.go @@ -646,15 +646,6 @@ func signer(c *cli.Context) error { fmt.Println(account.Address) } fmt.Println() - - ui.OnSignerStartup(core.StartupInfo{ - Info: map[string]interface{}{ - "intapi_version": core.InternalAPIVersion, - "extapi_version": core.ExternalAPIVersion, - "extapi_http": extapiURL, - "extapi_ipc": ipcapiURL, - }, - }) ui.OnSignerStartup(core.StartupInfo{ Info: map[string]interface{}{ From 155ea9601f9b7a3a9e357820097ab4d9d9726b03 Mon Sep 17 00:00:00 2001 From: Joe Date: Tue, 1 Nov 2022 18:08:18 +0000 Subject: [PATCH 03/10] fix account listing --- cmd/clef/main.go | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/cmd/clef/main.go b/cmd/clef/main.go index 7c2fc5c5c2cb..d7b3bd72afa6 100644 --- a/cmd/clef/main.go +++ b/cmd/clef/main.go @@ -566,8 +566,11 @@ func signer(c *cli.Context) error { // Establish the bidirectional communication, by creating a new UI backend and registering // it with the UI. + ui.RegisterUIServer(core.NewUIServerAPI(apiImpl)) api = apiImpl + intapi := core.NewUIServerAPI(apiImpl) + // Audit logging if logfile := c.String(auditLogFlag.Name); logfile != "" { api, err = core.NewAuditLogger(logfile, api) @@ -576,6 +579,7 @@ func signer(c *cli.Context) error { } log.Info("Audit logs configured", "file", logfile) } + // register signer API with server var ( extapiURL = "n/a" @@ -634,19 +638,23 @@ func signer(c *cli.Context) error { log.Info("Performing UI test") go testExternalUI(apiImpl) } + + // list accounts on startup + accounts, err := intapi.ListAccounts(c.Context) + if err != nil { + utils.Fatalf(err.Error()) + } + + var addresses string + for _, account := range accounts { + // concat string to avoid repeating "INFO" on terminal + addresses += fmt.Sprintf("%s", account.Address) + addresses += "\n" + } + + // print account string to console using ui + ui.ShowInfo(addresses) - // list known accounts to console on startup - ui_server := core.NewUIServerAPI(apiImpl) - accs, err := ui_server.ListAccounts(c.Context) - if err != nil { - return err - } - fmt.Println("\nAccounts known to Clef:\n") - for _, account := range accs { - fmt.Println(account.Address) - } - fmt.Println() - ui.OnSignerStartup(core.StartupInfo{ Info: map[string]interface{}{ "intapi_version": core.InternalAPIVersion, From 1533a5898f2b741ae6f21c2325610cefbb713704 Mon Sep 17 00:00:00 2001 From: Joe Date: Sat, 5 Nov 2022 20:16:25 +0000 Subject: [PATCH 04/10] + account details to Startupinfo map for ui to print --- cmd/clef/main.go | 19 ++++++++----------- signer/core/cliui.go | 2 +- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/cmd/clef/main.go b/cmd/clef/main.go index 54f3cee90012..014e0b40dbc5 100644 --- a/cmd/clef/main.go +++ b/cmd/clef/main.go @@ -635,10 +635,10 @@ func signer(c *cli.Context) error { // Establish the bidirectional communication, by creating a new UI backend and registering // it with the UI. - + ui.RegisterUIServer(core.NewUIServerAPI(apiImpl)) api = apiImpl - intapi := core.NewUIServerAPI(apiImpl) + intapi := core.NewUIServerAPI(apiImpl) // Audit logging if logfile := c.String(auditLogFlag.Name); logfile != "" { @@ -707,31 +707,28 @@ func signer(c *cli.Context) error { log.Info("Performing UI test") go testExternalUI(apiImpl) } - + // list accounts on startup accounts, err := intapi.ListAccounts(c.Context) if err != nil { utils.Fatalf(err.Error()) } - var addresses string - for _, account := range accounts { + var addresses string = "\n" + for i, account := range accounts { // concat string to avoid repeating "INFO" on terminal - addresses += fmt.Sprintf("%s", account.Address) + addresses += fmt.Sprintf("Account %v: %s at %s", i, account.Address, account.URL) addresses += "\n" } - // print account string to console using ui - ui.ShowInfo(addresses) - ui.OnSignerStartup(core.StartupInfo{ Info: map[string]interface{}{ + "known accounts": addresses, "intapi_version": core.InternalAPIVersion, "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 187eb1390af7..3165cfbb35af 100644 --- a/signer/core/cliui.go +++ b/signer/core/cliui.go @@ -40,7 +40,7 @@ func NewCommandlineUI() *CommandlineUI { } func (ui *CommandlineUI) RegisterUIServer(api *UIServerAPI) { - // noop + //noop } // readString reads a single line from stdin, trimming if from spaces, enforcing From 0176fa0c308157d8cd5af1cd2e7b2bfdeac55790 Mon Sep 17 00:00:00 2001 From: Joe Date: Sun, 6 Nov 2022 15:40:53 +0000 Subject: [PATCH 05/10] register API and call listAccounts from cliui fix linting fix linting fix typo: accoutns -> accounts --- cmd/clef/main.go | 15 --------------- signer/core/cliui.go | 26 +++++++++++++++++++++++--- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/cmd/clef/main.go b/cmd/clef/main.go index 014e0b40dbc5..9e02e92a4464 100644 --- a/cmd/clef/main.go +++ b/cmd/clef/main.go @@ -638,7 +638,6 @@ func signer(c *cli.Context) error { ui.RegisterUIServer(core.NewUIServerAPI(apiImpl)) api = apiImpl - intapi := core.NewUIServerAPI(apiImpl) // Audit logging if logfile := c.String(auditLogFlag.Name); logfile != "" { @@ -708,22 +707,8 @@ func signer(c *cli.Context) error { go testExternalUI(apiImpl) } - // list accounts on startup - accounts, err := intapi.ListAccounts(c.Context) - if err != nil { - utils.Fatalf(err.Error()) - } - - var addresses string = "\n" - for i, account := range accounts { - // concat string to avoid repeating "INFO" on terminal - addresses += fmt.Sprintf("Account %v: %s at %s", i, account.Address, account.URL) - addresses += "\n" - } - ui.OnSignerStartup(core.StartupInfo{ Info: map[string]interface{}{ - "known accounts": addresses, "intapi_version": core.InternalAPIVersion, "extapi_version": core.ExternalAPIVersion, "extapi_http": extapiURL, diff --git a/signer/core/cliui.go b/signer/core/cliui.go index 3165cfbb35af..59c62bce756e 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 @@ -242,6 +244,24 @@ func (ui *CommandlineUI) OnApprovedTx(tx ethapi.SignTransactionResult) { } func (ui *CommandlineUI) OnSignerStartup(info StartupInfo) { + accounts, err := ui.api.ListAccounts(context.Background()) + if err != nil { + fmt.Print("error listing accounts", err) + } + if len(accounts) == 0 { + fmt.Println("No accounts known to Clef") + } else { + // account info to string for nicer printing + var addresses string = "\n" + fmt.Println("Accounts known to Clef:") + for i, account := range accounts { + // concat string to avoid repeating "INFO" on terminal + addresses += fmt.Sprintf("Account %v: %s at %s", i, account.Address, account.URL) + addresses += "\n" + } + fmt.Print(addresses) + fmt.Println() + } fmt.Printf("------- Signer info -------\n") for k, v := range info.Info { fmt.Printf("* %v : %v\n", k, v) From 56e46c31b005c4832d0e4ba3df63ea7308c866d6 Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 7 Nov 2022 09:47:08 +0000 Subject: [PATCH 06/10] account listing -> separate func, rm whitespace --- cmd/clef/main.go | 3 --- signer/core/cliui.go | 21 +++++++++++++-------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/cmd/clef/main.go b/cmd/clef/main.go index 9e02e92a4464..2c32237f6405 100644 --- a/cmd/clef/main.go +++ b/cmd/clef/main.go @@ -635,7 +635,6 @@ func signer(c *cli.Context) error { // Establish the bidirectional communication, by creating a new UI backend and registering // it with the UI. - ui.RegisterUIServer(core.NewUIServerAPI(apiImpl)) api = apiImpl @@ -701,12 +700,10 @@ 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) } - ui.OnSignerStartup(core.StartupInfo{ Info: map[string]interface{}{ "intapi_version": core.InternalAPIVersion, diff --git a/signer/core/cliui.go b/signer/core/cliui.go index 59c62bce756e..1f6765d69f84 100644 --- a/signer/core/cliui.go +++ b/signer/core/cliui.go @@ -243,25 +243,30 @@ func (ui *CommandlineUI) OnApprovedTx(tx ethapi.SignTransactionResult) { } } -func (ui *CommandlineUI) OnSignerStartup(info StartupInfo) { +func (ui *CommandlineUI) ShowAccounts() string { accounts, err := ui.api.ListAccounts(context.Background()) if err != nil { fmt.Print("error listing accounts", err) } + var resp string if len(accounts) == 0 { - fmt.Println("No accounts known to Clef") + resp = "No accounts known to Clef" } else { // account info to string for nicer printing - var addresses string = "\n" - fmt.Println("Accounts known to Clef:") + var addresses string = "" for i, account := range accounts { // concat string to avoid repeating "INFO" on terminal - addresses += fmt.Sprintf("Account %v: %s at %s", i, account.Address, account.URL) - addresses += "\n" + addresses += fmt.Sprintf("Account %v: %s at %s\n", i, account.Address, account.URL) } - fmt.Print(addresses) - fmt.Println() + resp = addresses } + return resp +} + +func (ui *CommandlineUI) OnSignerStartup(info StartupInfo) { + addresses := ui.ShowAccounts() + fmt.Print("Accounts known to Clef:\n\n") + fmt.Printf("%s", addresses) fmt.Printf("------- Signer info -------\n") for k, v := range info.Info { fmt.Printf("* %v : %v\n", k, v) From adc44ff00cdf8005a54850c37767e088560c1a71 Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 7 Nov 2022 09:54:32 +0000 Subject: [PATCH 07/10] minimize print statements by bundling info into str --- signer/core/cliui.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/signer/core/cliui.go b/signer/core/cliui.go index 1f6765d69f84..c41f3de27522 100644 --- a/signer/core/cliui.go +++ b/signer/core/cliui.go @@ -253,7 +253,7 @@ func (ui *CommandlineUI) ShowAccounts() string { resp = "No accounts known to Clef" } else { // account info to string for nicer printing - var addresses string = "" + var addresses string = "\nAccounts known to Clef:\n" for i, account := range accounts { // concat string to avoid repeating "INFO" on terminal addresses += fmt.Sprintf("Account %v: %s at %s\n", i, account.Address, account.URL) @@ -265,9 +265,8 @@ func (ui *CommandlineUI) ShowAccounts() string { func (ui *CommandlineUI) OnSignerStartup(info StartupInfo) { addresses := ui.ShowAccounts() - fmt.Print("Accounts known to Clef:\n\n") fmt.Printf("%s", addresses) - fmt.Printf("------- Signer info -------\n") + fmt.Printf("\n------- Signer info -------\n") for k, v := range info.Info { fmt.Printf("* %v : %v\n", k, v) } From c1dbc024828cab56d6a06fd91f20db435842157d Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 7 Nov 2022 11:04:11 +0000 Subject: [PATCH 08/10] make call to showAccounts async --- signer/core/cliui.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/signer/core/cliui.go b/signer/core/cliui.go index c41f3de27522..aa1eb7a74fdc 100644 --- a/signer/core/cliui.go +++ b/signer/core/cliui.go @@ -243,7 +243,7 @@ func (ui *CommandlineUI) OnApprovedTx(tx ethapi.SignTransactionResult) { } } -func (ui *CommandlineUI) ShowAccounts() string { +func (ui *CommandlineUI) showAccounts() string { accounts, err := ui.api.ListAccounts(context.Background()) if err != nil { fmt.Print("error listing accounts", err) @@ -264,8 +264,10 @@ func (ui *CommandlineUI) ShowAccounts() string { } func (ui *CommandlineUI) OnSignerStartup(info StartupInfo) { - addresses := ui.ShowAccounts() - fmt.Printf("%s", addresses) + go func() { + addresses := ui.showAccounts() + fmt.Printf("%s", addresses) + }() fmt.Printf("\n------- Signer info -------\n") for k, v := range info.Info { fmt.Printf("* %v : %v\n", k, v) From 4131dddf29c138f224bf91b9d7d9a48774f51b53 Mon Sep 17 00:00:00 2001 From: Joe Date: Mon, 7 Nov 2022 13:26:13 +0000 Subject: [PATCH 09/10] minimize go func, rm whitespace --- cmd/clef/main.go | 1 - signer/core/cliui.go | 8 ++------ 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/cmd/clef/main.go b/cmd/clef/main.go index 2c32237f6405..9e86326346e1 100644 --- a/cmd/clef/main.go +++ b/cmd/clef/main.go @@ -646,7 +646,6 @@ func signer(c *cli.Context) error { } log.Info("Audit logs configured", "file", logfile) } - // register signer API with server var ( extapiURL = "n/a" diff --git a/signer/core/cliui.go b/signer/core/cliui.go index aa1eb7a74fdc..ec75db3f425d 100644 --- a/signer/core/cliui.go +++ b/signer/core/cliui.go @@ -252,22 +252,18 @@ func (ui *CommandlineUI) showAccounts() string { if len(accounts) == 0 { resp = "No accounts known to Clef" } else { - // account info to string for nicer printing var addresses string = "\nAccounts known to Clef:\n" for i, account := range accounts { - // concat string to avoid repeating "INFO" on terminal addresses += fmt.Sprintf("Account %v: %s at %s\n", i, account.Address, account.URL) } resp = addresses } + fmt.Printf("%s", resp) return resp } func (ui *CommandlineUI) OnSignerStartup(info StartupInfo) { - go func() { - addresses := ui.showAccounts() - fmt.Printf("%s", addresses) - }() + go ui.showAccounts() fmt.Printf("\n------- Signer info -------\n") for k, v := range info.Info { fmt.Printf("* %v : %v\n", k, v) From cffb417592f4779754c978dbf9bfa25e6c5686de Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Mon, 7 Nov 2022 14:41:43 +0100 Subject: [PATCH 10/10] signer/core: minor changes in cliui account display --- signer/core/cliui.go | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/signer/core/cliui.go b/signer/core/cliui.go index ec75db3f425d..6278e53c08a0 100644 --- a/signer/core/cliui.go +++ b/signer/core/cliui.go @@ -243,29 +243,28 @@ func (ui *CommandlineUI) OnApprovedTx(tx ethapi.SignTransactionResult) { } } -func (ui *CommandlineUI) showAccounts() string { +func (ui *CommandlineUI) showAccounts() { accounts, err := ui.api.ListAccounts(context.Background()) if err != nil { - fmt.Print("error listing accounts", err) + log.Error("Error listing accounts", "err", err) + return } - var resp string if len(accounts) == 0 { - resp = "No accounts known to Clef" - } else { - var addresses string = "\nAccounts known to Clef:\n" - for i, account := range accounts { - addresses += fmt.Sprintf("Account %v: %s at %s\n", i, account.Address, account.URL) - } - resp = addresses + 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.Printf("%s", resp) - return resp + fmt.Print(out.String()) } func (ui *CommandlineUI) OnSignerStartup(info StartupInfo) { - go ui.showAccounts() - fmt.Printf("\n------- 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() }