Mercurial > prosody-modules
annotate mod_ipcheck/mod_ipcheck.lua @ 5256:44f7edd4f845
mod_http_oauth2: Reject non-local hosts in more code paths
We're not issuing tokens for users on remote hosts, we can't even
authenticate them since they're remote. Thus the host is always the
local module.host so no need to pass around the host in most cases or
use it for anything but enforcing the same host.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 16 Mar 2023 17:52:10 +0100 |
parents | b0628bc93acf |
children |
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); |