diff options
Diffstat (limited to 'server')
| -rw-r--r-- | server/server/server.go | 32 | ||||
| -rw-r--r-- | server/user/user.go | 26 |
2 files changed, 32 insertions, 26 deletions
diff --git a/server/server/server.go b/server/server/server.go index acd390d..81f2ac0 100644 --- a/server/server/server.go +++ b/server/server/server.go @@ -53,7 +53,7 @@ func (s *server) onDisconnect(sesh *session.Session) { if sesh.UserId != "" { u := s.world.GetObject(sesh.UserId).(*user.User) if u.IsAnonymous() { - u.Delete() + s.deleteAnonUsers() } } for st, _ := range sesh.Subscriptions() { @@ -61,6 +61,34 @@ func (s *server) onDisconnect(sesh *session.Session) { } } +func (s *server) deleteAnonUsers() { + var anon []string + err := s.world.DB().View(func(tx *bolt.Tx) error { + bucket := tx.Bucket([]byte("anonymous users")) + if bucket == nil { + return nil + } + bucket.ForEach(func(k, v []byte) error { + anon = append(anon, string(k)) + return nil + }) + return nil + }) + if err != nil { + log.Fatal("error reading database: ", err) + } + for _, id := range anon { + switch u := s.world.GetObject(id).(type) { + case *user.User: + for cid := range s.channelKind.UserChannels(u.Id()) { + m := Membership {Yes: false} + s.world.GetObject(cid).(*channel.Channel).SetMembership(id, m) + } + u.Delete() + } + } +} + func (s *server) Data() proto.Object { return proto.Object {} } @@ -80,7 +108,7 @@ func Serve(db *bolt.DB, ln net.Listener) { srv.world.PutObject("", &srv) - srv.userKind.DeleteAnonUsers() + srv.deleteAnonUsers() go func() { for { diff --git a/server/user/user.go b/server/user/user.go index 198fc0f..18d9383 100644 --- a/server/user/user.go +++ b/server/user/user.go @@ -66,30 +66,6 @@ func (us *UserKind) ByName(name string) *User { } } -func (us *UserKind) DeleteAnonUsers() { - var anon []string - err := us.db.View(func(tx *bolt.Tx) error { - bucket := tx.Bucket([]byte("anonymous users")) - if bucket == nil { - return nil - } - bucket.ForEach(func(k, v []byte) error { - anon = append(anon, string(k)) - return nil - }) - return nil - }) - if err != nil { - log.Fatal("error reading database: ", err) - } - for _, id := range anon { - switch u := us.world.GetObject(id).(type) { - case *User: - u.Delete() - } - } -} - func (us *UserKind) Undata(o proto.Object) object.Object { var u User u.kind = us @@ -167,6 +143,8 @@ func (u *User) Delete() { channels.DeleteBucket([]byte(u.id)) auth, _ := tx.CreateBucketIfNotExists([]byte("auth")) auth.DeleteBucket([]byte(u.id)) + udata, _ := tx.CreateBucketIfNotExists([]byte("user data")) + udata.DeleteBucket([]byte(u.id)) return nil }) if err != nil { |
