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}