mirror of https://github.com/sipwise/prosody.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.2 KiB
64 lines
2.2 KiB
-- Send carbons v0 style copies of incoming messages to clients which
|
|
-- are not (yet) capable of Message Carbons (XEP-0280).
|
|
--
|
|
-- This extension integrates with the mod_carbons plugin in such a way
|
|
-- that a client capable of Message Carbons will not get a v0 copy.
|
|
--
|
|
-- This extension can be enabled for all users by default by setting
|
|
-- carbons_copies_default = true.
|
|
--
|
|
-- Alternatively or additionally setting carbons_copies_adhoc = true
|
|
-- will allow the user to enable or disable copies through Adhoc
|
|
-- commands.
|
|
--
|
|
-- Copyright (C) 2012 Michael Holzt
|
|
--
|
|
-- This file is MIT/X11 licensed.
|
|
|
|
local jid_split = require "util.jid".split;
|
|
local dm_load = require "util.datamanager".load;
|
|
local dm_store = require "util.datamanager".store;
|
|
local adhoc_new = module:require "adhoc".new;
|
|
local xmlns_carbons_v0 = "urn:xmpp:carbons:0";
|
|
local storename = "mod_carbons_copies";
|
|
|
|
local function toggle_copies(data, on)
|
|
local username, hostname, resource = jid_split(data.from);
|
|
dm_store(username, hostname, storename, { enabled = on });
|
|
end
|
|
|
|
local function adhoc_enable_copies(self, data, state)
|
|
toggle_copies(data, true);
|
|
return { info = "Copies are enabled for you now.\nPlease restart/reconnect clients.", status = "completed" };
|
|
end
|
|
|
|
local function adhoc_disable_copies(self, data, state)
|
|
toggle_copies(data, false);
|
|
return { info = "Copies are disabled for you now.\nPlease restart/reconnect clients.", status = "completed" };
|
|
end
|
|
|
|
module:hook("resource-bind", function(event)
|
|
local session = event.session;
|
|
local username, hostname, resource = jid_split(session.full_jid);
|
|
|
|
local store = dm_load(username, hostname, storename) or
|
|
{ enabled =
|
|
module:get_option_boolean("carbons_copies_default") };
|
|
|
|
if store.enabled then
|
|
session.want_carbons = xmlns_carbons_v0;
|
|
module:log("debug", "%s enabling copies", session.full_jid);
|
|
end
|
|
end);
|
|
|
|
-- Adhoc-Support
|
|
if module:get_option_boolean("carbons_copies_adhoc") then
|
|
local enable_desc = adhoc_new("Carbons: Enable Copies",
|
|
"mod_carbons_copies#enable", adhoc_enable_copies);
|
|
local disable_desc = adhoc_new("Carbons: Disable Copies",
|
|
"mod_carbons_copies#disable", adhoc_disable_copies);
|
|
|
|
module:add_item("adhoc", enable_desc);
|
|
module:add_item("adhoc", disable_desc);
|
|
end
|