Mercurial > prosody-hg
comparison plugins/mod_blocklist.lua @ 8275:13dad833e821
mod_blocklist: Drop messages to existing full JIDs in order to prevent issues with MUC PMs, fixes #690
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Wed, 27 Sep 2017 15:27:29 +0200 |
| parents | 62c540d51d50 |
| children | 0fd63ed1f647 |
comparison
equal
deleted
inserted
replaced
| 8274:3798955049e3 | 8275:13dad833e821 |
|---|---|
| 20 local jid_prep = require"util.jid".prep; | 20 local jid_prep = require"util.jid".prep; |
| 21 local jid_split = require"util.jid".split; | 21 local jid_split = require"util.jid".split; |
| 22 | 22 |
| 23 local storage = module:open_store(); | 23 local storage = module:open_store(); |
| 24 local sessions = prosody.hosts[module.host].sessions; | 24 local sessions = prosody.hosts[module.host].sessions; |
| 25 local full_sessions = prosody.full_sessions; | |
| 25 | 26 |
| 26 -- First level cache of blocklists by username. | 27 -- First level cache of blocklists by username. |
| 27 -- Weak table so may randomly expire at any time. | 28 -- Weak table so may randomly expire at any time. |
| 28 local cache = setmetatable({}, { __mode = "v" }); | 29 local cache = setmetatable({}, { __mode = "v" }); |
| 29 | 30 |
| 269 end | 270 end |
| 270 return drop_stanza(event); -- result or error | 271 return drop_stanza(event); -- result or error |
| 271 end | 272 end |
| 272 | 273 |
| 273 local function bounce_message(event) | 274 local function bounce_message(event) |
| 274 local type = event.stanza.attr.type; | 275 local stanza = event.stanza; |
| 276 local type = stanza.attr.type; | |
| 275 if type == "chat" or not type or type == "normal" then | 277 if type == "chat" or not type or type == "normal" then |
| 278 if full_sessions[stanza.attr.to] then | |
| 279 -- See #690 | |
| 280 return drop_stanza(event); | |
| 281 end | |
| 276 return bounce_stanza(event); | 282 return bounce_stanza(event); |
| 277 end | 283 end |
| 278 return drop_stanza(event); -- drop headlines, groupchats etc | 284 return drop_stanza(event); -- drop headlines, groupchats etc |
| 279 end | 285 end |
| 280 | 286 |
| 303 -- Hook all the events! | 309 -- Hook all the events! |
| 304 local prio_in, prio_out = 100, 100; | 310 local prio_in, prio_out = 100, 100; |
| 305 module:hook("presence/bare", drop_stanza, prio_in); | 311 module:hook("presence/bare", drop_stanza, prio_in); |
| 306 module:hook("presence/full", drop_stanza, prio_in); | 312 module:hook("presence/full", drop_stanza, prio_in); |
| 307 | 313 |
| 308 -- FIXME See #690 | |
| 309 module:hook("message/bare", bounce_message, prio_in); | 314 module:hook("message/bare", bounce_message, prio_in); |
| 310 module:hook("message/full", bounce_message, prio_in); | 315 module:hook("message/full", bounce_message, prio_in); |
| 311 | 316 |
| 312 module:hook("iq/bare", bounce_iq, prio_in); | 317 module:hook("iq/bare", bounce_iq, prio_in); |
| 313 module:hook("iq/full", bounce_iq, prio_in); | 318 module:hook("iq/full", bounce_iq, prio_in); |
