Mercurial > prosody-modules
diff 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 |
line wrap: on
line diff
--- a/mod_http_admin_api/mod_http_admin_api.lua Thu Nov 02 17:00:14 2023 +0000 +++ b/mod_http_admin_api/mod_http_admin_api.lua Thu Nov 02 17:00:53 2023 +0000 @@ -465,8 +465,8 @@ table.insert(group_list, { id = group_id; name = group_info.name; - muc_jid = group_info.muc_jid; members = mod_groups.get_members(group_id); + chats = mod_groups.get_group_chats(group_id); }); end @@ -485,8 +485,8 @@ return json.encode({ id = group_id; name = group.name; - muc_jid = group.muc_jid; members = mod_groups.get_members(group_id); + chats = mod_groups.get_group_chats(group_id); }); end @@ -524,8 +524,8 @@ return json.encode({ id = group_id; name = info.name; - muc_jid = info.muc_jid or nil; members = {}; + chats = {}; }); end @@ -568,14 +568,43 @@ return 404; end +function extend_group(event, subpath) + -- Add group chat + local group_id = subpath:match("^([^/]+)/chats$"); + if group_id then + local muc_params = json.decode(event.request.body); + if not muc_params then + return 400; + end + local muc = mod_groups.add_group_chat(group_id, muc_params.name); + if not muc then + return 500; + end + return json.encode(muc); + end + + return 404; +end + function delete_group(event, subpath) --luacheck: ignore 212/event -- Check if this is a membership deletion and handle it - local group_id, member_name = subpath:match("^([^/]+)/members/([^/]+)$"); - if group_id and member_name then - if mod_groups.remove_member(group_id, member_name) then - return 204; + local group_id, sub_resource_type, sub_resource_id = subpath:match("^([^/]+)/([^/]+)/([^/]+)$"); + if group_id then + -- Operation is on a sub-resource + if sub_resource_type == "members" then + if mod_groups.remove_member(group_id, sub_resource_id) then + return 204; + else + return 500; + end + elseif sub_resource_type == "chats" then + if mod_groups.remove_group_chat(group_id, sub_resource_id) then + return 204; + else + return 500; + end else - return 500; + return 404; end else -- Action refers to the group @@ -700,6 +729,7 @@ ["GET /groups"] = list_groups; ["GET /groups/*"] = get_group_by_id; ["POST /groups"] = create_group; + ["POST /groups/*"] = extend_group; ["PUT /groups/*"] = update_group; ["DELETE /groups/*"] = delete_group;