Commit a15915e8 authored by Juliusz Chroboczek's avatar Juliusz Chroboczek

Tweak the autokick code.

parent c769a4aa
...@@ -243,7 +243,8 @@ the group. ...@@ -243,7 +243,8 @@ the group.
- `autolock`: if true, the group will start locked and become locked - `autolock`: if true, the group will start locked and become locked
whenever there are no clients with operator privileges; whenever there are no clients with operator privileges;
- `autokick`: if true, all clients will be kicked out whenever there are - `autokick`: if true, all clients will be kicked out whenever there are
no clients with operator privileges. no clients with operator privileges; this is not recommended, prefer
the `autolock` option instead;
- `redirect`: if set, then attempts to join the group will be redirected - `redirect`: if set, then attempts to join the group will be redirected
to the given URL; most other fields are ignored in this case; to the given URL; most other fields are ignored in this case;
- `codecs`: this is a list of codecs allowed in this group. The default - `codecs`: this is a list of codecs allowed in this group. The default
......
...@@ -438,6 +438,8 @@ func AddClient(group string, c Client) (*Group, error) { ...@@ -438,6 +438,8 @@ func AddClient(group string, c Client) (*Group, error) {
g.mu.Lock() g.mu.Lock()
defer g.mu.Unlock() defer g.mu.Unlock()
clients := g.getClientsUnlocked(nil)
if !c.OverridePermissions(g) { if !c.OverridePermissions(g) {
perms, err := g.description.GetPermission(group, c) perms, err := g.description.GetPermission(group, c)
if err != nil { if err != nil {
...@@ -446,12 +448,29 @@ func AddClient(group string, c Client) (*Group, error) { ...@@ -446,12 +448,29 @@ func AddClient(group string, c Client) (*Group, error) {
c.SetPermissions(perms) c.SetPermissions(perms)
if !perms.Op && g.locked != nil { if !perms.Op {
m := *g.locked if g.locked != nil {
if m == "" { m := *g.locked
m = "this group is locked" if m == "" {
m = "this group is locked"
}
return nil, UserError(m)
}
if g.description.Autokick {
ops := false
for _, c := range clients {
if c.Permissions().Op {
ops = true
break
}
}
if !ops {
return nil, UserError(
"there are no operators " +
"in this group",
)
}
} }
return nil, UserError(m)
} }
if !perms.Op && g.description.MaxClients > 0 { if !perms.Op && g.description.MaxClients > 0 {
...@@ -461,27 +480,10 @@ func AddClient(group string, c Client) (*Group, error) { ...@@ -461,27 +480,10 @@ func AddClient(group string, c Client) (*Group, error) {
} }
} }
clients := g.getClientsUnlocked(nil)
if g.clients[c.Id()] != nil { if g.clients[c.Id()] != nil {
return nil, ProtocolError("duplicate client id") return nil, ProtocolError("duplicate client id")
} }
if !c.Permissions().Op && g.description.Autokick {
ops := false
for _, c := range clients {
if c.Permissions().Op {
ops = true
break
}
}
if !ops {
return nil, UserError(
"there are no operators in this group",
)
}
}
g.clients[c.Id()] = c g.clients[c.Id()] = c
g.timestamp = time.Now() g.timestamp = time.Now()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment