Annotate

mod_block_strangers/mod_block_strangers.lua @ 5551:8bfcedd93a72

mod_rest: List all error conditions in OpenAPI spec These are not handled by datamanager but by util.stanza and util.error, so they are not represented in the JSON schema file.
author Kim Alvefur <zash@zash.se>
date Sat, 17 Jun 2023 16:26:33 +0200
parent 3023:38365c1f1fe4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
772
954532e273be mod_block_strangers: Module to block message and iqs from people not on your roster
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1
1929
82834df1dea6 mod_block_strangers: Add missing import of util.stanza
Kim Alvefur <zash@zash.se>
parents: 1928
diff changeset
2 local st = require"util.stanza";
772
954532e273be mod_block_strangers: Module to block message and iqs from people not on your roster
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 local jid_split = require "util.jid".split;
954532e273be mod_block_strangers: Module to block message and iqs from people not on your roster
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4 local jid_bare = require "util.jid".bare;
954532e273be mod_block_strangers: Module to block message and iqs from people not on your roster
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5 local is_contact_subscribed = require "core.rostermanager".is_contact_subscribed;
2196
09f6e1a09b2b mod_block_strangers: Allow stanzas form jids the user has sent directed presence to
Kim Alvefur <zash@zash.se>
parents: 2060
diff changeset
6 local full_sessions = prosody.full_sessions;
09f6e1a09b2b mod_block_strangers: Allow stanzas form jids the user has sent directed presence to
Kim Alvefur <zash@zash.se>
parents: 2060
diff changeset
7
09f6e1a09b2b mod_block_strangers: Allow stanzas form jids the user has sent directed presence to
Kim Alvefur <zash@zash.se>
parents: 2060
diff changeset
8 local function has_directed_presence(user, jid)
09f6e1a09b2b mod_block_strangers: Allow stanzas form jids the user has sent directed presence to
Kim Alvefur <zash@zash.se>
parents: 2060
diff changeset
9 local session = full_sessions[user];
2419
045d594a3707 mod_block_strangers: Check that the table of directed presence exists before indexing it (fixes traceback)
Kim Alvefur <zash@zash.se>
parents: 2196
diff changeset
10 if session then
045d594a3707 mod_block_strangers: Check that the table of directed presence exists before indexing it (fixes traceback)
Kim Alvefur <zash@zash.se>
parents: 2196
diff changeset
11 local directed = session.directed;
045d594a3707 mod_block_strangers: Check that the table of directed presence exists before indexing it (fixes traceback)
Kim Alvefur <zash@zash.se>
parents: 2196
diff changeset
12 if directed then
045d594a3707 mod_block_strangers: Check that the table of directed presence exists before indexing it (fixes traceback)
Kim Alvefur <zash@zash.se>
parents: 2196
diff changeset
13 return directed[jid];
045d594a3707 mod_block_strangers: Check that the table of directed presence exists before indexing it (fixes traceback)
Kim Alvefur <zash@zash.se>
parents: 2196
diff changeset
14 end
045d594a3707 mod_block_strangers: Check that the table of directed presence exists before indexing it (fixes traceback)
Kim Alvefur <zash@zash.se>
parents: 2196
diff changeset
15 end
2196
09f6e1a09b2b mod_block_strangers: Allow stanzas form jids the user has sent directed presence to
Kim Alvefur <zash@zash.se>
parents: 2060
diff changeset
16 end
772
954532e273be mod_block_strangers: Module to block message and iqs from people not on your roster
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17
954532e273be mod_block_strangers: Module to block message and iqs from people not on your roster
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 function check_subscribed(event)
954532e273be mod_block_strangers: Module to block message and iqs from people not on your roster
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 local stanza = event.stanza;
954532e273be mod_block_strangers: Module to block message and iqs from people not on your roster
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 local to_user, to_host, to_resource = jid_split(stanza.attr.to);
954532e273be mod_block_strangers: Module to block message and iqs from people not on your roster
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 local from_jid = jid_bare(stanza.attr.from);
2196
09f6e1a09b2b mod_block_strangers: Allow stanzas form jids the user has sent directed presence to
Kim Alvefur <zash@zash.se>
parents: 2060
diff changeset
22 if to_user and not has_directed_presence(stanza.attr.to, from_jid) and not is_contact_subscribed(to_user, to_host, from_jid) then
3023
38365c1f1fe4 mod_block_strangers: Allow stanza from self (fixes #966, thanks Sergey Popov)
Matthew Wild <mwild1@gmail.com>
parents: 2419
diff changeset
23 -- Allow all messages from your own jid
38365c1f1fe4 mod_block_strangers: Allow stanza from self (fixes #966, thanks Sergey Popov)
Matthew Wild <mwild1@gmail.com>
parents: 2419
diff changeset
24 if from_jid == to_user.."@"..to_host then
38365c1f1fe4 mod_block_strangers: Allow stanza from self (fixes #966, thanks Sergey Popov)
Matthew Wild <mwild1@gmail.com>
parents: 2419
diff changeset
25 return nil; -- Pass through
38365c1f1fe4 mod_block_strangers: Allow stanza from self (fixes #966, thanks Sergey Popov)
Matthew Wild <mwild1@gmail.com>
parents: 2419
diff changeset
26 end
2060
bd0c5d546bf8 mod_block_strangers: Allow iq/full responses through
Matthew Wild <mwild1@gmail.com>
parents: 1929
diff changeset
27 if to_resource and stanza.attr.type == "groupchat"
bd0c5d546bf8 mod_block_strangers: Allow iq/full responses through
Matthew Wild <mwild1@gmail.com>
parents: 1929
diff changeset
28 or stanza.name == "iq" and (stanza.attr.type == "result" or stanza.attr.type == "error") then
772
954532e273be mod_block_strangers: Module to block message and iqs from people not on your roster
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29 return nil; -- Pass through
954532e273be mod_block_strangers: Module to block message and iqs from people not on your roster
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30 end
1928
252b634b065d mod_block_strangers: Bounce IQ stanzas (they MUST be replied to)
Kim Alvefur <zash@zash.se>
parents: 1325
diff changeset
31 if stanza.name == "iq" and ( stanza.attr.type == "get" or stanza.attr.type == "set" ) then
252b634b065d mod_block_strangers: Bounce IQ stanzas (they MUST be replied to)
Kim Alvefur <zash@zash.se>
parents: 1325
diff changeset
32 event.origin.send(st.error_reply(stanza, "cancel", "service-unavailable"));
252b634b065d mod_block_strangers: Bounce IQ stanzas (they MUST be replied to)
Kim Alvefur <zash@zash.se>
parents: 1325
diff changeset
33 end
1325
b21236b6b8d8 Backed out changeset 853a382c9bd6
Kim Alvefur <zash@zash.se>
parents: 1324
diff changeset
34 return true; -- Drop stanza
772
954532e273be mod_block_strangers: Module to block message and iqs from people not on your roster
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35 end
954532e273be mod_block_strangers: Module to block message and iqs from people not on your roster
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36 end
954532e273be mod_block_strangers: Module to block message and iqs from people not on your roster
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37
774
52caf54fc270 mod_block_strangers: Bump handler priority to 200 (just because)
Matthew Wild <mwild1@gmail.com>
parents: 772
diff changeset
38 module:hook("message/bare", check_subscribed, 200);
52caf54fc270 mod_block_strangers: Bump handler priority to 200 (just because)
Matthew Wild <mwild1@gmail.com>
parents: 772
diff changeset
39 module:hook("message/full", check_subscribed, 200);
52caf54fc270 mod_block_strangers: Bump handler priority to 200 (just because)
Matthew Wild <mwild1@gmail.com>
parents: 772
diff changeset
40 module:hook("iq/full", check_subscribed, 200);