annotate mod_ipcheck/mod_ipcheck.lua @ 4203:c4002aae4ad3

mod_s2s_keepalive: Use timestamp as iq @id RFC 6120 implies that the id attribute must be unique within a stream. This should fix problems with remote servers that enforce uniqueness and don't answer duplicated ids. If it doesn't do that, then at least you can get a guesstimate at round-trip time from the difference between the result iq stanza and the timestamp it was logged without having to go look for when it was sent, or needing to keep state.
author Kim Alvefur <zash@zash.se>
date Wed, 14 Oct 2020 18:02:10 +0200
parents b0628bc93acf
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
130
51cd803e86be mod_ipcheck: Initial commit. An implementation of the Server IP Check proto-XEP.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
1
51cd803e86be mod_ipcheck: Initial commit. An implementation of the Server IP Check proto-XEP.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
2 -- mod_ipcheck.lua
136
0525c66e7d13 mod_ipcheck: Updated XEP number and URL in comments to the newly published XEP.
Waqas Hussain <waqas20@gmail.com>
parents: 135
diff changeset
3 -- Implementation of XEP-0279: Server IP Check <http://xmpp.org/extensions/xep-0279.html>
130
51cd803e86be mod_ipcheck: Initial commit. An implementation of the Server IP Check proto-XEP.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
4
51cd803e86be mod_ipcheck: Initial commit. An implementation of the Server IP Check proto-XEP.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
5 local st = require "util.stanza";
51cd803e86be mod_ipcheck: Initial commit. An implementation of the Server IP Check proto-XEP.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
6
51cd803e86be mod_ipcheck: Initial commit. An implementation of the Server IP Check proto-XEP.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
7 module:add_feature("urn:xmpp:sic:0");
51cd803e86be mod_ipcheck: Initial commit. An implementation of the Server IP Check proto-XEP.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
8
3269
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
9 module:hook("iq-get/bare/urn:xmpp:sic:0:ip", function(event)
130
51cd803e86be mod_ipcheck: Initial commit. An implementation of the Server IP Check proto-XEP.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
10 local origin, stanza = event.origin, event.stanza;
3269
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
11 if stanza.attr.to then
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
12 origin.send(st.error_reply(stanza, "auth", "forbidden", "You can only ask about your own IP address"));
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
13 elseif origin.ip then
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
14 origin.send(st.reply(stanza):tag("ip", {xmlns='urn:xmpp:sic:0'}):text(origin.ip));
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
15 else
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
16 -- IP addresses should normally be available, but in case they are not
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
17 origin.send(st.error_reply(stanza, "cancel", "service-unavailable", "IP address for this session is not available"));
130
51cd803e86be mod_ipcheck: Initial commit. An implementation of the Server IP Check proto-XEP.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
18 end
3269
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
19 return true;
130
51cd803e86be mod_ipcheck: Initial commit. An implementation of the Server IP Check proto-XEP.
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
20 end);
1244
d1bc9a796daf mod_ipcheck: Add support for XEP version 0.2 (includes port)
Kim Alvefur <zash@zash.se>
parents: 136
diff changeset
21
d1bc9a796daf mod_ipcheck: Add support for XEP version 0.2 (includes port)
Kim Alvefur <zash@zash.se>
parents: 136
diff changeset
22 module:add_feature("urn:xmpp:sic:1");
d1bc9a796daf mod_ipcheck: Add support for XEP version 0.2 (includes port)
Kim Alvefur <zash@zash.se>
parents: 136
diff changeset
23
3269
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
24 module:hook("iq-get/bare/urn:xmpp:sic:1:address", function(event)
1244
d1bc9a796daf mod_ipcheck: Add support for XEP version 0.2 (includes port)
Kim Alvefur <zash@zash.se>
parents: 136
diff changeset
25 local origin, stanza = event.origin, event.stanza;
3269
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
26 if stanza.attr.to then
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
27 origin.send(st.error_reply(stanza, "auth", "forbidden", "You can only ask about your own IP address"));
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
28 elseif origin.ip then
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
29 local reply = st.reply(stanza):tag("address", {xmlns='urn:xmpp:sic:1'})
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
30 :tag("ip"):text(origin.ip):up()
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
31 if origin.conn and origin.conn.port then -- server_event
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
32 reply:tag("port"):text(tostring(origin.conn:port()))
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
33 elseif origin.conn and origin.conn.clientport then -- server_select
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
34 reply:tag("port"):text(tostring(origin.conn:clientport()))
1244
d1bc9a796daf mod_ipcheck: Add support for XEP version 0.2 (includes port)
Kim Alvefur <zash@zash.se>
parents: 136
diff changeset
35 end
3269
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
36 origin.send(reply);
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
37 else
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
38 -- IP addresses should normally be available, but in case they are not
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
39 origin.send(st.error_reply(stanza, "cancel", "service-unavailable", "IP address for this session is not available"));
1244
d1bc9a796daf mod_ipcheck: Add support for XEP version 0.2 (includes port)
Kim Alvefur <zash@zash.se>
parents: 136
diff changeset
40 end
3269
b0628bc93acf mod_ipcheck: Simplify iq handling by hooking on iq-get/ instead of iq/.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 1945
diff changeset
41 return true;
1244
d1bc9a796daf mod_ipcheck: Add support for XEP version 0.2 (includes port)
Kim Alvefur <zash@zash.se>
parents: 136
diff changeset
42 end);