mod_http_admin_api/mod_http_admin_api.lua
changeset 4349 1bb08e9ffa82
parent 4347 ee313922b8d1
child 4353 5ca36c36ab05
equal deleted inserted replaced
4348:844cfc8c4039 4349:1bb08e9ffa82
       
     1 local usermanager = require "core.usermanager";
       
     2 
     1 local json = require "util.json";
     3 local json = require "util.json";
     2 
     4 
     3 module:depends("http");
     5 module:depends("http");
     4 
     6 
     5 local invites = module:depends("invites");
     7 local invites = module:depends("invites");
     6 local tokens = module:depends("tokenauth");
     8 local tokens = module:depends("tokenauth");
       
     9 local mod_pep = module:depends("pep");
     7 
    10 
     8 local json_content_type = "application/json";
    11 local json_content_type = "application/json";
     9 
    12 
    10 local www_authenticate_header = ("Bearer realm=%q"):format(module.host.."/"..module.name);
    13 local www_authenticate_header = ("Bearer realm=%q"):format(module.host.."/"..module.name);
    11 
    14 
   100 		return 404;
   103 		return 404;
   101 	end
   104 	end
   102 	return 200;
   105 	return 200;
   103 end
   106 end
   104 
   107 
       
   108 local function get_user_info(username)
       
   109 	if not usermanager.user_exists(username, module.host) then
       
   110 		return nil;
       
   111 	end
       
   112 	local display_name;
       
   113 	do
       
   114 		local pep_service = mod_pep.get_pep_service(username);
       
   115 		local ok, _, nick_item = pep_service:get_last_item("http://jabber.org/protocol/nick", true);
       
   116 		if ok and nick_item then
       
   117 			display_name = nick_item:get_child_text("nick", "http://jabber.org/protocol/nick");
       
   118 		end
       
   119 	end
       
   120 
       
   121 	return {
       
   122 		username = username;
       
   123 		display_name = display_name;
       
   124 	};
       
   125 end
       
   126 
       
   127 function list_users(event)
       
   128 	local user_list = {};
       
   129 	for username in usermanager.users(module.host) do
       
   130 		table.insert(user_list, get_user_info(username));
       
   131 	end
       
   132 
       
   133 	event.response.headers["Content-Type"] = json_content_type;
       
   134 	return json.encode(user_list);
       
   135 end
       
   136 
       
   137 function get_user_by_name(event, username)
       
   138 	local user_info = get_user_info(username);
       
   139 	if not user_info then
       
   140 		return 404;
       
   141 	end
       
   142 
       
   143 	event.response.headers["Content-Type"] = json_content_type;
       
   144 	return json.encode(user_info);
       
   145 end
       
   146 
       
   147 function delete_user(event, username) --luacheck: ignore 212/event
       
   148 	if not usermanager.delete_user(username, module.host) then
       
   149 		return 404;
       
   150 	end
       
   151 	return 200;
       
   152 end
       
   153 
   105 module:provides("http", {
   154 module:provides("http", {
   106 	route = check_auth {
   155 	route = check_auth {
   107 		["GET /invites"] = list_invites;
   156 		["GET /invites"] = list_invites;
   108 		["GET /invites/*"] = get_invite_by_id;
   157 		["GET /invites/*"] = get_invite_by_id;
   109 		["PUT /invites"] = create_invite;
   158 		["PUT /invites"] = create_invite;
   110 		["DELETE /invites/*"] = delete_invite;
   159 		["DELETE /invites/*"] = delete_invite;
       
   160 
       
   161 		["GET /users"] = list_users;
       
   162 		["GET /users/*"] = get_user_by_name;
       
   163 		["DELETE /users/*"] = delete_user;
   111 	};
   164 	};
   112 });
   165 });