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 }