mod_http_admin_api/mod_http_admin_api.lua
changeset 5789 671a6ad1f026
parent 5788 5c589fab6f53
child 5790 076b79eb747f
equal deleted inserted replaced
5788:5c589fab6f53 5789:671a6ad1f026
   475 
   475 
   476 	return 200;
   476 	return 200;
   477 end
   477 end
   478 
   478 
   479 function update_user(event, username)
   479 function update_user(event, username)
   480 	local current_user = get_user_info(username);
       
   481 
   480 
   482 	local request = event.request;
   481 	local request = event.request;
   483 	if request.headers.content_type ~= json_content_type
   482 	if request.headers.content_type ~= json_content_type
   484 	or (not request.body or #request.body == 0) then
   483 	or (not request.body or #request.body == 0) then
   485 		return 400;
   484 		return 400;
   490 	end
   489 	end
   491 
   490 
   492 	if new_user.username and new_user.username ~= username then
   491 	if new_user.username and new_user.username ~= username then
   493 		return 400;
   492 		return 400;
   494 	end
   493 	end
   495 
       
   496 	local final_user = {};
       
   497 
   494 
   498 	if new_user.display_name then
   495 	if new_user.display_name then
   499 		local pep_service = mod_pep.get_pep_service(username);
   496 		local pep_service = mod_pep.get_pep_service(username);
   500 		-- TODO: publish
   497 		-- TODO: publish
   501 		local nick_item = st.stanza("item", { xmlns = xmlns_pubsub, id = "current" })
   498 		local nick_item = st.stanza("item", { xmlns = xmlns_pubsub, id = "current" })
   502 			:text_tag("nick", new_user.display_name, { xmlns = xmlns_nick });
   499 			:text_tag("nick", new_user.display_name, { xmlns = xmlns_nick });
   503 		if pep_service:publish(xmlns_nick, true, "current", nick_item, {
   500 		pep_service:publish(xmlns_nick, true, "current", nick_item, {
   504 			access_model = "open";
   501 			access_model = "open";
   505 			_defaults_only = true;
   502 			_defaults_only = true;
   506 		}) then
   503 		});
   507 			final_user.display_name = new_user.display_name;
       
   508 		end
       
   509 	end
   504 	end
   510 
   505 
   511 	if new_user.role then
   506 	if new_user.role then
   512 		if not usermanager.set_user_role then
   507 		if not usermanager.set_user_role then
   513 			return 500, "feature-not-implemented";
   508 			return 500, "feature-not-implemented";
   525 
   520 
   526 		local backend_roles = {};
   521 		local backend_roles = {};
   527 		for _, role in ipairs(new_user.roles) do
   522 		for _, role in ipairs(new_user.roles) do
   528 			backend_roles[role] = true;
   523 			backend_roles[role] = true;
   529 		end
   524 		end
   530 		local jid = username.."@"..module.host;
   525 		local user_jid = username.."@"..module.host;
   531 		if not usermanager.set_user_roles(username, module.host, backend_roles) then
   526 		if not usermanager.set_user_roles(username, module.host, backend_roles) then
   532 			module:log("error", "failed to set roles %q for %s", backend_roles, jid)
   527 			module:log("error", "failed to set roles %q for %s", backend_roles, user_jid)
   533 			return 500
   528 			return 500
   534 		end
   529 		end
   535 	end
   530 	end
   536 
   531 
   537 	if new_user.enabled ~= nil then
   532 	if new_user.enabled ~= nil then
   621 	});
   616 	});
   622 end
   617 end
   623 
   618 
   624 function update_group(event, group) --luacheck: ignore 212/event
   619 function update_group(event, group) --luacheck: ignore 212/event
   625 	-- Add member
   620 	-- Add member
   626 	local group_id, member_name = group:match("^([^/]+)/members/([^/]+)$");
   621 	do
   627 	if group_id and member_name then
   622 		local group_id, member_name = group:match("^([^/]+)/members/([^/]+)$");
   628 		if not mod_groups.add_member(group_id, member_name) then
   623 		if group_id and member_name then
   629 			return 500;
   624 			if not mod_groups.add_member(group_id, member_name) then
   630 		end
   625 				return 500;
   631 		return 204;
   626 			end
       
   627 			return 204;
       
   628 		end
   632 	end
   629 	end
   633 
   630 
   634 	local group_id = group:match("^([^/]+)$")
   631 	local group_id = group:match("^([^/]+)$")
   635 	if group_id then
   632 	if not group_id then return 404; end
   636 		local request = event.request;
   633 
   637 		if request.headers.content_type ~= json_content_type or (not request.body or #request.body == 0) then
   634 	local request = event.request;
   638 			return 400;
   635 	if request.headers.content_type ~= json_content_type or (not request.body or #request.body == 0) then
   639 		end
   636 		return 400;
   640 
   637 	end
   641 		local update = json.decode(event.request.body);
   638 
   642 		if not update then
   639 	local update = json.decode(event.request.body);
   643 			return 400;
   640 	if not update then
   644 		end
   641 		return 400;
   645 
   642 	end
   646 		local group_info = mod_groups.get_info(group_id);
   643 
   647 		if not group_info then
   644 	local group_info = mod_groups.get_info(group_id);
   648 			return 404;
   645 	if not group_info then
   649 		end
   646 		return 404;
   650 
   647 	end
   651 		if update.name then
   648 
   652 			group_info["name"] = update.name;
   649 	if update.name then
   653 		end
   650 		group_info["name"] = update.name;
   654 		if mod_groups.set_info(group_id, group_info) then
   651 	end
   655 			return 204;
   652 	if not mod_groups.set_info(group_id, group_info) then
   656 		else
   653 		return 500;
   657 			return 500;
   654 	end
   658 		end
   655 	return 204;
   659 	end
       
   660 	return 404;
       
   661 end
   656 end
   662 
   657 
   663 function extend_group(event, subpath)
   658 function extend_group(event, subpath)
   664 	-- Add group chat
   659 	-- Add group chat
   665 	local group_id = subpath:match("^([^/]+)/chats$");
   660 	local group_id = subpath:match("^([^/]+)/chats$");