Enforce permission less permissive than default
This commit is contained in:
@@ -183,6 +183,62 @@ func TestCreateWithParamPermissions(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// ensure that the user cannot set the code instantiate permission to something more permissive
|
||||
// than the default
|
||||
func TestEnforceValidPermissionsOnCreate(t *testing.T) {
|
||||
ctx, keepers := CreateTestInput(t, false, SupportedFeatures)
|
||||
keeper := keepers.WasmKeeper
|
||||
contractKeeper := keepers.ContractKeeper
|
||||
|
||||
deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))
|
||||
creator := keepers.Faucet.NewFundedAccount(ctx, deposit...)
|
||||
|
||||
onlyCreator := types.AccessTypeOnlyAddress.With(creator)
|
||||
|
||||
specs := map[string]struct {
|
||||
defaultPermssion types.AccessType
|
||||
requestedPermission *types.AccessConfig
|
||||
// grantedPermission is set iff no error
|
||||
grantedPermission types.AccessConfig
|
||||
// expError is nil iff the request is allowed
|
||||
expError *sdkerrors.Error
|
||||
}{
|
||||
"override everybody": {
|
||||
defaultPermssion: types.AccessTypeEverybody,
|
||||
requestedPermission: &onlyCreator,
|
||||
grantedPermission: onlyCreator,
|
||||
},
|
||||
"default to everybody": {
|
||||
defaultPermssion: types.AccessTypeEverybody,
|
||||
requestedPermission: nil,
|
||||
grantedPermission: types.AccessConfig{Permission: types.AccessTypeEverybody},
|
||||
},
|
||||
"cannot override nobody": {
|
||||
defaultPermssion: types.AccessTypeNobody,
|
||||
requestedPermission: &onlyCreator,
|
||||
expError: sdkerrors.ErrUnauthorized,
|
||||
},
|
||||
"default to nobody": {
|
||||
defaultPermssion: types.AccessTypeNobody,
|
||||
requestedPermission: nil,
|
||||
grantedPermission: types.AccessConfig{Permission: types.AccessTypeNobody},
|
||||
},
|
||||
}
|
||||
for msg, spec := range specs {
|
||||
t.Run(msg, func(t *testing.T) {
|
||||
params := types.DefaultParams()
|
||||
params.InstantiateDefaultPermission = spec.defaultPermssion
|
||||
keeper.SetParams(ctx, params)
|
||||
codeID, err := contractKeeper.Create(ctx, creator, hackatomWasm, spec.requestedPermission)
|
||||
require.True(t, spec.expError.Is(err), err)
|
||||
if spec.expError == nil {
|
||||
codeInfo := keeper.GetCodeInfo(ctx, codeID)
|
||||
require.Equal(t, codeInfo.InstantiateConfig, spec.grantedPermission)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestCreateDuplicate(t *testing.T) {
|
||||
ctx, keepers := CreateTestInput(t, false, SupportedFeatures)
|
||||
keeper := keepers.ContractKeeper
|
||||
|
||||
Reference in New Issue
Block a user