Mercurial > prosody-modules
changeset 3269:b0628bc93acf
mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Fri, 24 Aug 2018 21:15:38 +0200 (2018-08-24) |
parents | 4cdd1ddae72c |
children | 7776c9dc5f37 |
files | mod_ipcheck/mod_ipcheck.lua |
diffstat | 1 files changed, 24 insertions(+), 28 deletions(-) [+] |
line wrap: on
line diff
--- a/mod_ipcheck/mod_ipcheck.lua Fri Aug 24 20:55:10 2018 +0200 +++ b/mod_ipcheck/mod_ipcheck.lua Fri Aug 24 21:15:38 2018 +0200 @@ -6,41 +6,37 @@ module:add_feature("urn:xmpp:sic:0"); -module:hook("iq/bare/urn:xmpp:sic:0:ip", function(event) +module:hook("iq-get/bare/urn:xmpp:sic:0:ip", function(event) local origin, stanza = event.origin, event.stanza; - if stanza.attr.type == "get" then - if stanza.attr.to then - origin.send(st.error_reply(stanza, "auth", "forbidden", "You can only ask about your own IP address")); - elseif origin.ip then - origin.send(st.reply(stanza):tag("ip", {xmlns='urn:xmpp:sic:0'}):text(origin.ip)); - else - -- IP addresses should normally be available, but in case they are not - origin.send(st.error_reply(stanza, "cancel", "service-unavailable", "IP address for this session is not available")); - end - return true; + if stanza.attr.to then + origin.send(st.error_reply(stanza, "auth", "forbidden", "You can only ask about your own IP address")); + elseif origin.ip then + origin.send(st.reply(stanza):tag("ip", {xmlns='urn:xmpp:sic:0'}):text(origin.ip)); + else + -- IP addresses should normally be available, but in case they are not + origin.send(st.error_reply(stanza, "cancel", "service-unavailable", "IP address for this session is not available")); end + return true; end); module:add_feature("urn:xmpp:sic:1"); -module:hook("iq/bare/urn:xmpp:sic:1:address", function(event) +module:hook("iq-get/bare/urn:xmpp:sic:1:address", function(event) local origin, stanza = event.origin, event.stanza; - if stanza.attr.type == "get" then - if stanza.attr.to then - origin.send(st.error_reply(stanza, "auth", "forbidden", "You can only ask about your own IP address")); - elseif origin.ip then - local reply = st.reply(stanza):tag("address", {xmlns='urn:xmpp:sic:1'}) - :tag("ip"):text(origin.ip):up() - if origin.conn and origin.conn.port then -- server_event - reply:tag("port"):text(tostring(origin.conn:port())) - elseif origin.conn and origin.conn.clientport then -- server_select - reply:tag("port"):text(tostring(origin.conn:clientport())) - end - origin.send(reply); - else - -- IP addresses should normally be available, but in case they are not - origin.send(st.error_reply(stanza, "cancel", "service-unavailable", "IP address for this session is not available")); + if stanza.attr.to then + origin.send(st.error_reply(stanza, "auth", "forbidden", "You can only ask about your own IP address")); + elseif origin.ip then + local reply = st.reply(stanza):tag("address", {xmlns='urn:xmpp:sic:1'}) + :tag("ip"):text(origin.ip):up() + if origin.conn and origin.conn.port then -- server_event + reply:tag("port"):text(tostring(origin.conn:port())) + elseif origin.conn and origin.conn.clientport then -- server_select + reply:tag("port"):text(tostring(origin.conn:clientport())) end - return true; + origin.send(reply); + else + -- IP addresses should normally be available, but in case they are not + origin.send(st.error_reply(stanza, "cancel", "service-unavailable", "IP address for this session is not available")); end + return true; end);