annotate mod_ipcheck/mod_ipcheck.lua @ 5173:460f78654864

mod_muc_rtbl: also filter messages This was a bit tricky because we don't want to run the JIDs through SHA256 on each message. Took a while to come up with this simple plan of just caching the SHA256 of the JIDs on the occupants. This will leave some dirt in the occupants after unloading the module, but that should be ok; once they cycle the room, the hashes will be gone. This is direly needed, otherwise, there is a tight race between the moderation activities and the actors joining the room.
author Jonas Schäfer <jonas@wielicki.name>
date Tue, 21 Feb 2023 21:37:27 +0100
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);