1 local usermanager = require "core.usermanager"; |
1 local usermanager = require "core.usermanager"; |
2 |
2 |
3 local json = require "util.json"; |
3 local json = require "util.json"; |
|
4 local st = require "util.stanza"; |
4 |
5 |
5 module:depends("http"); |
6 module:depends("http"); |
6 |
7 |
7 local invites = module:depends("invites"); |
8 local invites = module:depends("invites"); |
8 local tokens = module:depends("tokenauth"); |
9 local tokens = module:depends("tokenauth"); |
14 local site_name = module:get_option_string("site_name", module.host); |
15 local site_name = module:get_option_string("site_name", module.host); |
15 |
16 |
16 local json_content_type = "application/json"; |
17 local json_content_type = "application/json"; |
17 |
18 |
18 local www_authenticate_header = ("Bearer realm=%q"):format(module.host.."/"..module.name); |
19 local www_authenticate_header = ("Bearer realm=%q"):format(module.host.."/"..module.name); |
|
20 |
|
21 local xmlns_pubsub = "http://jabber.org/protocol/pubsub"; |
|
22 local xmlns_nick = "http://jabber.org/protocol/nick"; |
19 |
23 |
20 local function check_credentials(request) |
24 local function check_credentials(request) |
21 local auth_type, auth_data = string.match(request.headers.authorization or "", "^(%S+)%s(.+)$"); |
25 local auth_type, auth_data = string.match(request.headers.authorization or "", "^(%S+)%s(.+)$"); |
22 if not (auth_type and auth_data) then |
26 if not (auth_type and auth_data) then |
23 return false; |
27 return false; |
162 return nil; |
166 return nil; |
163 end |
167 end |
164 local display_name; |
168 local display_name; |
165 do |
169 do |
166 local pep_service = mod_pep.get_pep_service(username); |
170 local pep_service = mod_pep.get_pep_service(username); |
167 local ok, _, nick_item = pep_service:get_last_item("http://jabber.org/protocol/nick", true); |
171 local ok, _, nick_item = pep_service:get_last_item(xmlns_nick, true); |
168 if ok and nick_item then |
172 if ok and nick_item then |
169 display_name = nick_item:get_child_text("nick", "http://jabber.org/protocol/nick"); |
173 display_name = nick_item:get_child_text("nick", xmlns_nick); |
170 end |
174 end |
171 end |
175 end |
172 |
176 |
173 return { |
177 return { |
174 username = username; |
178 username = username; |
355 |
359 |
356 event.response.headers["Content-Type"] = json_content_type; |
360 event.response.headers["Content-Type"] = json_content_type; |
357 return json.encode(user_info); |
361 return json.encode(user_info); |
358 end |
362 end |
359 |
363 |
|
364 function update_user(event, username) |
|
365 local current_user = get_user_info(username); |
|
366 |
|
367 local request = event.request; |
|
368 if request.headers.content_type ~= json_content_type |
|
369 or (not request.body or #request.body == 0) then |
|
370 return 400; |
|
371 end |
|
372 local new_user = json.decode(event.request.body); |
|
373 if not new_user then |
|
374 return 400; |
|
375 end |
|
376 |
|
377 if new_user.username and new_user.username ~= username then |
|
378 return 400; |
|
379 end |
|
380 |
|
381 local final_user = {}; |
|
382 |
|
383 if new_user.display_name then |
|
384 local pep_service = mod_pep.get_pep_service(username); |
|
385 -- TODO: publish |
|
386 local nick_item = st.stanza("item", { xmlns = xmlns_pubsub, id = "current" }) |
|
387 :text_tag("nick", new_user.display_name, { xmlns = xmlns_nick }); |
|
388 if pep_service:publish(xmlns_nick, true, "current", nick_item, { |
|
389 access_model = "open"; |
|
390 _defaults_only = true; |
|
391 }) then |
|
392 final_user.display_name = new_user.display_name; |
|
393 end |
|
394 end |
|
395 return 200; |
|
396 end |
|
397 |
360 function delete_user(event, username) --luacheck: ignore 212/event |
398 function delete_user(event, username) --luacheck: ignore 212/event |
361 if not usermanager.delete_user(username, module.host) then |
399 if not usermanager.delete_user(username, module.host) then |
362 return 404; |
400 return 404; |
363 end |
401 end |
364 return 200; |
402 return 200; |
517 ["POST /invites/*"] = create_invite_type; |
555 ["POST /invites/*"] = create_invite_type; |
518 ["DELETE /invites/*"] = delete_invite; |
556 ["DELETE /invites/*"] = delete_invite; |
519 |
557 |
520 ["GET /users"] = list_users; |
558 ["GET /users"] = list_users; |
521 ["GET /users/*"] = get_user_by_name; |
559 ["GET /users/*"] = get_user_by_name; |
|
560 ["PUT /users/*"] = update_user; |
522 ["DELETE /users/*"] = delete_user; |
561 ["DELETE /users/*"] = delete_user; |
523 |
562 |
524 ["GET /groups"] = list_groups; |
563 ["GET /groups"] = list_groups; |
525 ["GET /groups/*"] = get_group_by_id; |
564 ["GET /groups/*"] = get_group_by_id; |
526 ["POST /groups"] = create_group; |
565 ["POST /groups"] = create_group; |