Search Apps Documentation Source Content File Folder Download Copy Actions Download

property_config.gno

2.35 Kb · 84 lines
 1package user
 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
15	maxPairs = 64
16)
17
18var (
19	createValidator = validate.NewValidator(
20		validate.DefaultStringPolicy{LenKind: validate.StringStandard, AllowEmpty: true},
21		[]validate.StringPolicy{
22			validate.NewStringPolicy("nickname", validate.StringPlain, validate.StringShort, 20, true, false),
23		},
24		nil,
25		maxPairs,
26		true,
27	)
28
29	updateValidator = validate.NewValidator(
30		validate.DefaultStringPolicy{LenKind: validate.StringStandard, AllowEmpty: true},
31		[]validate.StringPolicy{
32			validate.NewStringPolicy("nickname", validate.StringPlain, validate.StringShort, 20, false, false),
33		},
34		nil,
35		maxPairs,
36		true,
37	)
38)
39
40func SetCreatePolicies(cur realm, defaultPolicy validate.DefaultStringPolicy, newPolicies []validate.StringPolicy, pairMax int, denyKeys []string, allowUnknown bool) {
41	assertNotFrozen()
42	accesscontrol.AssertIsAdmin(0, cur, admin.IsAdmin)
43	// NewValidator copies denyKeys and stores policies by value in its own map.
44	next := validate.NewValidator(defaultPolicy, newPolicies, denyKeys, pairMax, allowUnknown)
45	createValidator = next
46
47	chain.Emit(SetCreatePoliciesEvent)
48}
49
50func SetUpdatePolicies(cur realm, defaultPolicy validate.DefaultStringPolicy, newPolicies []validate.StringPolicy, pairMax int, denyKeys []string, allowUnknown bool) {
51	assertNotFrozen()
52	accesscontrol.AssertIsAdmin(0, cur, admin.IsAdmin)
53	// NewValidator copies denyKeys and stores policies by value in its own map.
54	next := validate.NewValidator(defaultPolicy, newPolicies, denyKeys, pairMax, allowUnknown)
55	updateValidator = next
56
57	chain.Emit(SetUpdatePoliciesEvent)
58}
59
60func GetCreatePolicies() validate.Validator {
61	return createValidator.Clone()
62}
63
64func GetUpdatePolicies() validate.Validator {
65	return updateValidator.Clone()
66}
67
68func validateCreateProperties(props map[string]string) {
69	valid, message := createValidator.Validate(props)
70	if !valid {
71		panic("properties: " + message)
72	}
73	assertValidNickname(props["nickname"])
74}
75
76func validateUpdateProperties(props map[string]string) {
77	valid, message := updateValidator.Validate(props)
78	if !valid {
79		panic("properties: " + message)
80	}
81	if nickname, found := props["nickname"]; found {
82		assertValidNickname(nickname)
83	}
84}