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  }