summaryrefslogtreecommitdiff
path: root/server/channel/membership.go
diff options
context:
space:
mode:
authorcitrons <citrons@mondecitronne.com>2025-01-26 01:56:53 -0600
committercitrons <citrons@mondecitronne.com>2025-01-26 01:56:53 -0600
commit10b8a79389e7073f6bd65695c3d05c77b825bc33 (patch)
treeb7e6dbd84b5b2c960ab8aafc1f99c3950d679e44 /server/channel/membership.go
initial commit
Diffstat (limited to 'server/channel/membership.go')
-rw-r--r--server/channel/membership.go87
1 files changed, 87 insertions, 0 deletions
diff --git a/server/channel/membership.go b/server/channel/membership.go
new file mode 100644
index 0000000..3a44517
--- /dev/null
+++ b/server/channel/membership.go
@@ -0,0 +1,87 @@
+package channel
+
+import (
+ "citrons.xyz/talk/proto"
+)
+
+type Membership struct {
+ Yes bool
+ See bool
+ Put bool
+ History bool
+ Moderate bool
+ Update bool
+ Invite bool
+ Op bool
+}
+
+var DefaultMembership = Membership {
+ Yes: true,
+ See: true,
+ Put: true,
+ History: true,
+ Moderate: false,
+ Update: false,
+ Op: false,
+}
+
+var CreatorMembership = Membership {
+ Yes: true,
+ See: true,
+ Put: true,
+ History: true,
+ Moderate: true,
+ Update: true,
+ Op: true,
+}
+
+func (m Membership) Change(spec proto.Object) (Membership, *proto.Fail) {
+ new := m
+ for k, v := range spec.Fields {
+ var field *bool
+ switch k {
+ case "see":
+ field = &new.See
+ case "put":
+ field = &new.Put
+ case "history":
+ field = &new.History
+ case "moderate":
+ field = &new.Moderate
+ case "update":
+ field = &new.Update
+ case "":
+ continue
+ default:
+ return new, &proto.Fail{"invalid", "", nil}
+ }
+ switch v {
+ case "yes":
+ *field = true
+ case "no":
+ *field = false
+ default:
+ return new, &proto.Fail{"invalid", "", nil}
+ }
+ }
+ return new, nil
+}
+
+func bstr(b bool) string {
+ if b {
+ return "yes"
+ } else {
+ return "no"
+ }
+}
+
+func (m Membership) GetInfo() proto.Object {
+ return proto.Object {"membership", "", map[string]string {
+ "see": bstr(m.See),
+ "put": bstr(m.Put),
+ "history": bstr(m.History),
+ "moderate": bstr(m.Moderate),
+ "update": bstr(m.Update),
+ "op": bstr(m.Op),
+ }}
+}