github.com/Finschia/finschia-sdk@v0.48.1/x/authz/keeper/msg_server.go (about) 1 package keeper 2 3 import ( 4 "context" 5 6 sdk "github.com/Finschia/finschia-sdk/types" 7 sdkerrors "github.com/Finschia/finschia-sdk/types/errors" 8 "github.com/Finschia/finschia-sdk/x/authz" 9 ) 10 11 var _ authz.MsgServer = Keeper{} 12 13 // GrantAuthorization implements the MsgServer.Grant method to create a new grant. 14 func (k Keeper) Grant(goCtx context.Context, msg *authz.MsgGrant) (*authz.MsgGrantResponse, error) { 15 ctx := sdk.UnwrapSDKContext(goCtx) 16 grantee, err := sdk.AccAddressFromBech32(msg.Grantee) 17 if err != nil { 18 return nil, err 19 } 20 21 granter, err := sdk.AccAddressFromBech32(msg.Granter) 22 if err != nil { 23 return nil, err 24 } 25 26 authorization := msg.GetAuthorization() 27 if authorization == nil { 28 return nil, sdkerrors.ErrUnpackAny.Wrap("Authorization is not present in the msg") 29 } 30 31 t := authorization.MsgTypeURL() 32 if k.router.HandlerByTypeURL(t) == nil { 33 return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "%s doesn't exist.", t) 34 } 35 36 err = k.SaveGrant(ctx, grantee, granter, authorization, msg.Grant.Expiration) 37 if err != nil { 38 return nil, err 39 } 40 41 return &authz.MsgGrantResponse{}, nil 42 } 43 44 // RevokeAuthorization implements the MsgServer.Revoke method. 45 func (k Keeper) Revoke(goCtx context.Context, msg *authz.MsgRevoke) (*authz.MsgRevokeResponse, error) { 46 ctx := sdk.UnwrapSDKContext(goCtx) 47 grantee, err := sdk.AccAddressFromBech32(msg.Grantee) 48 if err != nil { 49 return nil, err 50 } 51 granter, err := sdk.AccAddressFromBech32(msg.Granter) 52 if err != nil { 53 return nil, err 54 } 55 56 err = k.DeleteGrant(ctx, grantee, granter, msg.MsgTypeUrl) 57 if err != nil { 58 return nil, err 59 } 60 61 return &authz.MsgRevokeResponse{}, nil 62 } 63 64 // Exec implements the MsgServer.Exec method. 65 func (k Keeper) Exec(goCtx context.Context, msg *authz.MsgExec) (*authz.MsgExecResponse, error) { 66 ctx := sdk.UnwrapSDKContext(goCtx) 67 grantee, err := sdk.AccAddressFromBech32(msg.Grantee) 68 if err != nil { 69 return nil, err 70 } 71 72 msgs, err := msg.GetMessages() 73 if err != nil { 74 return nil, err 75 } 76 77 results, err := k.DispatchActions(ctx, grantee, msgs) 78 if err != nil { 79 return nil, err 80 } 81 82 return &authz.MsgExecResponse{Results: results}, nil 83 }