summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/server/server.go32
-rw-r--r--server/user/user.go26
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 {