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 |
