admin.gno
2.69 Kb ยท 107 lines
1package users
2
3import (
4 "std"
5
6 "gno.land/r/gov/dao"
7 susers "gno.land/r/sys/users"
8)
9
10var paused = false // XXX: replace with p/moul/authz
11
12//----------------------------------------
13// Privileged mutators.
14
15func setPaused(cur realm, newPausedValue bool) {
16 paused = newPausedValue
17}
18
19func updateUsername(cur realm, userData *susers.UserData, newName string) error {
20 // UpdateName must be called from this realm.
21 return userData.UpdateName(newName)
22}
23
24func deleteUserdata(cur realm, userData *susers.UserData) error {
25 // Delete must be called from this realm.
26 return userData.Delete()
27}
28
29func setRegisterPrice(cur realm, newPrice int64) {
30 registerPrice = newPrice
31}
32
33//----------------------------------------
34// Public API
35
36// NewSetPausedExecutor allows GovDAO to pause or unpause this realm
37func NewSetPausedExecutor(newPausedValue bool) dao.ProposalRequest {
38 cb := func() error {
39 setPaused(cross, newPausedValue)
40 return nil
41 }
42
43 e := dao.NewSimpleExecutor(cb, "")
44
45 return dao.NewProposalRequest("Pause users/v1 realm", "", e)
46}
47
48// ProposeNewName allows GovDAO to propose a new name for an existing user
49// The associated address and all previous names of a user that changes a name
50// are preserved, and all resolve to the new name.
51func ProposeNewName(addr std.Address, newName string) dao.ProposalRequest {
52 if matched := reUsername.MatchString(newName); !matched {
53 panic(ErrInvalidUsername)
54 }
55
56 userData := susers.ResolveAddress(addr)
57 if userData == nil {
58 panic(susers.ErrUserNotExistOrDeleted)
59 }
60
61 cb := func() error {
62 err := updateUsername(cross, userData, newName)
63 return err
64 }
65
66 e := dao.NewSimpleExecutor(cb, "")
67
68 return dao.NewProposalRequest("Propose a new name using users/v1 realm", "", e)
69}
70
71// ProposeDeleteUser allows GovDAO to propose deletion of a user
72// This will make the associated address and names unresolvable.
73// WARN: After deletion, the same address WILL NOT be able to register a new name.
74func ProposeDeleteUser(addr std.Address, desc string) dao.ProposalRequest {
75 userData := susers.ResolveAddress(addr)
76 if userData == nil {
77 panic(susers.ErrUserNotExistOrDeleted)
78 }
79
80 cb := func() error {
81 return deleteUserdata(cross, userData)
82 }
83
84 e := dao.NewSimpleExecutor(cb, "")
85
86 return dao.NewProposalRequest("Propose deleting a name using users/v1 realm", desc, e)
87}
88
89// ProposeNewRegisterPrice allows GovDAO to update the price of registration
90func ProposeNewRegisterPrice(newPrice int64) dao.ProposalRequest {
91 if newPrice < 0 {
92 panic("invalid price")
93 }
94
95 cb := func() error {
96 setRegisterPrice(cross, newPrice)
97 return nil
98 }
99
100 e := dao.NewSimpleExecutor(cb, "")
101
102 return dao.NewProposalRequest(
103 "Propose change the price for name registration using users/v1 realm",
104 "",
105 e,
106 )
107}