github.com/status-im/status-go@v1.1.0/services/connector/commands/personal_sign.go (about) 1 package commands 2 3 import ( 4 "database/sql" 5 "errors" 6 "fmt" 7 8 persistence "github.com/status-im/status-go/services/connector/database" 9 "github.com/status-im/status-go/signal" 10 ) 11 12 var ( 13 ErrInvalidParamsStructure = errors.New("invalid params structure") 14 ) 15 16 type PersonalSignCommand struct { 17 Db *sql.DB 18 ClientHandler ClientSideHandlerInterface 19 } 20 21 type PersonalSignParams struct { 22 Challenge string `json:"challenge"` 23 Address string `json:"address"` 24 } 25 26 func (r *RPCRequest) getPersonalSignParams() (*PersonalSignParams, error) { 27 if r.Params == nil || len(r.Params) == 0 { 28 return nil, ErrEmptyRPCParams 29 } 30 31 paramMap, ok := r.Params[0].(map[string]interface{}) 32 if !ok { 33 return nil, ErrInvalidParamsStructure 34 } 35 36 // Extract the Challenge and Address fields from paramMap 37 challenge, ok := paramMap["challenge"].(string) 38 if !ok { 39 return nil, fmt.Errorf("missing or invalid 'challenge' field") 40 } 41 42 address, ok := paramMap["address"].(string) 43 if !ok { 44 return nil, fmt.Errorf("missing or invalid 'address' field") 45 } 46 47 // Create and return the PersonalSignParams 48 return &PersonalSignParams{ 49 Challenge: challenge, 50 Address: address, 51 }, nil 52 } 53 54 func (c *PersonalSignCommand) Execute(request RPCRequest) (interface{}, error) { 55 err := request.Validate() 56 if err != nil { 57 return "", err 58 } 59 60 params, err := request.getPersonalSignParams() 61 if err != nil { 62 return "", err 63 } 64 65 dApp, err := persistence.SelectDAppByUrl(c.Db, request.URL) 66 if err != nil { 67 return "", err 68 } 69 70 if dApp == nil { 71 return "", ErrDAppIsNotPermittedByUser 72 } 73 74 return c.ClientHandler.RequestPersonalSign(signal.ConnectorDApp{ 75 URL: request.URL, 76 Name: request.Name, 77 IconURL: request.IconURL, 78 }, params.Challenge, params.Address) 79 }