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}