func (s *aliasStore) Room(alias ct.Alias) (*ct.RoomId, types.Error) { room, err := s.idMap.Lookup(ct.Id(alias)) if err != nil { return nil, types.InternalError(err) } return (*ct.RoomId)(room), nil }
func (db *userDb) UserPasswordHash(id ct.UserId) (string, types.Error) { value, err := db.State(ct.Id(id), passwordHashKey) if err != nil { return "", types.InternalError(err) } return string(value), nil }
func (s *aliasStore) Aliases(room ct.RoomId) ([]ct.Alias, types.Error) { ids, err := s.idMap.ReverseLookup(ct.Id(room)) if err != nil { return nil, types.InternalError(err) } aliases := *(*[]ct.Alias)(unsafe.Pointer(&ids)) return aliases, nil }
func (db *memberStore) Peers(userId ct.UserId) (map[ct.UserId]struct{}, types.Error) { peers := map[ct.UserId]struct{}{} rooms, err := db.idMap.ReverseLookup(ct.Id(userId)) if err != nil { return nil, types.InternalError(err) } for _, room := range rooms { members, err := db.idMap.Lookup(room) if err != nil { return nil, types.InternalError(err) } for _, member := range members { peers[ct.UserId(member)] = struct{}{} } } return peers, nil }
func (s *aliasStore) RemoveAlias(alias ct.Alias, room ct.RoomId) types.Error { deleted, err := s.idMap.Delete(ct.Id(alias), ct.Id(room)) if err != nil { return types.InternalError(err) } if !deleted { return types.NotFoundError("room alias '" + alias.String() + "' doesn't exist") } return nil }
func (s *aliasStore) AddAlias(alias ct.Alias, room ct.RoomId) types.Error { inserted, err := s.idMap.Insert(ct.Id(alias), ct.Id(room)) if err != nil { return types.InternalError(err) } if !inserted { return types.RoomInUseError("room alias '" + alias.String() + "' already exists") } return nil }
func (db *memberStore) RemoveMember(roomId ct.RoomId, userId ct.UserId) types.Error { deleted, err := db.idMap.Delete(ct.Id(roomId), ct.Id(userId)) if err != nil { return types.InternalError(err) } if !deleted { msg := fmt.Sprintf("user %s is not a member of the room %s", userId, roomId) return types.ServerError(msg) } return nil }
func (db *memberStore) AddMember(roomId ct.RoomId, userId ct.UserId) types.Error { inserted, err := db.idMap.Put(ct.Id(roomId), ct.Id(userId)) if err != nil { return types.InternalError(err) } if !inserted { msg := fmt.Sprintf("user %s is already a member of the room %s", userId, roomId) return types.ServerError(msg) } return nil }
func (db *userDb) SetUserPasswordHash(id ct.UserId, hash string) types.Error { _, err := db.SetState(ct.Id(id), passwordHashKey, []byte(hash)) return types.InternalError(err) }
func (db *userDb) UserExists(id ct.UserId) (bool, types.Error) { exists, err := db.BucketExists(ct.Id(id)) return exists, types.InternalError(err) }
func (db *userDb) CreateUser(id ct.UserId) (bool, types.Error) { exists, err := db.CreateBucket(ct.Id(id)) return exists, types.InternalError(err) }
func (db *memberStore) Users(roomId ct.RoomId) ([]ct.UserId, types.Error) { ids, err := db.idMap.Lookup(ct.Id(roomId)) users := *(*[]ct.UserId)(unsafe.Pointer(&ids)) return users, types.InternalError(err) }
func (db *memberStore) Rooms(userId ct.UserId) ([]ct.RoomId, types.Error) { ids, err := db.idMap.ReverseLookup(ct.Id(userId)) rooms := *(*[]ct.RoomId)(unsafe.Pointer(&ids)) return rooms, types.InternalError(err) }