summaryrefslogtreecommitdiff
path: root/server/user
diff options
context:
space:
mode:
Diffstat (limited to 'server/user')
-rw-r--r--server/user/user.go29
1 files changed, 22 insertions, 7 deletions
diff --git a/server/user/user.go b/server/user/user.go
index 41a5c4f..0f20bf1 100644
--- a/server/user/user.go
+++ b/server/user/user.go
@@ -3,6 +3,7 @@ package user
import (
"citrons.xyz/talk/server/object"
"citrons.xyz/talk/server/session"
+ "citrons.xyz/talk/server/validate"
"citrons.xyz/talk/proto"
)
@@ -32,22 +33,27 @@ func NewStore(world *object.World) *UserStore {
}
func (us *UserStore) CreateUser(name string) (*User, *proto.Fail) {
- if us.byName[name] != nil {
+ if us.ByName(name) != nil {
return nil, &proto.Fail {
"name-taken", "", map[string]string {"": name},
}
}
+ if !validate.Name(name) {
+ return nil, &proto.Fail {
+ "invalid-name", "", map[string]string {"": name},
+ }
+ }
var u User
u.store = us
u.name = name
- us.byName[name] = &u
+ us.byName[validate.Fold(name)] = &u
u.id = us.world.NewObject(&u)
u.Channels = make(map[string]bool)
return &u, nil
}
func (us *UserStore) ByName(name string) *User {
- return us.byName[name]
+ return us.byName[validate.Fold(name)]
}
func (u *User) Name() string {
@@ -59,13 +65,22 @@ func (u *User) Id() string {
}
func (u *User) Rename(name string) *proto.Fail {
- if u.store.byName[name] != nil {
+ if !validate.Name(name) {
+ return &proto.Fail {
+ "invalid-name", "", map[string]string {"": name},
+ }
+ }
+ if validate.Fold(name) == validate.Fold(u.name) {
+ u.name = name
+ return nil
+ }
+ if u.store.ByName(name) != nil {
return &proto.Fail {
"name-taken", "", map[string]string {"": name},
}
}
- u.store.byName[u.name] = nil
- u.store.byName[name] = u
+ u.store.byName[validate.Fold(u.name)] = nil
+ u.store.byName[validate.Fold(name)] = u
u.name = name
return nil
}
@@ -74,7 +89,7 @@ func (u *User) Delete() {
u.Stream.Event(proto.NewCmd("delete", u.id))
u.Stream.UnsubscribeAll()
- delete(u.store.byName, u.name)
+ delete(u.store.byName, validate.Fold(u.name))
u.store.world.RemoveObject(u.id)
gone := Tombstone {u.name}