Search Apps Documentation Source Content File Folder Download Copy Actions Download

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}