Search Apps Documentation Source Content File Folder Download Copy Actions Download

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}