author | Matthew Wild <mwild1@gmail.com> |
Wed, 27 Mar 2024 15:35:15 +0000 | |
branch | 0.12 |
changeset 13469 | 54a936345aaa |
parent 10717 | 38159b9adf9f |
permissions | -rw-r--r-- |
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 |
|
10717
38159b9adf9f
MUC: Add API for adding 'filtered namespaces' to be stripped from inbound presence
Matthew Wild <mwild1@gmail.com>
parents:
9607
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:
9607
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:
9607
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:
9607
diff
changeset
|
47 |
|
38159b9adf9f
MUC: Add API for adding 'filtered namespaces' to be stripped from inbound presence
Matthew Wild <mwild1@gmail.com>
parents:
9607
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:
9607
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) |
10717
38159b9adf9f
MUC: Add API for adding 'filtered namespaces' to be stripped from inbound presence
Matthew Wild <mwild1@gmail.com>
parents:
9607
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:
9607
diff
changeset
|
56 |
end |
38159b9adf9f
MUC: Add API for adding 'filtered namespaces' to be stripped from inbound presence
Matthew Wild <mwild1@gmail.com>
parents:
9607
diff
changeset
|
57 |
|
38159b9adf9f
MUC: Add API for adding 'filtered namespaces' to be stripped from inbound presence
Matthew Wild <mwild1@gmail.com>
parents:
9607
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:
9607
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 |
|
9603
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]; |
9607
4897bd63f624
MUC: Add luacheck annotation for unused parameter in filter function
Matthew Wild <mwild1@gmail.com>
parents:
9603
diff
changeset
|
64 |
return function (nick, occupant) --luacheck: ignore 212/nick |
9603
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; |