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}