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$"); |