github.com/status-im/status-go@v1.1.0/services/connector/commands/request_permissions.go (about)

     1  package commands
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"time"
     7  )
     8  
     9  type RequestPermissionsCommand struct{}
    10  
    11  type Permission struct {
    12  	ParentCapability string `json:"parentCapability"`
    13  	Date             string `json:"date"`
    14  }
    15  
    16  var (
    17  	ErrNoRequestPermissionsParamsFound = errors.New("no request permission params found")
    18  	ErrMultipleKeysFound               = errors.New("multiple methodNames found in request permissions params")
    19  	ErrInvalidParamType                = errors.New("invalid parameter type")
    20  )
    21  
    22  func (r *RPCRequest) getRequestPermissionsParam() (string, error) {
    23  	if r.Params == nil || len(r.Params) == 0 {
    24  		return "", ErrEmptyRPCParams
    25  	}
    26  
    27  	paramMap, ok := r.Params[0].(map[string]interface{})
    28  	if !ok {
    29  		return "", ErrInvalidParamType
    30  	}
    31  
    32  	if len(paramMap) > 1 {
    33  		return "", ErrMultipleKeysFound
    34  	}
    35  
    36  	for methodName := range paramMap {
    37  		return methodName, nil
    38  	}
    39  
    40  	return "", ErrNoRequestPermissionsParamsFound
    41  }
    42  
    43  func (c *RequestPermissionsCommand) getPermissionResponse(methodName string) Permission {
    44  	date := time.Now().UnixNano() / int64(time.Millisecond)
    45  
    46  	response := Permission{
    47  		ParentCapability: methodName,
    48  		Date:             fmt.Sprintf("%d", date),
    49  	}
    50  
    51  	return response
    52  }
    53  
    54  func (c *RequestPermissionsCommand) Execute(request RPCRequest) (interface{}, error) {
    55  	err := request.Validate()
    56  	if err != nil {
    57  		return "", err
    58  	}
    59  
    60  	methodName, err := request.getRequestPermissionsParam()
    61  	if err != nil {
    62  		return "", err
    63  	}
    64  
    65  	return c.getPermissionResponse(methodName), nil
    66  }