1
Fork 0
mirror of https://github.com/jech/galene.git synced 2024-11-22 08:35:57 +01:00

Tweak the autokick code.

This commit is contained in:
Juliusz Chroboczek 2021-01-17 21:52:26 +01:00
parent c769a4aad4
commit a15915e8fc
2 changed files with 26 additions and 23 deletions

3
README
View file

@ -243,7 +243,8 @@ the group.
- `autolock`: if true, the group will start locked and become locked
whenever there are no clients with operator privileges;
- `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
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

View file

@ -438,6 +438,8 @@ func AddClient(group string, c Client) (*Group, error) {
g.mu.Lock()
defer g.mu.Unlock()
clients := g.getClientsUnlocked(nil)
if !c.OverridePermissions(g) {
perms, err := g.description.GetPermission(group, c)
if err != nil {
@ -446,12 +448,29 @@ func AddClient(group string, c Client) (*Group, error) {
c.SetPermissions(perms)
if !perms.Op && g.locked != nil {
m := *g.locked
if m == "" {
m = "this group is locked"
if !perms.Op {
if g.locked != nil {
m := *g.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 {
@ -461,27 +480,10 @@ func AddClient(group string, c Client) (*Group, error) {
}
}
clients := g.getClientsUnlocked(nil)
if g.clients[c.Id()] != nil {
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.timestamp = time.Now()