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  }