diff options
| author | raven <citrons@mondecitronne.com> | 2025-10-22 15:48:40 -0500 |
|---|---|---|
| committer | raven <citrons@mondecitronne.com> | 2025-10-22 16:23:32 -0500 |
| commit | 4b54a1d11fd0fa355b244637612a3fd0af18c60c (patch) | |
| tree | 43a2d2d1feff2caf40a2e33b6ac4d61185708ab3 /server | |
| parent | 9126f2329aa21645e0d5622b0eeed402273efa95 (diff) | |
events generated from other clients on the same account
Diffstat (limited to 'server')
| -rw-r--r-- | server/channel/channel.go | 14 | ||||
| -rw-r--r-- | server/channel/command.go | 6 | ||||
| -rw-r--r-- | server/server/command.go | 1 | ||||
| -rw-r--r-- | server/user/user.go | 1 |
4 files changed, 16 insertions, 6 deletions
diff --git a/server/channel/channel.go b/server/channel/channel.go index 81d5439..9ec0b41 100644 --- a/server/channel/channel.go +++ b/server/channel/channel.go @@ -178,7 +178,7 @@ func (c *Channel) Rename(name string) *proto.Fail { return nil } -func (c *Channel) Put(m proto.Object) proto.Object { +func (c *Channel) Put(m proto.Object, From *session.Session) proto.Object { m.Id = proto.GenId() m.Fields["t"] = proto.Timestamp() err := c.kind.db.Update(func(tx *bolt.Tx) error { @@ -206,7 +206,7 @@ func (c *Channel) Put(m proto.Object) proto.Object { log.Fatal("error updating database: ", err) } for s, _ := range c.Stream.Subscribers() { - if m.Fields["f"] == s.UserId { + if From == s { continue } if c.GetMembership(s.UserId).See { @@ -284,20 +284,26 @@ func (c *Channel) History(min, max int) []proto.Object { } func (c *Channel) Join(u *user.User) *proto.Fail { + if c.isDirect { + return &proto.Fail {"invalid", "", nil} + } if c.GetMembership(u.Id()).Yes { return nil } c.SetMembership(u.Id(), c.GetDefaultMembership()) - c.Put(proto.Object{"join", "", map[string]string {"f": u.Id()}}) + c.Put(proto.Object{"join", "", map[string]string {"f": u.Id()}}, nil) return nil } func (c *Channel) Leave(u *user.User) *proto.Fail { + if c.isDirect { + return &proto.Fail {"invalid", "", nil} + } if !c.GetMembership(u.Id()).Yes { return nil } c.SetMembership(u.Id(), Membership {Yes: false}) - c.Put(proto.Object{"leave", "", map[string]string {"f": u.Id()}}) + c.Put(proto.Object{"leave", "", map[string]string {"f": u.Id()}}, nil) return nil } diff --git a/server/channel/command.go b/server/channel/command.go index 04e45a2..92ae2cc 100644 --- a/server/channel/command.go +++ b/server/channel/command.go @@ -46,7 +46,7 @@ func (c *Channel) SendRequest(r session.Request) { } m.Fields["f"] = r.From.UserId - r.Reply(proto.NewCmd("p", c.id, c.Put(m))) + r.Reply(proto.NewCmd("p", c.id, c.Put(m, r.From))) case "i": r.Reply(proto.NewCmd("i", "", c.InfoFor(r.From.UserId))) @@ -66,6 +66,7 @@ func (c *Channel) SendRequest(r session.Request) { r.Reply(err.Cmd()) } else { r.ReplyOk() + u.PrivateStream.Event(proto.NewCmd("join", c.id)) } case "leave": @@ -75,6 +76,7 @@ func (c *Channel) SendRequest(r session.Request) { r.Reply(err.Cmd()) } else { r.ReplyOk() + u.PrivateStream.Event(proto.NewCmd("leave", c.id)) } case "delete": @@ -249,7 +251,7 @@ func (c *Channel) SendRequest(r session.Request) { return } c.SetMembership(id, new) - c.Put(o) + c.Put(o, r.From) i := new.GetInfo() i.Fields[""] = id diff --git a/server/server/command.go b/server/server/command.go index e8ced39..75f3bc0 100644 --- a/server/server/command.go +++ b/server/server/command.go @@ -104,6 +104,7 @@ func (s *server) SendRequest(r session.Request) { u := s.world.GetObject(r.From.UserId).(*user.User) c.Join(u) c.SetMembership(u.Id(), channel.CreatorMembership) + u.PrivateStream.Event(proto.NewCmd("join", c.Id())) r.Reply(proto.NewCmd("create", "", c.InfoFor(r.From.UserId))) default: r.ReplyInvalid() diff --git a/server/user/user.go b/server/user/user.go index 7f272c1..311a1b8 100644 --- a/server/user/user.go +++ b/server/user/user.go @@ -21,6 +21,7 @@ type User struct { status string description string Stream session.Stream + PrivateStream session.Stream anonymous bool } |
