comparison mod_adhoc_cmd_admin/mod_adhoc_cmd_admin.lua @ 242:161067865850

mod_adhoc_cmd_admin: Be more tollerant towards client/user errors.
author Florian Zeitz <florob@babelmonkeys.de>
date Thu, 12 Aug 2010 23:07:14 +0200
parents 648c24de9040
children db1b4c6089b6
comparison
equal deleted inserted replaced
241:665552d75ee2 242:161067865850
64 local get_user_password_layout = dataforms_new{ 64 local get_user_password_layout = dataforms_new{
65 title = "Getting User's Password"; 65 title = "Getting User's Password";
66 instructions = "Fill out this form to get a user's password."; 66 instructions = "Fill out this form to get a user's password.";
67 67
68 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" }; 68 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
69 { name = "accountjid", type = "jid-single", label = "The Jabber ID for which to retrieve the password" }; 69 { name = "accountjid", type = "jid-single", required = true, label = "The Jabber ID for which to retrieve the password" };
70 }; 70 };
71 71
72 local get_user_password_result_layout = dataforms_new{ 72 local get_user_password_result_layout = dataforms_new{
73 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" }; 73 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
74 { name = "accountjid", type = "jid-single", label = "JID" }; 74 { name = "accountjid", type = "jid-single", label = "JID" };
75 { name = "password", type = "text-single", label = "Password" }; 75 { name = "password", type = "text-single", label = "Password" };
76 }; 76 };
77 77
78 local get_user_roster_layout = dataforms_new{ 78 local get_user_roster_layout = dataforms_new{
79 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" }; 79 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
80 { name = "accountjid", type = "jid-single", label = "The Jabber ID for which to retrieve the roster" }; 80 { name = "accountjid", type = "jid-single", required = true, label = "The Jabber ID for which to retrieve the roster" };
81 }; 81 };
82 82
83 local get_user_roster_result_layout = dataforms_new{ 83 local get_user_roster_result_layout = dataforms_new{
84 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" }; 84 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
85 { name = "accountjid", type = "jid-single", label = "This is the roster for" }; 85 { name = "accountjid", type = "jid-single", label = "This is the roster for" };
89 local get_user_stats_layout = dataforms_new{ 89 local get_user_stats_layout = dataforms_new{
90 title = "Get User Statistics"; 90 title = "Get User Statistics";
91 instructions = "Fill out this form to gather user statistics."; 91 instructions = "Fill out this form to gather user statistics.";
92 92
93 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" }; 93 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
94 { name = "accountjid", type = "jid-single", label = "The Jabber ID for statistics" }; 94 { name = "accountjid", type = "jid-single", required = true, label = "The Jabber ID for statistics" };
95 }; 95 };
96 96
97 local get_user_stats_result_layout = dataforms_new{ 97 local get_user_stats_result_layout = dataforms_new{
98 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" }; 98 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
99 { name = "ipaddresses", type = "text-multi", label = "IP Addresses" }; 99 { name = "ipaddresses", type = "text-multi", label = "IP Addresses" };
147 if state then 147 if state then
148 if data.action == "cancel" then 148 if data.action == "cancel" then
149 return { status = "canceled" }; 149 return { status = "canceled" };
150 end 150 end
151 local fields = add_user_layout:data(data.form); 151 local fields = add_user_layout:data(data.form);
152 if not fields.accountjid then
153 return { status = "completed", error = { message = "You need to specify a JID." } };
154 end
152 local username, host, resource = jid.split(fields.accountjid); 155 local username, host, resource = jid.split(fields.accountjid);
153 if data.to ~= host then 156 if data.to ~= host then
154 return { status = "completed", error = { message = "Trying to add a user on " .. host .. " but command was sent to " .. data.to}}; 157 return { status = "completed", error = { message = "Trying to add a user on " .. host .. " but command was sent to " .. data.to}};
155 end 158 end
156 if (fields["password"] == fields["password-verify"]) and username and host then 159 if (fields["password"] == fields["password-verify"]) and username and host then
178 if state then 181 if state then
179 if data.action == "cancel" then 182 if data.action == "cancel" then
180 return { status = "canceled" }; 183 return { status = "canceled" };
181 end 184 end
182 local fields = change_user_password_layout:data(data.form); 185 local fields = change_user_password_layout:data(data.form);
186 if not fields.accountjid or fields.accountjid == "" or not fields.password then
187 return { status = "completed", error = { message = "Please specify username and password" } };
188 end
183 local username, host, resource = jid.split(fields.accountjid); 189 local username, host, resource = jid.split(fields.accountjid);
184 if data.to ~= host then 190 if data.to ~= host then
185 return { status = "completed", error = { message = "Trying to change the password of a user on " .. host .. " but command was sent to " .. data.to}}; 191 return { status = "completed", error = { message = "Trying to change the password of a user on " .. host .. " but command was sent to " .. data.to}};
186 end 192 end
187 if usermanager_user_exists(username, host) and usermanager_set_password(username, fields.password, host) then 193 if usermanager_user_exists(username, host) and usermanager_set_password(username, fields.password, host) then
264 if state then 270 if state then
265 if data.action == "cancel" then 271 if data.action == "cancel" then
266 return { status = "canceled" }; 272 return { status = "canceled" };
267 end 273 end
268 local fields = get_user_password_layout:data(data.form); 274 local fields = get_user_password_layout:data(data.form);
275 if not fields.accountjid then
276 return { status = "completed", error = { message = "Please specify a JID." } };
277 end
269 local user, host, resource = jid.split(fields.accountjid); 278 local user, host, resource = jid.split(fields.accountjid);
270 local accountjid = ""; 279 local accountjid = "";
271 local password = ""; 280 local password = "";
272 if host ~= data.to then 281 if host ~= data.to then
273 return { status = "completed", error = { message = "Tried to get password for a user on " .. host .. " but command was sent to " .. data.to } }; 282 return { status = "completed", error = { message = "Tried to get password for a user on " .. host .. " but command was sent to " .. data.to } };
288 if data.action == "cancel" then 297 if data.action == "cancel" then
289 return { status = "canceled" }; 298 return { status = "canceled" };
290 end 299 end
291 300
292 local fields = add_user_layout:data(data.form); 301 local fields = add_user_layout:data(data.form);
302
303 if not fields.accountjid then
304 return { status = "completed", error = { message = "Please specify a JID" } };
305 end
293 306
294 local user, host, resource = jid.split(fields.accountjid); 307 local user, host, resource = jid.split(fields.accountjid);
295 if host ~= data.to then 308 if host ~= data.to then
296 return { status = "completed", error = { message = "Tried to get roster for a user on " .. host .. " but command was sent to " .. data.to } }; 309 return { status = "completed", error = { message = "Tried to get roster for a user on " .. host .. " but command was sent to " .. data.to } };
297 elseif not usermanager_user_exists(user, host) then 310 elseif not usermanager_user_exists(user, host) then
331 if data.action == "cancel" then 344 if data.action == "cancel" then
332 return { status = "canceled" }; 345 return { status = "canceled" };
333 end 346 end
334 347
335 local fields = get_user_stats_layout:data(data.form); 348 local fields = get_user_stats_layout:data(data.form);
349
350 if not fields.accountjid then
351 return { status = "completed", error = { message = "Please specify a JID." } };
352 end
336 353
337 local user, host, resource = jid.split(fields.accountjid); 354 local user, host, resource = jid.split(fields.accountjid);
338 if host ~= data.to then 355 if host ~= data.to then
339 return { status = "completed", error = { message = "Tried to get stats for a user on " .. host .. " but command was sent to " .. data.to } }; 356 return { status = "completed", error = { message = "Tried to get stats for a user on " .. host .. " but command was sent to " .. data.to } };
340 elseif not usermanager_user_exists(user, host) then 357 elseif not usermanager_user_exists(user, host) then
427 return { status = "canceled" }; 444 return { status = "canceled" };
428 end 445 end
429 446
430 local fields = announce_layout:data(data.form); 447 local fields = announce_layout:data(data.form);
431 448
449 if #fields.announcement == 0 then
450 return { status = "completed", error = { message = "Please specify some announcement text." } };
451 end
452
432 module:log("info", "Sending server announcement to all online users"); 453 module:log("info", "Sending server announcement to all online users");
433 local message = st.message({type = "headline"}, fields.announcement):up() 454 local message = st.message({type = "headline"}, fields.announcement):up()
434 :tag("subject"):text(fields.subject or "Announcement"); 455 :tag("subject"):text(fields.subject or "Announcement");
435 456
436 local count = send_to_online(message, data.to); 457 local count = send_to_online(message, data.to);
450 return { status = "canceled" }; 471 return { status = "canceled" };
451 end 472 end
452 473
453 local fields = shut_down_service_layout:data(data.form); 474 local fields = shut_down_service_layout:data(data.form);
454 475
455 if fields.announcement then 476 if #fields.announcement > 0 then
456 local message = st.message({type = "headline"}, fields.announcement):up() 477 local message = st.message({type = "headline"}, fields.announcement):up()
457 :tag("subject"):text("Server is shutting down"); 478 :tag("subject"):text("Server is shutting down");
458 send_to_online(message); 479 send_to_online(message);
459 end 480 end
460 481