0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-05-16 01:43:49 +02:00

modules/admin/rooms: Implement GET /state.

This commit is contained in:
Jason Volk 2023-03-03 12:49:19 -08:00
parent 2d78dbdbb9
commit 017af932ed

View file

@ -10,6 +10,7 @@
namespace ircd::m::admin
{
static resource::response handle_get_state(client &, const resource::request &, const room::id &);
static resource::response handle_get_members(client &, const resource::request &, const room::id &);
static resource::response handle_delete_forward_extremis(client &, const resource::request &, const room::id &);
static resource::response handle_get_forward_extremis(client &, const resource::request &, const room::id &);
@ -87,6 +88,9 @@ ircd::m::admin::handle(client &client,
if(request.head.method == "GET" && cmd == "members")
return handle_get_members(client, request, room_id);
if(request.head.method == "GET" && cmd == "state")
return handle_get_state(client, request, room_id);
throw m::NOT_FOUND
{
"/admin/rooms command not found"
@ -204,3 +208,36 @@ ircd::m::admin::handle_get_members(client &client,
return response;
}
ircd::m::resource::response
ircd::m::admin::handle_get_state(client &client,
const resource::request &request,
const room::id &room_id)
{
const m::room::state state
{
room_id
};
m::resource::response::chunked::json response
{
client, http::OK
};
json::stack::array array
{
response, "state"
};
m::event::fetch event;
state.for_each([&array, &event]
(const auto &type, const auto &state_key, const auto &event_idx)
{
if(likely(seek(std::nothrow, event, event_idx)))
array.append(event);
return true;
});
return response;
}