Mercurial > prosody-modules
comparison mod_muc_access_control/mod_muc_access_control.lua @ 3024:f54c80404ad3
mod_muc_access_control: Multiple fixes to make the module work (fixes #1086)
author | Frank Doepper <prosody@woffs.de> |
---|---|
date | Tue, 22 May 2018 16:13:03 +0100 |
parents | 050cd7b6fa96 |
children |
comparison
equal
deleted
inserted
replaced
3023:38365c1f1fe4 | 3024:f54c80404ad3 |
---|---|
11 if not prepped_room_name then | 11 if not prepped_room_name then |
12 module:log("error", "Invalid room name: %s", unprepped_room_name); | 12 module:log("error", "Invalid room name: %s", unprepped_room_name); |
13 else | 13 else |
14 local prepped_list = {}; | 14 local prepped_list = {}; |
15 for _, unprepped_jid in ipairs(unprepped_list) do | 15 for _, unprepped_jid in ipairs(unprepped_list) do |
16 local prepped_jid = jid.prep(jid); | 16 local prepped_jid = jid.prep(unprepped_jid); |
17 if not prepped_jid then | 17 if not prepped_jid then |
18 module:log("error", "Invalid JID: %s", unprepped_jid); | 18 module:log("error", "Invalid JID: %s", unprepped_jid); |
19 else | 19 else |
20 table.insert(prepped_list, jid.pep(jid)); | 20 prepped_list[prepped_jid] = true; |
21 end | 21 end |
22 end | 22 end |
23 access_lists[prepped_room_name] = prepped_list; | |
23 end | 24 end |
24 end | 25 end |
25 | 26 |
26 local function is_restricted(room, who) | 27 local function is_restricted(room, who) |
27 local allowed = access_lists[room]; | 28 local allowed = access_lists[room]; |
32 | 33 |
33 return "forbidden"; | 34 return "forbidden"; |
34 end | 35 end |
35 | 36 |
36 module:hook("presence/full", function(event) | 37 module:hook("presence/full", function(event) |
37 local stanza = event.stanza; | 38 local stanza = event.stanza; |
38 | 39 |
39 if stanza.name == "presence" and stanza.attr.type == "unavailable" then -- Leaving events get discarded | 40 if stanza.name == "presence" and stanza.attr.type == "unavailable" then -- Leaving events get discarded |
40 return; | 41 return; |
41 end | 42 end |
42 | 43 |
43 -- Get the room | 44 -- Get the room |
44 local room = jid.split(stanza.attr.to); | 45 local room = jid.split(stanza.attr.to); |
45 if not room then return; end | 46 if not room then return; end |
46 | 47 |
47 -- Get who has tried to join it | 48 -- Get who has tried to join it |
48 local who = jid.bare(stanza.attr.from) | 49 local who = jid.bare(stanza.attr.from) |
49 | 50 |
50 -- Checking whether room is restricted | 51 -- Checking whether room is restricted |
51 local check_restricted = is_restricted(room, who) | 52 local check_restricted = is_restricted(room, who) |
52 if check_restricted ~= nil then | 53 if check_restricted ~= nil then |
53 event.allowed = false; | 54 event.allowed = false; |
54 event.stanza.attr.type = 'error'; | 55 event.stanza.attr.type = 'error'; |
55 return event.origin.send(st.error_reply(event.stanza, "cancel", "forbidden", "You're not allowed to enter this room: " .. check_restricted)); | 56 return event.origin.send(st.error_reply(event.stanza, "cancel", "forbidden", "You're not allowed to enter this room: " .. check_restricted)); |
56 end | 57 end |
57 end, 10); | 58 end, 10); |