property_config.gno
5.33 Kb · 131 lines
1package personal_world
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 SetWorldCreatePoliciesEvent = "SetWorldCreatePolicies"
13 SetWorldUpdatePoliciesEvent = "SetWorldUpdatePolicies"
14 SetSizeInfoPoliciesEvent = "SetSizeInfoPolicies"
15 SetBiomeInfoPoliciesEvent = "SetBiomeInfoPolicies"
16
17 worldPropertyMaxPairs = 64
18 sizeInfoMaxPairs = 16
19 biomeInfoMaxPairs = 32
20)
21
22var (
23 worldCreateValidator = validate.NewValidator(
24 validate.DefaultStringPolicy{LenKind: validate.StringStandard, AllowEmpty: true},
25 []validate.StringPolicy{
26 validate.NewStringPolicy("biome", validate.StringPlain, validate.StringShort, 0, true, true),
27 validate.NewStringPolicy("name", validate.StringPlain, validate.StringStandard, 0, true, true),
28 validate.NewStringPolicy("slug", validate.StringPlain, validate.StringStandard, 0, true, true),
29 validate.NewStringPolicy("seed", validate.StringInt, validate.StringShort, 0, true, false),
30 validate.NewStringPolicy("description", validate.StringPlain, validate.StringText, 0, false, true),
31 },
32 []string{"id", "owner", "sizeId", "size", "isVisible", "createdAt", "updatedAt", "totalPaid"},
33 worldPropertyMaxPairs,
34 true,
35 )
36
37 worldUpdateValidator = validate.NewValidator(
38 validate.DefaultStringPolicy{LenKind: validate.StringStandard, AllowEmpty: true},
39 []validate.StringPolicy{
40 validate.NewStringPolicy("name", validate.StringPlain, validate.StringStandard, 0, false, true),
41 validate.NewStringPolicy("slug", validate.StringPlain, validate.StringStandard, 0, false, true),
42 validate.NewStringPolicy("description", validate.StringPlain, validate.StringText, 0, false, true),
43 },
44 []string{"id", "owner", "sizeId", "size", "isVisible", "createdAt", "updatedAt", "totalPaid", "biome", "seed"},
45 worldPropertyMaxPairs,
46 true,
47 )
48
49 sizeInfoValidator = validate.NewValidator(
50 validate.DefaultStringPolicy{LenKind: validate.StringStandard, AllowEmpty: true},
51 []validate.StringPolicy{
52 validate.NewStringPolicy("id", validate.StringInt, validate.StringShort, 0, true, false),
53 validate.NewStringPolicy("size", validate.StringInt, validate.StringShort, 0, true, false),
54 validate.NewStringPolicy("cost", validate.StringInt, validate.StringShort, 0, true, false),
55 },
56 nil,
57 sizeInfoMaxPairs,
58 true,
59 )
60
61 biomeInfoValidator = validate.NewValidator(
62 validate.DefaultStringPolicy{LenKind: validate.StringStandard, AllowEmpty: true},
63 []validate.StringPolicy{
64 validate.NewStringPolicy("biome", validate.StringPlain, validate.StringShort, 0, true, true),
65 validate.NewStringPolicy("cost", validate.StringInt, validate.StringShort, 0, true, false),
66 validate.NewStringPolicy("priceMultiplierBPS", validate.StringInt, validate.StringShort, 0, true, false),
67 validate.NewStringPolicy("name", validate.StringPlain, validate.StringStandard, 100, false, true),
68 validate.NewStringPolicy("description", validate.StringPlain, validate.StringText, 0, false, true),
69 validate.NewStringPolicy("theme", validate.StringPlain, validate.StringText, 0, false, true),
70 },
71 nil,
72 biomeInfoMaxPairs,
73 true,
74 )
75)
76
77func SetWorldCreatePolicies(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 worldCreateValidator = next
83
84 chain.Emit(SetWorldCreatePoliciesEvent)
85}
86
87func SetWorldUpdatePolicies(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 worldUpdateValidator = next
93
94 chain.Emit(SetWorldUpdatePoliciesEvent)
95}
96
97func SetSizeInfoPolicies(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 sizeInfoValidator = next
103
104 chain.Emit(SetSizeInfoPoliciesEvent)
105}
106
107func SetBiomeInfoPolicies(cur realm, defaultPolicy validate.DefaultStringPolicy, newPolicies []validate.StringPolicy, pairMax int, denyKeys []string, allowUnknown bool) {
108 assertNotFrozen()
109 accesscontrol.AssertIsAdmin(0, cur, admin.IsAdmin)
110 // NewValidator copies denyKeys and stores policies by value in its own map.
111 next := validate.NewValidator(defaultPolicy, newPolicies, denyKeys, pairMax, allowUnknown)
112 biomeInfoValidator = next
113
114 chain.Emit(SetBiomeInfoPoliciesEvent)
115}
116
117func GetWorldCreatePolicies() validate.Validator {
118 return worldCreateValidator.Clone()
119}
120
121func GetWorldUpdatePolicies() validate.Validator {
122 return worldUpdateValidator.Clone()
123}
124
125func GetSizeInfoPolicies() validate.Validator {
126 return sizeInfoValidator.Clone()
127}
128
129func GetBiomeInfoPolicies() validate.Validator {
130 return biomeInfoValidator.Clone()
131}