user_admin.gno
1.41 Kb · 56 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
11func AdminCreateUser(cur realm, addr address, propKeys, propValues string) {
12 assertNotFrozen()
13 accesscontrol.AssertIsAdmin(0, cur, admin.IsAdmin)
14 assertIsValidAddress(addr)
15 props := parsePropertiesCSV(propKeys, propValues)
16 validateCreateProperties(props)
17 userStore.Create(addr, props)
18 chain.Emit(CreateUserEvent,
19 "address", addr.String(),
20 )
21}
22
23func AdminUpdateUser(cur realm, addr address, propKeys, propValues string) {
24 assertNotFrozen()
25 accesscontrol.AssertIsAdmin(0, cur, admin.IsAdmin)
26 assertIsValidAddress(addr)
27 props := parsePropertiesCSV(propKeys, propValues)
28 validateUpdateProperties(props)
29 userStore.Update(addr, props)
30 chain.Emit(UpdateUserEvent,
31 "address", addr.String(),
32 )
33}
34
35func AdminDeleteUser(cur realm, addr address) {
36 assertNotFrozen()
37 accesscontrol.AssertIsAdmin(0, cur, admin.IsAdmin)
38 assertIsValidAddress(addr)
39 userStore.Delete(addr)
40 chain.Emit(DeleteUserEvent,
41 "address", addr.String(),
42 )
43}
44
45func SetUserMetadata(cur realm, addr address, metadata string) {
46 assertNotFrozen()
47 accesscontrol.AssertIsAdminOrOperator(0, cur, admin.IsAdmin, admin.IsOperator)
48 assertIsValidAddress(addr)
49 validate.AssertStringTextLen(metadata, true, "user metadata")
50 userStore.SetMetadata(addr, metadata)
51
52 chain.Emit(
53 SetUserMetadataEvent,
54 "address", addr.String(),
55 )
56}