Search Apps Documentation Source Content File Folder Download Copy Actions Download

property_config.gno

5.53 Kb · 117 lines
  1package block
  2
  3import (
  4	"chain"
  5
  6	"gno.land/p/akkadia/v0/accesscontrol"
  7	"gno.land/p/akkadia/v0/validate"
  8	"gno.land/r/akkadia/v0/admin"
  9)
 10
 11const (
 12	SetCreatePoliciesEvent  = "SetCreatePolicies"
 13	SetUpdatePoliciesEvent  = "SetUpdatePolicies"
 14	SetInstallPoliciesEvent = "SetInstallPolicies"
 15
 16	blockPropertyMaxPairs = 64
 17)
 18
 19var (
 20	createValidator = validate.NewValidator(
 21		validate.DefaultStringPolicy{LenKind: validate.StringStandard, AllowEmpty: true},
 22		[]validate.StringPolicy{
 23			validate.NewStringPolicy("name", validate.StringPlain, validate.StringStandard, maxBlockNameLength, true, false),
 24			validate.NewStringPolicy("blockType", validate.StringPlain, validate.StringText, 0, true, true),
 25			validate.NewStringPolicy("layer", validate.StringPlain, validate.StringText, 0, true, true),
 26			validate.NewStringPolicy("drawType", validate.StringPlain, validate.StringText, 0, true, true),
 27			validate.NewStringPolicy("textureLayer", validate.StringPlain, validate.StringText, 0, true, true),
 28			validate.NewStringPolicy("textureURL", validate.StringPlain, validate.StringText, 0, true, true),
 29			validate.NewStringPolicy("previewURL", validate.StringPlain, validate.StringText, 0, true, true),
 30			validate.NewStringPolicy("maxSupply", validate.StringInt, validate.StringShort, 0, true, false),
 31			validate.NewStringPolicy("mintPrice", validate.StringUint, validate.StringShort, 0, true, false),
 32			validate.NewStringPolicy("usePrice", validate.StringUint, validate.StringShort, 0, true, false),
 33			validate.NewStringPolicy("installerBps", validate.StringUint, validate.StringShort, 0, true, false),
 34			validate.NewStringPolicy("shape", validate.StringUint, validate.StringShort, 0, true, false),
 35			validate.NewStringPolicy("state", validate.StringUint, validate.StringShort, 0, true, false),
 36			validate.NewStringPolicy("emission", validate.StringUint, validate.StringShort, 0, true, false),
 37		},
 38		[]string{"id", "creator"},
 39		blockPropertyMaxPairs,
 40		true,
 41	)
 42
 43	updateValidator = validate.NewValidator(
 44		validate.DefaultStringPolicy{LenKind: validate.StringStandard, AllowEmpty: true},
 45		[]validate.StringPolicy{
 46			validate.NewStringPolicy("name", validate.StringPlain, validate.StringStandard, maxBlockNameLength, false, false),
 47			validate.NewStringPolicy("blockType", validate.StringPlain, validate.StringText, 0, false, true),
 48			validate.NewStringPolicy("layer", validate.StringPlain, validate.StringText, 0, false, true),
 49			validate.NewStringPolicy("drawType", validate.StringPlain, validate.StringText, 0, false, true),
 50			validate.NewStringPolicy("textureLayer", validate.StringPlain, validate.StringText, 0, false, true),
 51			validate.NewStringPolicy("textureURL", validate.StringPlain, validate.StringText, 0, false, true),
 52			validate.NewStringPolicy("previewURL", validate.StringPlain, validate.StringText, 0, false, true),
 53			validate.NewStringPolicy("maxSupply", validate.StringInt, validate.StringShort, 0, false, false),
 54			validate.NewStringPolicy("mintPrice", validate.StringUint, validate.StringShort, 0, false, false),
 55			validate.NewStringPolicy("usePrice", validate.StringUint, validate.StringShort, 0, false, false),
 56			validate.NewStringPolicy("installerBps", validate.StringUint, validate.StringShort, 0, false, false),
 57			validate.NewStringPolicy("shape", validate.StringUint, validate.StringShort, 0, false, false),
 58			validate.NewStringPolicy("state", validate.StringUint, validate.StringShort, 0, false, false),
 59			validate.NewStringPolicy("emission", validate.StringUint, validate.StringShort, 0, false, false),
 60		},
 61		[]string{"id", "creator"},
 62		blockPropertyMaxPairs,
 63		true,
 64	)
 65
 66	installValidator = validate.NewValidator(
 67		validate.DefaultStringPolicy{LenKind: validate.StringStandard, AllowEmpty: true},
 68		[]validate.StringPolicy{
 69			validate.NewStringPolicy("content", validate.StringPlain, validate.StringText, 0, false, true),
 70		},
 71		[]string{"id", "position", "blockId", "installer", "shape", "state"},
 72		blockPropertyMaxPairs,
 73		true,
 74	)
 75)
 76
 77func SetCreatePolicies(cur realm, defaultPolicy validate.DefaultStringPolicy, newPolicies []validate.StringPolicy, pairMax int, denyKeys []string, allowUnknown bool) {
 78	assertNotFrozen()
 79	accesscontrol.AssertIsAdmin(0, cur, admin.IsAdmin)
 80	// NewValidator copies denyKeys and stores policies by value in its own map.
 81	next := validate.NewValidator(defaultPolicy, newPolicies, denyKeys, pairMax, allowUnknown)
 82	createValidator = next
 83
 84	chain.Emit(SetCreatePoliciesEvent)
 85}
 86
 87func SetUpdatePolicies(cur realm, defaultPolicy validate.DefaultStringPolicy, newPolicies []validate.StringPolicy, pairMax int, denyKeys []string, allowUnknown bool) {
 88	assertNotFrozen()
 89	accesscontrol.AssertIsAdmin(0, cur, admin.IsAdmin)
 90	// NewValidator copies denyKeys and stores policies by value in its own map.
 91	next := validate.NewValidator(defaultPolicy, newPolicies, denyKeys, pairMax, allowUnknown)
 92	updateValidator = next
 93
 94	chain.Emit(SetUpdatePoliciesEvent)
 95}
 96
 97func SetInstallPolicies(cur realm, defaultPolicy validate.DefaultStringPolicy, newPolicies []validate.StringPolicy, pairMax int, denyKeys []string, allowUnknown bool) {
 98	assertNotFrozen()
 99	accesscontrol.AssertIsAdmin(0, cur, admin.IsAdmin)
100	// NewValidator copies denyKeys and stores policies by value in its own map.
101	next := validate.NewValidator(defaultPolicy, newPolicies, denyKeys, pairMax, allowUnknown)
102	installValidator = next
103
104	chain.Emit(SetInstallPoliciesEvent)
105}
106
107func GetCreatePolicies() validate.Validator {
108	return createValidator.Clone()
109}
110
111func GetUpdatePolicies() validate.Validator {
112	return updateValidator.Clone()
113}
114
115func GetInstallPolicies() validate.Validator {
116	return installValidator.Clone()
117}