admin.gno

1.84 Kb ยท 78 lines
 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}