Mercurial > prosody-hg
comparison plugins/mod_carbons.lua @ 12308:063ce658c181
mod_carbons: Allow plugging into decision of whether to carbon-copy
Similar procedure as mod_csi_simple and mod_mam
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Mon, 21 Feb 2022 11:24:58 +0100 |
| parents | 1c47162dd965 |
| children | 74b9e05af71e |
comparison
equal
deleted
inserted
replaced
| 12307:dcad3a207915 | 12308:063ce658c181 |
|---|---|
| 67 end | 67 end |
| 68 | 68 |
| 69 return false, "default"; | 69 return false, "default"; |
| 70 end | 70 end |
| 71 | 71 |
| 72 module:hook("carbons-should-copy", function (event) | |
| 73 local should, why = should_copy(event.stanza); | |
| 74 event.reason = why; | |
| 75 return should; | |
| 76 end, -1) | |
| 77 | |
| 72 local function message_handler(event, c2s) | 78 local function message_handler(event, c2s) |
| 73 local origin, stanza = event.origin, event.stanza; | 79 local origin, stanza = event.origin, event.stanza; |
| 74 local orig_type = stanza.attr.type or "normal"; | 80 local orig_type = stanza.attr.type or "normal"; |
| 75 local orig_from = stanza.attr.from; | 81 local orig_from = stanza.attr.from; |
| 76 local bare_from = jid_bare(orig_from); | 82 local bare_from = jid_bare(orig_from); |
| 99 if not user_sessions then | 105 if not user_sessions then |
| 100 module:log("debug", "Skip carbons for offline user"); | 106 module:log("debug", "Skip carbons for offline user"); |
| 101 return -- No use in sending carbons to an offline user | 107 return -- No use in sending carbons to an offline user |
| 102 end | 108 end |
| 103 | 109 |
| 104 local should, why = should_copy(stanza, c2s, bare_jid); | 110 local event_payload = { stanza = stanza; session = origin }; |
| 111 local should = module:fire_event("carbons-should-copy", event_payload); | |
| 112 local why = event_payload.reason; | |
| 105 | 113 |
| 106 if not should then | 114 if not should then |
| 107 module:log("debug", "Not copying stanza: %s (%s)", stanza:top_tag(), why); | 115 module:log("debug", "Not copying stanza: %s (%s)", stanza:top_tag(), why); |
| 108 if why == "private" and not c2s then | 116 if why == "private" and not c2s then |
| 109 stanza:maptags(function(tag) | 117 stanza:maptags(function(tag) |
