Software /
code /
prosody
Annotate
plugins/muc/util.lib.lua @ 11763:e273ef869794
net.server: Pikc server_epoll as unconditional default
Previously it would have gone for server_select if util.poll was for
some reason not available, which should be never these days. And even if
it was, best to flush it out by throwing loud errors so users notice.
Then they can work around it by using select until we delete that one.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 03 Sep 2021 17:39:00 +0200 |
parent | 10713:38159b9adf9f |
rev | line source |
---|---|
6218
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
1 -- Prosody IM |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
4 -- Copyright (C) 2014 Daurnimator |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
5 -- |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
6 -- This project is MIT/X11 licensed. Please see the |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
7 -- COPYING file in the source package for more information. |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
8 -- |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
9 |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
10 local _M = {}; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
11 |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
12 _M.valid_affiliations = { |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
13 outcast = -1; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
14 none = 0; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
15 member = 1; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
16 admin = 2; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
17 owner = 3; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
18 }; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
19 |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
20 _M.valid_roles = { |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
21 none = 0; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
22 visitor = 1; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
23 participant = 2; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
24 moderator = 3; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
25 }; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
26 |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
27 local kickable_error_conditions = { |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
28 ["gone"] = true; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
29 ["internal-server-error"] = true; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
30 ["item-not-found"] = true; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
31 ["jid-malformed"] = true; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
32 ["recipient-unavailable"] = true; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
33 ["redirect"] = true; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
34 ["remote-server-not-found"] = true; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
35 ["remote-server-timeout"] = true; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
36 ["service-unavailable"] = true; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
37 ["malformed error"] = true; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
38 }; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
39 function _M.is_kickable_error(stanza) |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
40 local cond = select(2, stanza:get_error()) or "malformed error"; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
41 return kickable_error_conditions[cond]; |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
42 end |
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
43 |
10713
38159b9adf9f
MUC: Add API for adding 'filtered namespaces' to be stripped from inbound presence
Matthew Wild <mwild1@gmail.com>
parents:
9603
diff
changeset
|
44 local filtered_namespaces = module:shared("filtered-namespaces"); |
38159b9adf9f
MUC: Add API for adding 'filtered namespaces' to be stripped from inbound presence
Matthew Wild <mwild1@gmail.com>
parents:
9603
diff
changeset
|
45 filtered_namespaces["http://jabber.org/protocol/muc"] = true; |
38159b9adf9f
MUC: Add API for adding 'filtered namespaces' to be stripped from inbound presence
Matthew Wild <mwild1@gmail.com>
parents:
9603
diff
changeset
|
46 filtered_namespaces["http://jabber.org/protocol/muc#user"] = true; |
38159b9adf9f
MUC: Add API for adding 'filtered namespaces' to be stripped from inbound presence
Matthew Wild <mwild1@gmail.com>
parents:
9603
diff
changeset
|
47 |
38159b9adf9f
MUC: Add API for adding 'filtered namespaces' to be stripped from inbound presence
Matthew Wild <mwild1@gmail.com>
parents:
9603
diff
changeset
|
48 local function muc_ns_filter(tag) |
38159b9adf9f
MUC: Add API for adding 'filtered namespaces' to be stripped from inbound presence
Matthew Wild <mwild1@gmail.com>
parents:
9603
diff
changeset
|
49 if filtered_namespaces[tag.attr.xmlns] then |
6271
006b0e0f0de2
plugins/muc: Move 'x' filtering from occupant to util
daurnimator <quae@daurnimator.com>
parents:
6218
diff
changeset
|
50 return nil; |
006b0e0f0de2
plugins/muc: Move 'x' filtering from occupant to util
daurnimator <quae@daurnimator.com>
parents:
6218
diff
changeset
|
51 end |
006b0e0f0de2
plugins/muc: Move 'x' filtering from occupant to util
daurnimator <quae@daurnimator.com>
parents:
6218
diff
changeset
|
52 return tag; |
006b0e0f0de2
plugins/muc: Move 'x' filtering from occupant to util
daurnimator <quae@daurnimator.com>
parents:
6218
diff
changeset
|
53 end |
006b0e0f0de2
plugins/muc: Move 'x' filtering from occupant to util
daurnimator <quae@daurnimator.com>
parents:
6218
diff
changeset
|
54 function _M.filter_muc_x(stanza) |
10713
38159b9adf9f
MUC: Add API for adding 'filtered namespaces' to be stripped from inbound presence
Matthew Wild <mwild1@gmail.com>
parents:
9603
diff
changeset
|
55 return stanza:maptags(muc_ns_filter); |
38159b9adf9f
MUC: Add API for adding 'filtered namespaces' to be stripped from inbound presence
Matthew Wild <mwild1@gmail.com>
parents:
9603
diff
changeset
|
56 end |
38159b9adf9f
MUC: Add API for adding 'filtered namespaces' to be stripped from inbound presence
Matthew Wild <mwild1@gmail.com>
parents:
9603
diff
changeset
|
57 |
38159b9adf9f
MUC: Add API for adding 'filtered namespaces' to be stripped from inbound presence
Matthew Wild <mwild1@gmail.com>
parents:
9603
diff
changeset
|
58 function _M.add_filtered_namespace(xmlns) |
38159b9adf9f
MUC: Add API for adding 'filtered namespaces' to be stripped from inbound presence
Matthew Wild <mwild1@gmail.com>
parents:
9603
diff
changeset
|
59 filtered_namespaces[xmlns] = true; |
6271
006b0e0f0de2
plugins/muc: Move 'x' filtering from occupant to util
daurnimator <quae@daurnimator.com>
parents:
6218
diff
changeset
|
60 end |
006b0e0f0de2
plugins/muc: Move 'x' filtering from occupant to util
daurnimator <quae@daurnimator.com>
parents:
6218
diff
changeset
|
61 |
9599
5a2135964ed3
MUC: Announce affiliation changes for JIDs that are not in the room
Matthew Wild <mwild1@gmail.com>
parents:
6271
diff
changeset
|
62 function _M.only_with_min_role(role) |
5a2135964ed3
MUC: Announce affiliation changes for JIDs that are not in the room
Matthew Wild <mwild1@gmail.com>
parents:
6271
diff
changeset
|
63 local min_role_value = _M.valid_roles[role]; |
9603
4897bd63f624
MUC: Add luacheck annotation for unused parameter in filter function
Matthew Wild <mwild1@gmail.com>
parents:
9599
diff
changeset
|
64 return function (nick, occupant) --luacheck: ignore 212/nick |
9599
5a2135964ed3
MUC: Announce affiliation changes for JIDs that are not in the room
Matthew Wild <mwild1@gmail.com>
parents:
6271
diff
changeset
|
65 if _M.valid_roles[occupant.role or "none"] >= min_role_value then |
5a2135964ed3
MUC: Announce affiliation changes for JIDs that are not in the room
Matthew Wild <mwild1@gmail.com>
parents:
6271
diff
changeset
|
66 return true; |
5a2135964ed3
MUC: Announce affiliation changes for JIDs that are not in the room
Matthew Wild <mwild1@gmail.com>
parents:
6271
diff
changeset
|
67 end |
5a2135964ed3
MUC: Announce affiliation changes for JIDs that are not in the room
Matthew Wild <mwild1@gmail.com>
parents:
6271
diff
changeset
|
68 end; |
5a2135964ed3
MUC: Announce affiliation changes for JIDs that are not in the room
Matthew Wild <mwild1@gmail.com>
parents:
6271
diff
changeset
|
69 end |
5a2135964ed3
MUC: Announce affiliation changes for JIDs that are not in the room
Matthew Wild <mwild1@gmail.com>
parents:
6271
diff
changeset
|
70 |
6218
bf11910bad5a
plugins/muc: Move valid_roles, valid_affiliations and is_kickable_error to new muc/util module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
71 return _M; |