public.gno

1.73 Kb ยท 71 lines
 1package groups
 2
 3import (
 4	"chain/runtime"
 5
 6	"gno.land/r/sys/users"
 7)
 8
 9//----------------------------------------
10// Public facing functions
11
12func GetGroupIDFromName(name string) (GroupID, bool) {
13	groupI, exists := gGroupsByName.Get(name)
14	if !exists {
15		return 0, false
16	}
17	return groupI.(*Group).id, true
18}
19
20func CreateGroup(cur realm, name string) GroupID {
21	runtime.AssertOriginCall()
22	caller := runtime.OriginCaller()
23	usernameOf(caller)
24	url := "/r/demo/groups:" + name
25	group := newGroup(url, name, caller)
26	gidkey := groupIDKey(group.id)
27	gGroups.Set(gidkey, group)
28	gGroupsByName.Set(name, group)
29	return group.id
30}
31
32func AddMember(cur realm, gid GroupID, address_XXX string, weight int, metadata string) MemberID {
33	runtime.AssertOriginCall()
34	caller := runtime.OriginCaller()
35	usernameOf(caller)
36	group := getGroup(gid)
37	if !group.HasPermission(caller, EditPermission) {
38		panic("unauthorized to edit group")
39	}
40	user := users.ResolveAddress(address(address_XXX))
41	if user == nil {
42		panic("unknown address " + address_XXX)
43	}
44	mid := group.lastMemberID
45	member := group.newMember(mid, address(address_XXX), weight, metadata)
46	midkey := memberIDKey(mid)
47	group.members.Set(midkey, member)
48	mid++
49	group.lastMemberID = mid
50	return member.id
51}
52
53func DeleteGroup(cur realm, gid GroupID) {
54	runtime.AssertOriginCall()
55	caller := runtime.OriginCaller()
56	group := getGroup(gid)
57	if !group.HasPermission(caller, DeletePermission) {
58		panic("unauthorized to delete group")
59	}
60	group.deleteGroup()
61}
62
63func DeleteMember(cur realm, gid GroupID, mid MemberID) {
64	runtime.AssertOriginCall()
65	caller := runtime.OriginCaller()
66	group := getGroup(gid)
67	if !group.HasPermission(caller, DeletePermission) {
68		panic("unauthorized to delete member")
69	}
70	group.deleteMember(mid)
71}