Software /
code /
prosody-modules
File
mod_muc_offline_delivery/mod_muc_offline_delivery.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 |
parent | 4780:4abb33a15897 |
line wrap: on
line source
local st = require "util.stanza"; local default_enable = module:get_option_boolean("muc_offline_delivery_default", false); module:add_item("muc-registration-field", { name = "offline_delivery"; var = "{http://tigase.org/protocol/muc}offline"; type = "boolean"; label = "Receive messages while not connected to the room"; value = default_enable; }); module:hook("muc-registration-submitted", function (event) local deliver_offline = event.submitted_data.offline_delivery; event.affiliation_data.offline_delivery = deliver_offline; end); module:hook("muc-add-history", function (event) module:log("debug", "Broadcasting message to offline occupants..."); local sent = 0; local room = event.room; for jid, affiliation, data in room:each_affiliation() do --luacheck: ignore 213/affiliation local reserved_nickname = data and data.reserved_nickname; local user_setting = data and data.offline_delivery or nil; if reserved_nickname and (user_setting or (user_setting == nil and default_enable)) then local is_absent = not room:get_occupant_by_nick(room.jid.."/"..reserved_nickname); if is_absent then module:log("debug", "Forwarding message to offline member <%s>", jid); local msg = st.clone(event.stanza); msg.attr.to = jid; module:send(msg); sent = sent + 1; end end end if sent > 0 then module:log("debug", "Sent message to %d offline occupants", sent); end end);