From 346c15bebd6e8399edcbc176789bc1fe9be6a844 Mon Sep 17 00:00:00 2001 From: shwoop Date: Wed, 2 Jul 2025 16:52:45 +0200 Subject: [PATCH] snoop on info messages sent to UI --- signer/core/api_test.go | 8 +++++--- signer/core/signed_data.go | 2 +- signer/core/signed_data_test.go | 3 ++- signer/core/siwevalidation.go | 4 ++-- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/signer/core/api_test.go b/signer/core/api_test.go index 054afde5da..f7514f2bd6 100644 --- a/signer/core/api_test.go +++ b/signer/core/api_test.go @@ -41,8 +41,9 @@ import ( // Used for testing type headlessUi struct { - approveCh chan string // to send approve/deny - inputCh chan string // to send password + approveCh chan string // to send approve/deny + inputCh chan string // to send password + infoMessages []string } func (ui *headlessUi) OnInputRequired(info core.UserInputRequest) (core.UserInputResponse, error) { @@ -104,6 +105,7 @@ func (ui *headlessUi) ShowError(message string) { func (ui *headlessUi) ShowInfo(message string) { //stdout is used by communication fmt.Fprintln(os.Stderr, message) + ui.infoMessages = append(ui.infoMessages, message) } func tmpDirName(t *testing.T) string { @@ -120,7 +122,7 @@ func setup(t *testing.T, enableSIWE bool) (*core.SignerAPI, *headlessUi) { if err != nil { t.Fatal(err.Error()) } - ui := &headlessUi{make(chan string, 20), make(chan string, 20)} + ui := &headlessUi{make(chan string, 20), make(chan string, 20), []string{}} am := core.StartClefAccountManager(tmpDirName(t), true, true, "") api := core.NewSignerAPI(am, 1337, true, ui, db, true, &storage.NoStorage{}, enableSIWE) return api, ui diff --git a/signer/core/signed_data.go b/signer/core/signed_data.go index 63a01ad470..0919cf08b8 100644 --- a/signer/core/signed_data.go +++ b/signer/core/signed_data.go @@ -42,7 +42,7 @@ func (api *SignerAPI) sign(req *SignDataRequest, legacyV bool) (hexutil.Bytes, e // perform SIWE validation err := validateSIWE(req) if err != nil { - if errors.Is(err, ErrMalformedSIWEMEssage) { + if errors.Is(err, ErrMalformedSIWEMessage) { api.UI.ShowInfo(err.Error()) } else { return nil, err diff --git a/signer/core/signed_data_test.go b/signer/core/signed_data_test.go index 4ea1f93a15..85bfbc609d 100644 --- a/signer/core/signed_data_test.go +++ b/signer/core/signed_data_test.go @@ -1196,7 +1196,8 @@ func TestSignInWithEtheriumWarning(t *testing.T) { control.inputCh <- "a_long_password" signature, err := api.SignData(ctx, apitypes.TextPlain.Mime, a, hexutil.Encode([]byte(message))) require.NoError(t, err) - // todo: check UI for warning message + require.Equal(t, 1, len(control.infoMessages)) + require.Equal(t, core.ErrMalformedSIWEMessage.Error(), control.infoMessages[0]) if signature == nil || len(signature) != 65 { t.Errorf("Expected 65 byte signature (got %d bytes)", len(signature)) diff --git a/signer/core/siwevalidation.go b/signer/core/siwevalidation.go index 269a842c64..13c4478619 100644 --- a/signer/core/siwevalidation.go +++ b/signer/core/siwevalidation.go @@ -77,7 +77,7 @@ var siweMessageRegex = regexp.MustCompile(`(?m)^` + messageSize + scheme + domai uri + version + chainID + nonce + issuedAt + expiration + notBefore + requestID + resources + `$`) -var ErrMalformedSIWEMEssage = errors.New("the message is asking to sign in with Ethereum but does not conform to EIP-4361") +var ErrMalformedSIWEMessage = errors.New("the message is asking to sign in with Ethereum but does not conform to EIP-4361") func validateSIWE(req *SignDataRequest) error { for _, message := range req.Messages { @@ -91,7 +91,7 @@ func validateSIWE(req *SignDataRequest) error { patterns := siweMessageRegex.FindStringSubmatch(s) if patterns == nil { - return ErrMalformedSIWEMEssage + return ErrMalformedSIWEMessage } scheme := "https" if patterns[1] != "" {