forked from External/grumble
Clean up channel handling.
This commit is contained in:
parent
3eca9a9d3e
commit
4e95d40645
5 changed files with 42 additions and 45 deletions
|
|
@ -538,7 +538,7 @@ func (client *Client) receiver() {
|
|||
}
|
||||
|
||||
func (client *Client) sendChannelList() {
|
||||
client.sendChannelTree(client.server.root)
|
||||
client.sendChannelTree(client.server.RootChannel())
|
||||
}
|
||||
|
||||
func (client *Client) sendChannelTree(channel *Channel) {
|
||||
|
|
|
|||
|
|
@ -295,6 +295,10 @@ func NewServerFromFrozen(filename string) (s *Server, err os.Error) {
|
|||
}
|
||||
|
||||
s.Channels[c.Id] = c
|
||||
|
||||
if c.Id >= s.nextChanId {
|
||||
s.nextChanId = c.Id + 1
|
||||
}
|
||||
}
|
||||
|
||||
// Hook up children with their parents.
|
||||
|
|
@ -313,8 +317,6 @@ func NewServerFromFrozen(filename string) (s *Server, err os.Error) {
|
|||
parentChan.AddChild(childChan)
|
||||
}
|
||||
|
||||
s.root = s.Channels[0]
|
||||
|
||||
// Add all users
|
||||
for _, fu := range fs.Users {
|
||||
u, err := NewUser(fu.Id, fu.Name)
|
||||
|
|
|
|||
22
message.go
22
message.go
|
|
@ -532,8 +532,8 @@ func (server *Server) handleUserRemoveMessage(client *Client, msg *Message) {
|
|||
if isBan {
|
||||
perm = Permission(BanPermission)
|
||||
}
|
||||
if removeClient.IsSuperUser() || !server.HasPermission(client, server.root, perm) {
|
||||
client.sendPermissionDenied(client, server.root, perm)
|
||||
if removeClient.IsSuperUser() || !server.HasPermission(client, server.RootChannel(), perm) {
|
||||
client.sendPermissionDenied(client, server.RootChannel(), perm)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -647,8 +647,8 @@ func (server *Server) handleUserStateMessage(client *Client, msg *Message) {
|
|||
if target != actor {
|
||||
// Check if actor has 'move' permissions on the root channel. It is needed
|
||||
// to clear another user's comment.
|
||||
if !server.HasPermission(actor, server.root, MovePermission) {
|
||||
client.sendPermissionDenied(actor, server.root, MovePermission)
|
||||
if !server.HasPermission(actor, server.RootChannel(), MovePermission) {
|
||||
client.sendPermissionDenied(actor, server.RootChannel(), MovePermission)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -676,8 +676,8 @@ func (server *Server) handleUserStateMessage(client *Client, msg *Message) {
|
|||
perm = Permission(SelfRegisterPermission)
|
||||
}
|
||||
|
||||
if target.IsRegistered() || !server.HasPermission(actor, server.root, perm) {
|
||||
client.sendPermissionDenied(actor, server.root, perm)
|
||||
if target.IsRegistered() || !server.HasPermission(actor, server.RootChannel(), perm) {
|
||||
client.sendPermissionDenied(actor, server.RootChannel(), perm)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -895,8 +895,8 @@ func (server *Server) handleBanListMessage(client *Client, msg *Message) {
|
|||
return
|
||||
}
|
||||
|
||||
if !server.HasPermission(client, server.root, BanPermission) {
|
||||
client.sendPermissionDenied(client, server.root, BanPermission)
|
||||
if !server.HasPermission(client, server.RootChannel(), BanPermission) {
|
||||
client.sendPermissionDenied(client, server.RootChannel(), BanPermission)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -1283,7 +1283,7 @@ func (server *Server) handleUserStatsMessage(client *Client, msg *Message) {
|
|||
}
|
||||
// Otherwise, only send extended UserStats for people with +register permissions
|
||||
// on the root channel.
|
||||
if server.HasPermission(client, server.root, RegisterPermission) {
|
||||
if server.HasPermission(client, server.RootChannel(), RegisterPermission) {
|
||||
extended = true
|
||||
}
|
||||
|
||||
|
|
@ -1471,8 +1471,8 @@ func (server *Server) handleUserList(client *Client, msg *Message) {
|
|||
}
|
||||
|
||||
// Only users who are allowed to register other users can access the user list.
|
||||
if !server.HasPermission(client, server.root, RegisterPermission) {
|
||||
client.sendPermissionDenied(client, server.root, RegisterPermission)
|
||||
if !server.HasPermission(client, server.RootChannel(), RegisterPermission) {
|
||||
client.sendPermissionDenied(client, server.RootChannel(), RegisterPermission)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -37,17 +37,17 @@ func NewServerFromSQLite(id int64, db *sqlite.Conn) (s *Server, err os.Error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
err = populateChannelInfoFromDatabase(s, s.root, db)
|
||||
err = populateChannelInfoFromDatabase(s, s.RootChannel(), db)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = populateChannelACLFromDatabase(s, s.root, db)
|
||||
err = populateChannelACLFromDatabase(s, s.RootChannel(), db)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = populateChannelGroupsFromDatabase(s, s.root, db)
|
||||
err = populateChannelGroupsFromDatabase(s, s.RootChannel(), db)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -252,7 +252,8 @@ func populateChannelsFromDatabase(server *Server, db *sqlite.Conn, parentId int)
|
|||
return err
|
||||
}
|
||||
|
||||
c := server.NewChannel(chanid, name)
|
||||
c := NewChannel(chanid, name)
|
||||
server.Channels[c.Id] = c
|
||||
c.InheritACL = inherit
|
||||
parent.AddChild(c)
|
||||
}
|
||||
|
|
|
|||
48
server.go
48
server.go
|
|
@ -83,9 +83,8 @@ type Server struct {
|
|||
PreferAlphaCodec bool
|
||||
|
||||
// Channels
|
||||
chanid int
|
||||
root *Channel
|
||||
Channels map[int]*Channel
|
||||
Channels map[int]*Channel
|
||||
nextChanId int
|
||||
|
||||
// Administration
|
||||
SuperUserPassword string
|
||||
|
|
@ -158,14 +157,26 @@ func NewServer(id int64, addr string, port int) (s *Server, err os.Error) {
|
|||
s.UserNameMap["SuperUser"] = s.Users[0]
|
||||
|
||||
s.Channels = make(map[int]*Channel)
|
||||
s.root = s.NewChannel(0, "Root")
|
||||
s.aclcache = NewACLCache()
|
||||
|
||||
// Create root channel
|
||||
s.Channels[0] = NewChannel(0, "Root")
|
||||
s.nextChanId = 1
|
||||
|
||||
s.Logger = log.New(os.Stdout, fmt.Sprintf("[%v] ", s.Id), log.Ldate|log.Ltime)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Get a pointer to the root channel
|
||||
func (server *Server) RootChannel() *Channel {
|
||||
root, exists := server.Channels[0]
|
||||
if !exists {
|
||||
server.Fatalf("Not Root channel found for server")
|
||||
}
|
||||
return root
|
||||
}
|
||||
|
||||
// Set password as the new SuperUser password
|
||||
func (server *Server) SetSuperUserPassword(password string) {
|
||||
saltBytes := make([]byte, 24)
|
||||
|
|
@ -300,28 +311,11 @@ func (server *Server) RemoveClient(client *Client, kicked bool) {
|
|||
}
|
||||
}
|
||||
|
||||
// Add an existing channel to the Server. (Do not arbitrarily pick an ID)
|
||||
func (server *Server) NewChannel(id int, name string) (channel *Channel) {
|
||||
_, exists := server.Channels[id]
|
||||
if exists {
|
||||
// fime(mkrautz): Handle duplicates
|
||||
return nil
|
||||
}
|
||||
|
||||
channel = NewChannel(id, name)
|
||||
server.Channels[id] = channel
|
||||
|
||||
if id > server.chanid {
|
||||
server.chanid = id + 1
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Add a new channel to the server. Automatically assign it a channel ID.
|
||||
func (server *Server) AddChannel(name string) (channel *Channel) {
|
||||
channel = NewChannel(server.chanid, name)
|
||||
channel = NewChannel(server.nextChanId, name)
|
||||
server.Channels[channel.Id] = channel
|
||||
server.nextChanId += 1
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -623,7 +617,7 @@ func (server *Server) finishAuthenticate(client *Client) {
|
|||
}
|
||||
}
|
||||
|
||||
server.userEnterChannel(client, server.root, userstate)
|
||||
server.userEnterChannel(client, server.RootChannel(), userstate)
|
||||
if err := server.broadcastProtoMessage(MessageUserState, userstate); err != nil {
|
||||
// Server panic?
|
||||
}
|
||||
|
|
@ -637,8 +631,8 @@ func (server *Server) finishAuthenticate(client *Client) {
|
|||
if client.IsSuperUser() {
|
||||
sync.Permissions = proto.Uint64(uint64(AllPermissions))
|
||||
} else {
|
||||
server.HasPermission(client, server.root, EnterPermission)
|
||||
perm := server.aclcache.GetPermission(client, server.root)
|
||||
server.HasPermission(client, server.RootChannel(), EnterPermission)
|
||||
perm := server.aclcache.GetPermission(client, server.RootChannel())
|
||||
if !perm.IsCached() {
|
||||
client.Panic("Corrupt ACL cache")
|
||||
return
|
||||
|
|
@ -1100,7 +1094,7 @@ func (s *Server) RemoveRegistration(uid uint32) (err os.Error) {
|
|||
s.UserNameMap[user.Name] = nil, false
|
||||
|
||||
// Remove from groups and ACLs.
|
||||
s.removeRegisteredUserFromChannel(uid, s.root)
|
||||
s.removeRegisteredUserFromChannel(uid, s.RootChannel())
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue