1package users
2
3import (
4 "std"
5
6 "gno.land/p/demo/dao"
7
8 "gno.land/r/gov/dao/bridge"
9 susers "gno.land/r/sys/users"
10)
11
12var paused = false // XXX: replace with p/moul/authz
13
14// ProposeNewPausedValue allows GovDAO to pause or unpause this realm
15func ProposeNewPausedValue(newPausedValue bool) dao.Executor {
16 cb := func() error {
17 paused = newPausedValue
18 return nil
19 }
20
21 return bridge.GovDAO().NewGovDAOExecutor(cb)
22}
23
24// ProposeNewName allows GovDAO to propose a new name for an existing user
25// The associated address and all previous names of a user that changes a name
26// are preserved, and all resolve to the new name.
27func ProposeNewName(addr std.Address, newName string) dao.Executor {
28 if matched := reUsername.MatchString(newName); !matched {
29 panic(ErrInvalidUsername)
30 }
31
32 userData := susers.ResolveAddress(addr)
33 if userData == nil {
34 panic(susers.ErrUserNotExistOrDeleted)
35 }
36
37 cb := func() error {
38 if err := userData.UpdateName(newName); err != nil {
39 return err
40 }
41 return nil
42 }
43
44 return bridge.GovDAO().NewGovDAOExecutor(cb)
45}
46
47// ProposeDeleteUser allows GovDAO to propose deletion of a user
48// This will make the associated address and names unresolvable.
49// WARN: After deletion, the same address WILL NOT be able to register a new name.
50func ProposeDeleteUser(addr std.Address) dao.Executor {
51 userData := susers.ResolveAddress(addr)
52 if userData == nil {
53 panic(susers.ErrUserNotExistOrDeleted)
54 }
55
56 cb := func() error {
57 if err := userData.Delete(); err != nil {
58 return err
59 }
60 return nil
61 }
62
63 return bridge.GovDAO().NewGovDAOExecutor(cb)
64}
65
66// ProposeNewRegisterPrice allows GovDAO to update the price of registration
67func ProposeNewRegisterPrice(newPrice int64) dao.Executor {
68 if newPrice < 0 {
69 panic("invalid price")
70 }
71
72 cb := func() error {
73 registerPrice = newPrice
74 return nil
75 }
76
77 return bridge.GovDAO().NewGovDAOExecutor(cb)
78}
admin.gno
1.84 Kb ยท 78 lines