Software /
code /
prosody-modules
Diff
mod_carbons_copies/mod_carbons_copies.lua @ 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 |
child | 1343:7dbde05b48a9 |
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