comparison plugins/adhoc/mod_adhoc.lua @ 4291:122f142da281

mod_adhoc: Add support for commands only executable by global administrators
author Florian Zeitz <florob@babelmonkeys.de>
date Thu, 02 Jun 2011 21:56:24 +0200
parents 4495403470cb
children 15547fba1f09
comparison
equal deleted inserted replaced
4290:aaa06e68a9e4 4291:122f142da281
1 -- Copyright (C) 2009 Thilo Cestonaro 1 -- Copyright (C) 2009 Thilo Cestonaro
2 -- Copyright (C) 2009-2010 Florian Zeitz 2 -- Copyright (C) 2009-2011 Florian Zeitz
3 -- 3 --
4 -- This file is MIT/X11 licensed. Please see the 4 -- This file is MIT/X11 licensed. Please see the
5 -- COPYING file in the source package for more information. 5 -- COPYING file in the source package for more information.
6 -- 6 --
7 7
49 49
50 module:hook("iq/host/"..xmlns_disco.."#items:query", function (event) 50 module:hook("iq/host/"..xmlns_disco.."#items:query", function (event)
51 local origin, stanza = event.origin, event.stanza; 51 local origin, stanza = event.origin, event.stanza;
52 if stanza.attr.type == "get" and stanza.tags[1].attr.node 52 if stanza.attr.type == "get" and stanza.tags[1].attr.node
53 and stanza.tags[1].attr.node == xmlns_cmd then 53 and stanza.tags[1].attr.node == xmlns_cmd then
54 local privileged = is_admin(stanza.attr.from, stanza.attr.to); 54 local admin = is_admin(stanza.attr.from, stanza.attr.to);
55 local global_admin = is_admin(stanza.attr.from);
55 reply = st.reply(stanza); 56 reply = st.reply(stanza);
56 reply:tag("query", { xmlns = xmlns_disco.."#items", 57 reply:tag("query", { xmlns = xmlns_disco.."#items",
57 node = xmlns_cmd }); 58 node = xmlns_cmd });
58 for node, command in pairs(commands) do 59 for node, command in pairs(commands) do
59 if (command.permission == "admin" and privileged) 60 if (command.permission == "admin" and admin)
61 or (command.permission == "global_admin" and global_admin)
60 or (command.permission == "user") then 62 or (command.permission == "user") then
61 reply:tag("item", { name = command.name, 63 reply:tag("item", { name = command.name,
62 node = node, jid = module:get_host() }); 64 node = node, jid = module:get_host() });
63 reply:up(); 65 reply:up();
64 end 66 end
71 module:hook("iq/host/"..xmlns_cmd..":command", function (event) 73 module:hook("iq/host/"..xmlns_cmd..":command", function (event)
72 local origin, stanza = event.origin, event.stanza; 74 local origin, stanza = event.origin, event.stanza;
73 if stanza.attr.type == "set" then 75 if stanza.attr.type == "set" then
74 local node = stanza.tags[1].attr.node 76 local node = stanza.tags[1].attr.node
75 if commands[node] then 77 if commands[node] then
76 local privileged = is_admin(stanza.attr.from, stanza.attr.to); 78 local admin = is_admin(stanza.attr.from, stanza.attr.to);
77 if commands[node].permission == "admin" 79 local global_admin = is_admin(stanza.attr.from);
78 and not privileged then 80 if (commands[node].permission == "admin" and not admin)
81 or (commands[node].permission == "global_admin" and not global_admin) then
79 origin.send(st.error_reply(stanza, "auth", "forbidden", "You don't have permission to execute this command"):up() 82 origin.send(st.error_reply(stanza, "auth", "forbidden", "You don't have permission to execute this command"):up()
80 :add_child(commands[node]:cmdtag("canceled") 83 :add_child(commands[node]:cmdtag("canceled")
81 :tag("note", {type="error"}):text("You don't have permission to execute this command"))); 84 :tag("note", {type="error"}):text("You don't have permission to execute this command")));
82 return true 85 return true
83 end 86 end