Mercurial > prosody-modules
comparison mod_muc_http_auth/mod_muc_http_auth.lua @ 4304:aec8148df26a
mod_muc_http_auth: Bugfix: Not properly listening on register IQs
author | Seve Ferrer <seve@delape.net> |
---|---|
date | Fri, 18 Dec 2020 16:31:01 +0100 |
parents | d261233f7ced |
children | caaa40f072da |
comparison
equal
deleted
inserted
replaced
4303:d261233f7ced | 4304:aec8148df26a |
---|---|
8 local authorization_url = module:get_option("muc_http_auth_url", "") | 8 local authorization_url = module:get_option("muc_http_auth_url", "") |
9 local enabled_for = module:get_option_set("muc_http_auth_enabled_for", nil) | 9 local enabled_for = module:get_option_set("muc_http_auth_enabled_for", nil) |
10 local disabled_for = module:get_option_set("muc_http_auth_disabled_for", nil) | 10 local disabled_for = module:get_option_set("muc_http_auth_disabled_for", nil) |
11 local insecure = module:get_option("muc_http_auth_insecure", false) --For development purposes | 11 local insecure = module:get_option("muc_http_auth_insecure", false) --For development purposes |
12 local authorize_registration = module:get_option("muc_http_auth_authorize_registration", false) | 12 local authorize_registration = module:get_option("muc_http_auth_authorize_registration", false) |
13 | |
14 local verbs = {presence='join', iq='register'}; | |
13 | 15 |
14 local function must_be_authorized(room_node) | 16 local function must_be_authorized(room_node) |
15 -- If none of these is set, all rooms need authorization | 17 -- If none of these is set, all rooms need authorization |
16 if not enabled_for and not disabled_for then return true; end | 18 if not enabled_for and not disabled_for then return true; end |
17 | 19 |
33 return {err=err}; | 35 return {err=err}; |
34 end | 36 end |
35 | 37 |
36 local function handle_presence(event) | 38 local function handle_presence(event) |
37 local stanza = event.stanza; | 39 local stanza = event.stanza; |
38 if stanza.name ~= "presence" or stanza.attr.type == "unavailable" then | 40 if stanza.name ~= "iq" and stanza.name ~= "presence" or stanza.attr.type == "unavailable" then return; end |
39 return; | |
40 end | |
41 | 41 |
42 local room, origin = event.room, event.origin; | 42 local room, origin = event.room, event.origin; |
43 if (not room) or (not origin) then return; end | 43 if (not room) or (not origin) then return; end |
44 | 44 |
45 if not must_be_authorized(jid_node(room.jid)) then return; end | 45 if not must_be_authorized(jid_node(room.jid)) then return; end |
48 local url = authorization_url .. "?userJID=" .. user_bare_jid .."&mucJID=" .. room.jid; | 48 local url = authorization_url .. "?userJID=" .. user_bare_jid .."&mucJID=" .. room.jid; |
49 | 49 |
50 local result = wait_for(http.request(url, {method="GET", insecure=insecure}):next(handle_success, handle_error)); | 50 local result = wait_for(http.request(url, {method="GET", insecure=insecure}):next(handle_success, handle_error)); |
51 local response, err = result.response, result.err; | 51 local response, err = result.response, result.err; |
52 | 52 |
53 local verb = verbs[stanza.name]; | |
53 if not (response and response.allowed) then | 54 if not (response and response.allowed) then |
54 -- User is not authorized to join this room | 55 -- User is not authorized to join this room |
55 err = (response or {}).err or err | 56 err = (response or {}).err or err |
56 module:log("debug", user_bare_jid .. " is not authorized to join " .. room.jid .. " Error: " .. tostring(err)); | 57 module:log("debug", user_bare_jid .. " is not authorized to " ..verb.. ": " .. room.jid .. " Error: " .. tostring(err)); |
57 origin.send(st.error_reply(stanza, "error", "not-authorized", nil, module.host)); | 58 origin.send(st.error_reply(stanza, "error", "not-authorized", nil, module.host)); |
58 return true; | 59 return true; |
59 end | 60 end |
60 | 61 |
61 module:log("debug", user_bare_jid .. " is authorized to join " .. room.jid); | 62 module:log("debug", user_bare_jid .. " is authorized to " .. verb .. ": " .. room.jid); |
62 return; | 63 return; |
63 end | 64 end |
64 | 65 |
65 if authorize_registration then | 66 if authorize_registration then |
66 module:hook("muc-register-iq", handle_presence); | 67 module:hook("muc-register-iq", handle_presence); |