# HG changeset patch # User Matthew Wild # Date 1698944453 0 # Node ID 4c84cfb586c13cb6c1c3d7921231850b23b4be30 # Parent d5ff386dc97fabc18b2bbbfec14bedc986092a2f mod_http_admin_api: Support for adding/removing group MUCs diff -r d5ff386dc97f -r 4c84cfb586c1 mod_http_admin_api/mod_http_admin_api.lua --- 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;