Mercurial > prosody-modules
comparison mod_http_admin_api/mod_http_admin_api.lua @ 5687:4c84cfb586c1
mod_http_admin_api: Support for adding/removing group MUCs
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 02 Nov 2023 17:00:53 +0000 |
parents | 5178c13deb78 |
children | 4c3216d9b118 |
comparison
equal
deleted
inserted
replaced
5686:d5ff386dc97f | 5687:4c84cfb586c1 |
---|---|
463 for group_id in mod_groups.groups() do | 463 for group_id in mod_groups.groups() do |
464 local group_info = mod_groups.get_info(group_id); | 464 local group_info = mod_groups.get_info(group_id); |
465 table.insert(group_list, { | 465 table.insert(group_list, { |
466 id = group_id; | 466 id = group_id; |
467 name = group_info.name; | 467 name = group_info.name; |
468 muc_jid = group_info.muc_jid; | |
469 members = mod_groups.get_members(group_id); | 468 members = mod_groups.get_members(group_id); |
469 chats = mod_groups.get_group_chats(group_id); | |
470 }); | 470 }); |
471 end | 471 end |
472 | 472 |
473 event.response.headers["Content-Type"] = json_content_type; | 473 event.response.headers["Content-Type"] = json_content_type; |
474 return json.encode_array(group_list); | 474 return json.encode_array(group_list); |
483 event.response.headers["Content-Type"] = json_content_type; | 483 event.response.headers["Content-Type"] = json_content_type; |
484 | 484 |
485 return json.encode({ | 485 return json.encode({ |
486 id = group_id; | 486 id = group_id; |
487 name = group.name; | 487 name = group.name; |
488 muc_jid = group.muc_jid; | |
489 members = mod_groups.get_members(group_id); | 488 members = mod_groups.get_members(group_id); |
489 chats = mod_groups.get_group_chats(group_id); | |
490 }); | 490 }); |
491 end | 491 end |
492 | 492 |
493 function create_group(event) | 493 function create_group(event) |
494 local request = event.request; | 494 local request = event.request; |
522 | 522 |
523 local info = mod_groups.get_info(group_id); | 523 local info = mod_groups.get_info(group_id); |
524 return json.encode({ | 524 return json.encode({ |
525 id = group_id; | 525 id = group_id; |
526 name = info.name; | 526 name = info.name; |
527 muc_jid = info.muc_jid or nil; | |
528 members = {}; | 527 members = {}; |
528 chats = {}; | |
529 }); | 529 }); |
530 end | 530 end |
531 | 531 |
532 function update_group(event, group) --luacheck: ignore 212/event | 532 function update_group(event, group) --luacheck: ignore 212/event |
533 -- Add member | 533 -- Add member |
566 end | 566 end |
567 end | 567 end |
568 return 404; | 568 return 404; |
569 end | 569 end |
570 | 570 |
571 function extend_group(event, subpath) | |
572 -- Add group chat | |
573 local group_id = subpath:match("^([^/]+)/chats$"); | |
574 if group_id then | |
575 local muc_params = json.decode(event.request.body); | |
576 if not muc_params then | |
577 return 400; | |
578 end | |
579 local muc = mod_groups.add_group_chat(group_id, muc_params.name); | |
580 if not muc then | |
581 return 500; | |
582 end | |
583 return json.encode(muc); | |
584 end | |
585 | |
586 return 404; | |
587 end | |
588 | |
571 function delete_group(event, subpath) --luacheck: ignore 212/event | 589 function delete_group(event, subpath) --luacheck: ignore 212/event |
572 -- Check if this is a membership deletion and handle it | 590 -- Check if this is a membership deletion and handle it |
573 local group_id, member_name = subpath:match("^([^/]+)/members/([^/]+)$"); | 591 local group_id, sub_resource_type, sub_resource_id = subpath:match("^([^/]+)/([^/]+)/([^/]+)$"); |
574 if group_id and member_name then | 592 if group_id then |
575 if mod_groups.remove_member(group_id, member_name) then | 593 -- Operation is on a sub-resource |
576 return 204; | 594 if sub_resource_type == "members" then |
595 if mod_groups.remove_member(group_id, sub_resource_id) then | |
596 return 204; | |
597 else | |
598 return 500; | |
599 end | |
600 elseif sub_resource_type == "chats" then | |
601 if mod_groups.remove_group_chat(group_id, sub_resource_id) then | |
602 return 204; | |
603 else | |
604 return 500; | |
605 end | |
577 else | 606 else |
578 return 500; | 607 return 404; |
579 end | 608 end |
580 else | 609 else |
581 -- Action refers to the group | 610 -- Action refers to the group |
582 group_id = subpath; | 611 group_id = subpath; |
583 end | 612 end |
698 ["DELETE /users/*"] = delete_user; | 727 ["DELETE /users/*"] = delete_user; |
699 | 728 |
700 ["GET /groups"] = list_groups; | 729 ["GET /groups"] = list_groups; |
701 ["GET /groups/*"] = get_group_by_id; | 730 ["GET /groups/*"] = get_group_by_id; |
702 ["POST /groups"] = create_group; | 731 ["POST /groups"] = create_group; |
732 ["POST /groups/*"] = extend_group; | |
703 ["PUT /groups/*"] = update_group; | 733 ["PUT /groups/*"] = update_group; |
704 ["DELETE /groups/*"] = delete_group; | 734 ["DELETE /groups/*"] = delete_group; |
705 | 735 |
706 ["GET /server/info"] = get_server_info; | 736 ["GET /server/info"] = get_server_info; |
707 | 737 |