|
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 }); |