comparison mod_adhoc_cmd_admin/mod_adhoc_cmd_admin.lua @ 34:fc374b724270

mod_adhoc_cmd_admin: Define form layout only once.
author Florian Zeitz <florob@babelmonkeys.de>
date Sat, 10 Oct 2009 04:16:11 +0200
parents f3225c55288f
children 3c49411d4aa3
comparison
equal deleted inserted replaced
33:f3225c55288f 34:fc374b724270
11 11
12 local is_admin = require "core.usermanager".is_admin; 12 local is_admin = require "core.usermanager".is_admin;
13 local admins = set.new(config.get(module:get_host(), "core", "admins")); 13 local admins = set.new(config.get(module:get_host(), "core", "admins"));
14 14
15 local sessions = {}; 15 local sessions = {};
16
17 local add_user_layout = {
18 title= "Adding a User";
19 instructions = "Fill out this form to add a user.";
20
21 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
22 { name = "accountjid", type = "jid-single", required = true, label = "The Jabber ID for the account to be added" };
23 { name = "password", type = "text-private", label = "The password for this account" };
24 { name = "password-verify", type = "text-private", label = "Retype password" };
25 };
26 dataforms_new(add_user_layout)
16 27
17 function add_user_command_handler(item, origin, stanza) 28 function add_user_command_handler(item, origin, stanza)
18 if not is_admin(stanza.attr.from) then 29 if not is_admin(stanza.attr.from) then
19 module:log("warn", "Non-admin %s tried to add a user", tostring(jid.bare(stanza.attr.from))); 30 module:log("warn", "Non-admin %s tried to add a user", tostring(jid.bare(stanza.attr.from)));
20 origin.send(st.error_reply(stanza, "auth", "forbidden", "You don't have permission to add a user"):up() 31 origin.send(st.error_reply(stanza, "auth", "forbidden", "You don't have permission to add a user"):up()
35 if tag.name == "x" and tag.attr.xmlns == "jabber:x:data" then 46 if tag.name == "x" and tag.attr.xmlns == "jabber:x:data" then
36 form = tag; 47 form = tag;
37 break; 48 break;
38 end 49 end
39 end 50 end
40 local layout = { 51 local fields = add_user_layout:data(form);
41 { name = "accountjid", type = "jid-single" };
42 { name = "password", type = "text-private" };
43 { name = "password-verify", type = "text-private" };
44 };
45 dataforms_new(layout);
46 local fields = layout:data(form);
47 local username, host, resource = jid.split(fields.accountjid); 52 local username, host, resource = jid.split(fields.accountjid);
48 if (fields.password == fields["password-verify"]) and username and host and host == stanza.attr.to then 53 if (fields.password == fields["password-verify"]) and username and host and host == stanza.attr.to then
49 if usermanager_user_exists(username, host) then 54 if usermanager_user_exists(username, host) then
50 origin.send(st.error_reply(stanza, "cancel", "conflict", "Account already exists"):up() 55 origin.send(st.error_reply(stanza, "cancel", "conflict", "Account already exists"):up()
51 :tag("command", {xmlns="http://jabber.org/protocol/commands", 56 :tag("command", {xmlns="http://jabber.org/protocol/commands",
83 return true; 88 return true;
84 end 89 end
85 else 90 else
86 local sessionid=uuid.generate(); 91 local sessionid=uuid.generate();
87 sessions[sessionid] = "executing"; 92 sessions[sessionid] = "executing";
88 local form = {
89 title= "Adding a User";
90 instructions = "Fill out this form to add a user.";
91
92 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
93 { name = "accountjid", type = "jid-single", required = true, label = "The Jabber ID for the account to be added" };
94 { name = "password", type = "text-private", label = "The password for this account" };
95 { name = "password-verify", type = "text-private", label = "Retype password" };
96 };
97 dataforms_new(form);
98 origin.send(st.reply(stanza):tag("command", {xmlns="http://jabber.org/protocol/commands", 93 origin.send(st.reply(stanza):tag("command", {xmlns="http://jabber.org/protocol/commands",
99 node="http://jabber.org/protocol/admin#add-user", sessionid=sessionid, 94 node="http://jabber.org/protocol/admin#add-user", sessionid=sessionid,
100 status="executing"}):add_child(form:form())); 95 status="executing"}):add_child(add_user_layout:form()));
101 end 96 end
102 return true; 97 return true;
103 end 98 end
104 99
105 local descriptor = { name="Add User", node="http://jabber.org/protocol/admin#add-user", handler=add_user_command_handler }; 100 local descriptor = { name="Add User", node="http://jabber.org/protocol/admin#add-user", handler=add_user_command_handler };