changeset 645:9591315b98ae

mod_adhoc: Remove
author Matthew Wild <mwild1@gmail.com>
date Sat, 28 Apr 2012 19:48:37 +0100
parents ceac1a0e74ea
children aef5355a2ca6
files mod_adhoc/adhoc/adhoc.lib.lua mod_adhoc/adhoc/mod_adhoc.lua
diffstat 2 files changed, 0 insertions(+), 195 deletions(-) [+]
line wrap: on
line diff
--- a/mod_adhoc/adhoc/adhoc.lib.lua	Sat Apr 28 19:47:17 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
--- Copyright (C) 2009-2010 Florian Zeitz
---
--- This file is MIT/X11 licensed. Please see the
--- COPYING file in the source package for more information.
---
-
-local st, uuid = require "util.stanza", require "util.uuid";
-
-local xmlns_cmd = "http://jabber.org/protocol/commands";
-
-local states = {}
-
-local _M = {};
-
-function _cmdtag(desc, status, sessionid, action)
-	local cmd = st.stanza("command", { xmlns = xmlns_cmd, node = desc.node, status = status });
-	if sessionid then cmd.attr.sessionid = sessionid; end
-	if action then cmd.attr.action = action; end
-
-	return cmd;
-end
-
-function _M.new(name, node, handler, permission)
-	return { name = name, node = node, handler = handler, cmdtag = _cmdtag, permission = (permission or "user") };
-end
-
-function _M.handle_cmd(command, origin, stanza)
-	local sessionid = stanza.tags[1].attr.sessionid or uuid.generate();
-	local dataIn = {};
-	dataIn.to = stanza.attr.to;
-	dataIn.from = stanza.attr.from;
-	dataIn.action = stanza.tags[1].attr.action or "execute";
-	dataIn.form = stanza.tags[1]:child_with_ns("jabber:x:data");
-
-	local data, state = command:handler(dataIn, states[sessionid]);
-	states[sessionid] = state;
-	local stanza = st.reply(stanza);
-	if data.status == "completed" then
-		states[sessionid] = nil;
-		cmdtag = command:cmdtag("completed", sessionid);
-	elseif data.status == "canceled" then
-		states[sessionid] = nil;
-		cmdtag = command:cmdtag("canceled", sessionid);
-	elseif data.status == "error" then
-		states[sessionid] = nil;
-		stanza = st.error_reply(stanza, data.error.type, data.error.condition, data.error.message);
-		origin.send(stanza);
-		return true;
-	else 
-		cmdtag = command:cmdtag("executing", sessionid);
-	end
-
-	for name, content in pairs(data) do
-		if name == "info" then
-			cmdtag:tag("note", {type="info"}):text(content):up();
-		elseif name == "warn" then
-			cmdtag:tag("note", {type="warn"}):text(content):up();
-		elseif name == "error" then
-			cmdtag:tag("note", {type="error"}):text(content.message):up();
-		elseif name =="actions" then
-			local actions = st.stanza("actions");
-			for _, action in ipairs(content) do
-				if (action == "prev") or (action == "next") or (action == "complete") then
-					actions:tag(action):up();
-				else
-					module:log("error", 'Command "'..command.name..
-						'" at node "'..command.node..'" provided an invalid action "'..action..'"');
-				end
-			end
-			cmdtag:add_child(actions);
-		elseif name == "form" then
-			cmdtag:add_child((content.layout or content):form(content.values));
-		elseif name == "result" then
-			cmdtag:add_child((content.layout or content):form(content.values, "result"));
-		elseif name == "other" then
-			cmdtag:add_child(content);
-		end
-	end
-	stanza:add_child(cmdtag);
-	origin.send(stanza);
-
-	return true;
-end
-
-return _M;
--- a/mod_adhoc/adhoc/mod_adhoc.lua	Sat Apr 28 19:47:17 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,110 +0,0 @@
--- Copyright (C) 2009 Thilo Cestonaro
--- Copyright (C) 2009-2010 Florian Zeitz
---
--- This file is MIT/X11 licensed. Please see the
--- COPYING file in the source package for more information.
---
-
-local st = require "util.stanza";
-local is_admin = require "core.usermanager".is_admin;
-local adhoc_handle_cmd = module:require "adhoc".handle_cmd;
-local xmlns_cmd = "http://jabber.org/protocol/commands";
-local xmlns_disco = "http://jabber.org/protocol/disco";
-local commands = {};
-
-module:add_feature(xmlns_cmd);
-
-module:hook("iq/host/"..xmlns_disco.."#info:query", function (event)
-	local origin, stanza = event.origin, event.stanza;
-	local node = stanza.tags[1].attr.node;
-	if stanza.attr.type == "get" and node then
-		if commands[node] then
-			-- Required for Prosody <= 0.7
-			local privileged = is_admin(stanza.attr.from)
-			    or is_admin(stanza.attr.from, stanza.attr.to);
-			if (commands[node].permission == "admin" and privileged)
-			    or (commands[node].permission == "user") then
-				reply = st.reply(stanza);
-				reply:tag("query", { xmlns = xmlns_disco.."#info",
-				    node = node });
-				reply:tag("identity", { name = commands[node].name,
-				    category = "automation", type = "command-node" }):up();
-				reply:tag("feature", { var = xmlns_cmd }):up();
-				reply:tag("feature", { var = "jabber:x:data" }):up();
-			else
-				reply = st.error_reply(stanza, "auth", "forbidden", "This item is not available to you");
-			end
-			origin.send(reply);
-			return true;
-		elseif node == xmlns_cmd then
-			reply = st.reply(stanza);
-			reply:tag("query", { xmlns = xmlns_disco.."#info",
-			    node = node });
-			reply:tag("identity", { name = "Ad-Hoc Commands",
-			    category = "automation", type = "command-list" }):up();
-			origin.send(reply);
-			return true;
-		end
-	end
-end);
-
-module:hook("iq/host/"..xmlns_disco.."#items:query", function (event)
-	local origin, stanza = event.origin, event.stanza;
-	if stanza.attr.type == "get" and stanza.tags[1].attr.node
-	    and stanza.tags[1].attr.node == xmlns_cmd then
-		-- Required for Prosody <= 0.7
-		local privileged = is_admin(stanza.attr.from)
-		    or is_admin(stanza.attr.from, stanza.attr.to);
-		reply = st.reply(stanza);
-		reply:tag("query", { xmlns = xmlns_disco.."#items",
-		    node = xmlns_cmd });
-		for node, command in pairs(commands) do
-			if (command.permission == "admin" and privileged)
-			    or (command.permission == "user") then
-				reply:tag("item", { name = command.name,
-				    node = node, jid = module:get_host() });
-				reply:up();
-			end
-		end
-		origin.send(reply);
-		return true;
-	end
-end, 500);
-
-module:hook("iq/host/"..xmlns_cmd..":command", function (event)
-	local origin, stanza = event.origin, event.stanza;
-	if stanza.attr.type == "set" then
-		local node = stanza.tags[1].attr.node
-		if commands[node] then
-			-- Required for Prosody <= 0.7
-			local privileged = is_admin(event.stanza.attr.from)
-			    or is_admin(stanza.attr.from, stanza.attr.to);
-			if commands[node].permission == "admin"
-			    and not privileged then
-				origin.send(st.error_reply(stanza, "auth", "forbidden", "You don't have permission to execute this command"):up()
-				    :add_child(commands[node]:cmdtag("canceled")
-					:tag("note", {type="error"}):text("You don't have permission to execute this command")));
-				return true
-			end
-			-- User has permission now execute the command
-			return adhoc_handle_cmd(commands[node], origin, stanza);
-		end
-	end
-end, 500);
-
-local function handle_item_added(item)
-	commands[item.node] = item;
-end
-
-module:hook("item-added/adhoc", function (event)
-	return handle_item_added(event.item);
-end, 500);
-
-module:hook("item-removed/adhoc", function (event)
-	commands[event.item.node] = nil;
-end, 500);
-
--- Pick up any items that are already added
-for _, item in ipairs(module:get_host_items("adhoc")) do
-	handle_item_added(item);
-end