plugins/mod_admin_adhoc.lua
changeset 4932 212e81ac6ebb
parent 4926 58714123f600
child 4956 bc26e6d519ae
equal deleted inserted replaced
4931:7a4f00168260 4932:212e81ac6ebb
    25 local modulemanager = require "modulemanager";
    25 local modulemanager = require "modulemanager";
    26 
    26 
    27 module:depends("adhoc");
    27 module:depends("adhoc");
    28 local adhoc_new = module:require "adhoc".new;
    28 local adhoc_new = module:require "adhoc".new;
    29 
    29 
       
    30 local function generate_error_message(errors)
       
    31 	local errmsg = {};
       
    32 	for name, err in pairs(errors) do
       
    33 		errmsg[#errmsg + 1] = name .. ": " .. err;
       
    34 	end
       
    35 	return { status = "completed", error = { message = t_concat(errmsg, "\n") } };
       
    36 end
       
    37 
    30 function add_user_command_handler(self, data, state)
    38 function add_user_command_handler(self, data, state)
    31 	local add_user_layout = dataforms_new{
    39 	local add_user_layout = dataforms_new{
    32 		title = "Adding a User";
    40 		title = "Adding a User";
    33 		instructions = "Fill out this form to add a user.";
    41 		instructions = "Fill out this form to add a user.";
    34 
    42 
    40 
    48 
    41 	if state then
    49 	if state then
    42 		if data.action == "cancel" then
    50 		if data.action == "cancel" then
    43 			return { status = "canceled" };
    51 			return { status = "canceled" };
    44 		end
    52 		end
    45 		local fields = add_user_layout:data(data.form);
    53 		local fields, err = add_user_layout:data(data.form);
    46 		if not fields.accountjid then
    54 		if err then
    47 			return { status = "completed", error = { message = "You need to specify a JID." } };
    55 			return generate_error_message(err);
    48 		end
    56 		end
    49 		local username, host, resource = jid.split(fields.accountjid);
    57 		local username, host, resource = jid.split(fields.accountjid);
    50 		if data.to ~= host then
    58 		if data.to ~= host then
    51 			return { status = "completed", error = { message = "Trying to add a user on " .. host .. " but command was sent to " .. data.to}};
    59 			return { status = "completed", error = { message = "Trying to add a user on " .. host .. " but command was sent to " .. data.to}};
    52 		end
    60 		end
    83 
    91 
    84 	if state then
    92 	if state then
    85 		if data.action == "cancel" then
    93 		if data.action == "cancel" then
    86 			return { status = "canceled" };
    94 			return { status = "canceled" };
    87 		end
    95 		end
    88 		local fields = change_user_password_layout:data(data.form);
    96 		local fields, err = change_user_password_layout:data(data.form);
    89 		if not fields.accountjid or fields.accountjid == "" or not fields.password then
    97 		if err then
    90 			return { status = "completed", error = { message = "Please specify username and password" } };
    98 			return generate_error_message(err);
    91 		end
    99 		end
    92 		local username, host, resource = jid.split(fields.accountjid);
   100 		local username, host, resource = jid.split(fields.accountjid);
    93 		if data.to ~= host then
   101 		if data.to ~= host then
    94 			return { status = "completed", error = { message = "Trying to change the password of a user on " .. host .. " but command was sent to " .. data.to}};
   102 			return { status = "completed", error = { message = "Trying to change the password of a user on " .. host .. " but command was sent to " .. data.to}};
    95 		end
   103 		end
   124 
   132 
   125 	if state then
   133 	if state then
   126 		if data.action == "cancel" then
   134 		if data.action == "cancel" then
   127 			return { status = "canceled" };
   135 			return { status = "canceled" };
   128 		end
   136 		end
   129 		local fields = delete_user_layout:data(data.form);
   137 		local fields, err = delete_user_layout:data(data.form);
       
   138 		if err then
       
   139 			return generate_error_message(err);
       
   140 		end
   130 		local failed = {};
   141 		local failed = {};
   131 		local succeeded = {};
   142 		local succeeded = {};
   132 		for _, aJID in ipairs(fields.accountjids) do
   143 		for _, aJID in ipairs(fields.accountjids) do
   133 			local username, host, resource = jid.split(aJID);
   144 			local username, host, resource = jid.split(aJID);
   134 			if (host == data.to) and  usermanager_user_exists(username, host) and disconnect_user(aJID) and usermanager_create_user(username, nil, host) then
   145 			if (host == data.to) and  usermanager_user_exists(username, host) and disconnect_user(aJID) and usermanager_create_user(username, nil, host) then
   173 	if state then
   184 	if state then
   174 		if data.action == "cancel" then
   185 		if data.action == "cancel" then
   175 			return { status = "canceled" };
   186 			return { status = "canceled" };
   176 		end
   187 		end
   177 
   188 
   178 		local fields = end_user_session_layout:data(data.form);
   189 		local fields, err = end_user_session_layout:data(data.form);
       
   190 		if err then
       
   191 			return generate_error_message(err);
       
   192 		end
   179 		local failed = {};
   193 		local failed = {};
   180 		local succeeded = {};
   194 		local succeeded = {};
   181 		for _, aJID in ipairs(fields.accountjids) do
   195 		for _, aJID in ipairs(fields.accountjids) do
   182 			local username, host, resource = jid.split(aJID);
   196 			local username, host, resource = jid.split(aJID);
   183 			if (host == data.to) and  usermanager_user_exists(username, host) and disconnect_user(aJID) then
   197 			if (host == data.to) and  usermanager_user_exists(username, host) and disconnect_user(aJID) then
   221 
   235 
   222 	if state then
   236 	if state then
   223 		if data.action == "cancel" then
   237 		if data.action == "cancel" then
   224 			return { status = "canceled" };
   238 			return { status = "canceled" };
   225 		end
   239 		end
   226 		local fields = get_user_password_layout:data(data.form);
   240 		local fields, err = get_user_password_layout:data(data.form);
   227 		if not fields.accountjid then
   241 		if err then
   228 			return { status = "completed", error = { message = "Please specify a JID." } };
   242 			return generate_error_message(err);
   229 		end
   243 		end
   230 		local user, host, resource = jid.split(fields.accountjid);
   244 		local user, host, resource = jid.split(fields.accountjid);
   231 		local accountjid = "";
   245 		local accountjid = "";
   232 		local password = "";
   246 		local password = "";
   233 		if host ~= data.to then
   247 		if host ~= data.to then
   259 	if state then
   273 	if state then
   260 		if data.action == "cancel" then
   274 		if data.action == "cancel" then
   261 			return { status = "canceled" };
   275 			return { status = "canceled" };
   262 		end
   276 		end
   263 
   277 
   264 		local fields = get_user_roster_layout:data(data.form);
   278 		local fields, err = get_user_roster_layout:data(data.form);
   265 
   279 
   266 		if not fields.accountjid then
   280 		if err then
   267 			return { status = "completed", error = { message = "Please specify a JID" } };
   281 			return generate_error_message(err);
   268 		end
   282 		end
   269 
   283 
   270 		local user, host, resource = jid.split(fields.accountjid);
   284 		local user, host, resource = jid.split(fields.accountjid);
   271 		if host ~= data.to then
   285 		if host ~= data.to then
   272 			return { status = "completed", error = { message = "Tried to get roster for a user on " .. host .. " but command was sent to " .. data.to } };
   286 			return { status = "completed", error = { message = "Tried to get roster for a user on " .. host .. " but command was sent to " .. data.to } };
   321 	if state then
   335 	if state then
   322 		if data.action == "cancel" then
   336 		if data.action == "cancel" then
   323 			return { status = "canceled" };
   337 			return { status = "canceled" };
   324 		end
   338 		end
   325 
   339 
   326 		local fields = get_user_stats_layout:data(data.form);
   340 		local fields, err = get_user_stats_layout:data(data.form);
   327 
   341 
   328 		if not fields.accountjid then
   342 		if err then
   329 			return { status = "completed", error = { message = "Please specify a JID." } };
   343 			return generate_error_message(err);
   330 		end
   344 		end
   331 
   345 
   332 		local user, host, resource = jid.split(fields.accountjid);
   346 		local user, host, resource = jid.split(fields.accountjid);
   333 		if host ~= data.to then
   347 		if host ~= data.to then
   334 			return { status = "completed", error = { message = "Tried to get stats for a user on " .. host .. " but command was sent to " .. data.to } };
   348 			return { status = "completed", error = { message = "Tried to get stats for a user on " .. host .. " but command was sent to " .. data.to } };
   374 	if state then
   388 	if state then
   375 		if data.action == "cancel" then
   389 		if data.action == "cancel" then
   376 			return { status = "canceled" };
   390 			return { status = "canceled" };
   377 		end
   391 		end
   378 
   392 
   379 		local fields = get_online_users_layout:data(data.form);
   393 		local fields, err = get_online_users_layout:data(data.form);
       
   394 
       
   395 		if err then
       
   396 			return generate_error_message(err);
       
   397 		end
   380 
   398 
   381 		local max_items = nil
   399 		local max_items = nil
   382 		if fields.max_items ~= "all" then
   400 		if fields.max_items ~= "all" then
   383 			max_items = tonumber(fields.max_items);
   401 			max_items = tonumber(fields.max_items);
   384 		end
   402 		end
   434 	};
   452 	};
   435 	if state then
   453 	if state then
   436 		if data.action == "cancel" then
   454 		if data.action == "cancel" then
   437 			return { status = "canceled" };
   455 			return { status = "canceled" };
   438 		end
   456 		end
   439 		local fields = layout:data(data.form);
   457 		local fields, err = layout:data(data.form);
   440 		if (not fields.module) or (fields.module == "") then
   458 		if err then
   441 			return { status = "completed", error = {
   459 			return generate_error_message(err);
   442 				message = "Please specify a module."
       
   443 			} };
       
   444 		end
   460 		end
   445 		if modulemanager.is_loaded(data.to, fields.module) then
   461 		if modulemanager.is_loaded(data.to, fields.module) then
   446 			return { status = "completed", info = "Module already loaded" };
   462 			return { status = "completed", info = "Module already loaded" };
   447 		end
   463 		end
   448 		local ok, err = modulemanager.load(data.to, fields.module);
   464 		local ok, err = modulemanager.load(data.to, fields.module);
   468 	};
   484 	};
   469 	if state then
   485 	if state then
   470 		if data.action == "cancel" then
   486 		if data.action == "cancel" then
   471 			return { status = "canceled" };
   487 			return { status = "canceled" };
   472 		end
   488 		end
   473 		local fields = layout:data(data.form);
   489 		local fields, err = layout:data(data.form);
   474 		if #fields.modules == 0 then
   490 		if err then
   475 			return { status = "completed", error = {
   491 			return generate_error_message(err);
   476 				message = "Please specify a module. (This means your client misbehaved, as this field is required)"
       
   477 			} };
       
   478 		end
   492 		end
   479 		local ok_list, err_list = {}, {};
   493 		local ok_list, err_list = {}, {};
   480 		for _, module in ipairs(fields.modules) do
   494 		for _, module in ipairs(fields.modules) do
   481 			local ok, err = modulemanager.reload(data.to, module);
   495 			local ok, err = modulemanager.reload(data.to, module);
   482 			if ok then
   496 			if ok then
   536 	if state then
   550 	if state then
   537 		if data.action == "cancel" then
   551 		if data.action == "cancel" then
   538 			return { status = "canceled" };
   552 			return { status = "canceled" };
   539 		end
   553 		end
   540 
   554 
   541 		local fields = shut_down_service_layout:data(data.form);
   555 		local fields, err = shut_down_service_layout:data(data.form);
       
   556 
       
   557 		if err then
       
   558 			return generate_error_message(err);
       
   559 		end
   542 
   560 
   543 		if fields.announcement and #fields.announcement > 0 then
   561 		if fields.announcement and #fields.announcement > 0 then
   544 			local message = st.message({type = "headline"}, fields.announcement):up()
   562 			local message = st.message({type = "headline"}, fields.announcement):up()
   545 				:tag("subject"):text("Server is shutting down");
   563 				:tag("subject"):text("Server is shutting down");
   546 			send_to_online(message);
   564 			send_to_online(message);
   564 	};
   582 	};
   565 	if state then
   583 	if state then
   566 		if data.action == "cancel" then
   584 		if data.action == "cancel" then
   567 			return { status = "canceled" };
   585 			return { status = "canceled" };
   568 		end
   586 		end
   569 		local fields = layout:data(data.form);
   587 		local fields, err = layout:data(data.form);
   570 		if #fields.modules == 0 then
   588 		if err then
   571 			return { status = "completed", error = {
   589 			return generate_error_message(err);
   572 				message = "Please specify a module. (This means your client misbehaved, as this field is required)"
       
   573 			} };
       
   574 		end
   590 		end
   575 		local ok_list, err_list = {}, {};
   591 		local ok_list, err_list = {}, {};
   576 		for _, module in ipairs(fields.modules) do
   592 		for _, module in ipairs(fields.modules) do
   577 			local ok, err = modulemanager.unload(data.to, module);
   593 			local ok, err = modulemanager.unload(data.to, module);
   578 			if ok then
   594 			if ok then