cosmos-sdk/stack/helperware.go

65 lines
1.7 KiB
Go
Raw Normal View History

2017-07-06 20:37:45 -07:00
//nolint
2017-06-29 11:02:38 -07:00
package stack
import (
sdk "github.com/cosmos/cosmos-sdk"
"github.com/cosmos/cosmos-sdk/errors"
"github.com/cosmos/cosmos-sdk/state"
2017-06-29 11:02:38 -07:00
)
const (
2017-07-12 07:53:07 -07:00
NameCheck = "check"
NameGrant = "grant"
2017-06-29 11:02:38 -07:00
)
// CheckMiddleware returns an error if the tx doesn't have auth of this
// Required Actor, otherwise passes along the call untouched
type CheckMiddleware struct {
Required sdk.Actor
2017-07-30 14:26:25 -07:00
PassInitState
PassInitValidate
2017-06-29 11:02:38 -07:00
}
var _ Middleware = CheckMiddleware{}
func (_ CheckMiddleware) Name() string {
return NameCheck
}
func (p CheckMiddleware) CheckTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx, next sdk.Checker) (res sdk.CheckResult, err error) {
2017-06-29 11:02:38 -07:00
if !ctx.HasPermission(p.Required) {
2017-07-03 05:50:33 -07:00
return res, errors.ErrUnauthorized()
2017-06-29 11:02:38 -07:00
}
return next.CheckTx(ctx, store, tx)
}
func (p CheckMiddleware) DeliverTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx, next sdk.Deliver) (res sdk.DeliverResult, err error) {
2017-06-29 11:02:38 -07:00
if !ctx.HasPermission(p.Required) {
2017-07-03 05:50:33 -07:00
return res, errors.ErrUnauthorized()
2017-06-29 11:02:38 -07:00
}
return next.DeliverTx(ctx, store, tx)
}
// GrantMiddleware tries to set the permission to this Actor, which may be prohibited
type GrantMiddleware struct {
Auth sdk.Actor
2017-07-30 14:26:25 -07:00
PassInitState
PassInitValidate
2017-06-29 11:02:38 -07:00
}
var _ Middleware = GrantMiddleware{}
func (_ GrantMiddleware) Name() string {
return NameGrant
}
func (g GrantMiddleware) CheckTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx, next sdk.Checker) (res sdk.CheckResult, err error) {
2017-06-29 11:02:38 -07:00
ctx = ctx.WithPermissions(g.Auth)
return next.CheckTx(ctx, store, tx)
}
func (g GrantMiddleware) DeliverTx(ctx sdk.Context, store state.SimpleDB, tx sdk.Tx, next sdk.Deliver) (res sdk.DeliverResult, err error) {
2017-06-29 11:02:38 -07:00
ctx = ctx.WithPermissions(g.Auth)
return next.DeliverTx(ctx, store, tx)
}