changeset 889:9901d267f938

mod_carbons_copies: Initial commit; allow the user to enable v0 style carbons for clients which are not carbons-capable yet. This will not interfere with clients which have support for regular Message Carbons (XEP-0280). This module takes two optional parameters: carbons_copies_default - if set to true, copies will be enabled by default carbons_copies_adhoc - Enable Adhoc-commands to allow the user to enable/disable copies
author Michael Holzt <kju@fqdn.org>
date Sun, 23 Dec 2012 19:34:29 +0100
parents f8d08f8ed7de
children 7ac1b8a799be
files mod_carbons_copies/mod_carbons_copies.lua
diffstat 1 files changed, 63 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_carbons_copies/mod_carbons_copies.lua	Sun Dec 23 19:34:29 2012 +0100
@@ -0,0 +1,63 @@
+-- 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