property_config.gno
2.59 Kb · 71 lines
1package chunk
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
15 worldPropertyMaxPairs = 64
16)
17
18var (
19 worldCreateValidator = validate.NewValidator(
20 validate.DefaultStringPolicy{LenKind: validate.StringStandard, AllowEmpty: true},
21 []validate.StringPolicy{
22 validate.NewStringPolicy("biome", validate.StringPlain, validate.StringShort, 0, true, false),
23 validate.NewStringPolicy("name", validate.StringPlain, validate.StringStandard, 0, true, false),
24 validate.NewStringPolicy("slug", validate.StringPlain, validate.StringStandard, 0, true, false),
25 validate.NewStringPolicy("seed", validate.StringInt, validate.StringShort, 0, true, false),
26 },
27 []string{"id", "createdAt", "updatedAt"},
28 worldPropertyMaxPairs,
29 true,
30 )
31
32 worldUpdateValidator = validate.NewValidator(
33 validate.DefaultStringPolicy{LenKind: validate.StringStandard, AllowEmpty: true},
34 []validate.StringPolicy{
35 validate.NewStringPolicy("biome", validate.StringPlain, validate.StringShort, 0, false, false),
36 validate.NewStringPolicy("name", validate.StringPlain, validate.StringStandard, 0, false, false),
37 validate.NewStringPolicy("slug", validate.StringPlain, validate.StringStandard, 0, false, false),
38 },
39 []string{"id", "seed", "createdAt", "updatedAt"},
40 worldPropertyMaxPairs,
41 true,
42 )
43)
44
45func SetWorldCreatePolicies(cur realm, defaultPolicy validate.DefaultStringPolicy, newPolicies []validate.StringPolicy, pairMax int, denyKeys []string, allowUnknown bool) {
46 assertNotFrozen()
47 accesscontrol.AssertIsAdmin(0, cur, admin.IsAdmin)
48 // NewValidator copies denyKeys and stores policies by value in its own map.
49 next := validate.NewValidator(defaultPolicy, newPolicies, denyKeys, pairMax, allowUnknown)
50 worldCreateValidator = next
51
52 chain.Emit(SetWorldCreatePoliciesEvent)
53}
54
55func SetWorldUpdatePolicies(cur realm, defaultPolicy validate.DefaultStringPolicy, newPolicies []validate.StringPolicy, pairMax int, denyKeys []string, allowUnknown bool) {
56 assertNotFrozen()
57 accesscontrol.AssertIsAdmin(0, cur, admin.IsAdmin)
58 // NewValidator copies denyKeys and stores policies by value in its own map.
59 next := validate.NewValidator(defaultPolicy, newPolicies, denyKeys, pairMax, allowUnknown)
60 worldUpdateValidator = next
61
62 chain.Emit(SetWorldUpdatePoliciesEvent)
63}
64
65func GetWorldCreatePolicies() validate.Validator {
66 return worldCreateValidator.Clone()
67}
68
69func GetWorldUpdatePolicies() validate.Validator {
70 return worldUpdateValidator.Clone()
71}