mirror of
https://github.com/matrix-construct/construct
synced 2025-04-27 12:02:50 +02:00
modules/federation: Replace backfill_ids endpoint with pdu_ids query parameter.
This commit is contained in:
parent
f3886d60d8
commit
6b1305df8a
4 changed files with 16 additions and 154 deletions
|
@ -88,7 +88,6 @@ ircd::m::matrix::module_names
|
|||
|
||||
"media_media",
|
||||
|
||||
"federation_backfill_ids",
|
||||
"federation_backfill",
|
||||
"federation_event_auth",
|
||||
"federation_event",
|
||||
|
|
|
@ -210,7 +210,6 @@ federation_federation_state_la_SOURCES = federation/state.cc
|
|||
federation_federation_make_leave_la_SOURCES = federation/make_leave.cc
|
||||
federation_federation_send_leave_la_SOURCES = federation/send_leave.cc
|
||||
federation_federation_backfill_la_SOURCES = federation/backfill.cc
|
||||
federation_federation_backfill_ids_la_SOURCES = federation/backfill_ids.cc
|
||||
federation_federation_event_auth_la_SOURCES = federation/event_auth.cc
|
||||
federation_federation_query_auth_la_SOURCES = federation/query_auth.cc
|
||||
federation_federation_publicrooms_la_SOURCES = federation/publicrooms.cc
|
||||
|
@ -236,7 +235,6 @@ federation_module_LTLIBRARIES = \
|
|||
federation/federation_make_leave.la \
|
||||
federation/federation_send_leave.la \
|
||||
federation/federation_backfill.la \
|
||||
federation/federation_backfill_ids.la \
|
||||
federation/federation_event_auth.la \
|
||||
federation/federation_query_auth.la \
|
||||
federation/federation_publicrooms.la \
|
||||
|
|
|
@ -91,6 +91,11 @@ get__backfill(client &client,
|
|||
m::head(room_id)
|
||||
};
|
||||
|
||||
const bool ids_only
|
||||
{
|
||||
request.query.get<bool>("pdu_ids", false)
|
||||
};
|
||||
|
||||
const size_t limit
|
||||
{
|
||||
calc_limit(request)
|
||||
|
@ -114,17 +119,25 @@ get__backfill(client &client,
|
|||
json::stack::object top{out};
|
||||
json::stack::array pdus
|
||||
{
|
||||
top, "pdus"
|
||||
top, ids_only? "pdus": "pdu_ids"
|
||||
};
|
||||
|
||||
size_t count{0};
|
||||
for(; it && count < limit; ++count, --it)
|
||||
{
|
||||
const m::event &event(*it);
|
||||
const m::event &event
|
||||
{
|
||||
*it
|
||||
};
|
||||
|
||||
assert(event.event_id);
|
||||
if(!visible(event, request.node_id))
|
||||
continue;
|
||||
|
||||
pdus.append(event);
|
||||
if(ids_only)
|
||||
pdus.append(event.event_id);
|
||||
else
|
||||
pdus.append(event);
|
||||
}
|
||||
|
||||
return std::move(response);
|
||||
|
|
|
@ -1,148 +0,0 @@
|
|||
// Matrix Construct
|
||||
//
|
||||
// Copyright (C) Matrix Construct Developers, Authors & Contributors
|
||||
// Copyright (C) 2016-2018 Jason Volk <jason@zemos.net>
|
||||
//
|
||||
// Permission to use, copy, modify, and/or distribute this software for any
|
||||
// purpose with or without fee is hereby granted, provided that the above
|
||||
// copyright notice and this permission notice is present in all copies. The
|
||||
// full license for this software is available in the LICENSE file.
|
||||
|
||||
using namespace ircd;
|
||||
|
||||
mapi::header
|
||||
IRCD_MODULE
|
||||
{
|
||||
"federation backfill event IDs"
|
||||
};
|
||||
|
||||
m::resource
|
||||
backfill_ids_resource
|
||||
{
|
||||
"/_matrix/federation/v1/backfill_ids/",
|
||||
{
|
||||
"federation backfill ID's",
|
||||
resource::DIRECTORY,
|
||||
}
|
||||
};
|
||||
|
||||
conf::item<size_t>
|
||||
backfill_ids_limit_max
|
||||
{
|
||||
{ "name", "ircd.federation.backfill_ids.limit.max" },
|
||||
{ "default", 131072L },
|
||||
};
|
||||
|
||||
conf::item<size_t>
|
||||
backfill_ids_limit_default
|
||||
{
|
||||
{ "name", "ircd.federation.backfill_ids.limit.default" },
|
||||
{ "default", 64L },
|
||||
};
|
||||
|
||||
static size_t
|
||||
calc_limit(const m::resource::request &request)
|
||||
{
|
||||
const auto &limit
|
||||
{
|
||||
request.query["limit"]
|
||||
};
|
||||
|
||||
if(!limit)
|
||||
return size_t(backfill_ids_limit_default);
|
||||
|
||||
const size_t &ret
|
||||
{
|
||||
lex_cast<size_t>(limit)
|
||||
};
|
||||
|
||||
return std::min(ret, size_t(backfill_ids_limit_max));
|
||||
}
|
||||
|
||||
m::resource::response
|
||||
get__backfill_ids(client &client,
|
||||
const m::resource::request &request)
|
||||
{
|
||||
if(request.parv.size() < 1)
|
||||
throw m::NEED_MORE_PARAMS
|
||||
{
|
||||
"room_id path parameter required"
|
||||
};
|
||||
|
||||
m::room::id::buf room_id
|
||||
{
|
||||
url::decode(room_id, request.parv[0])
|
||||
};
|
||||
|
||||
if(m::room::server_acl::enable_read && !m::room::server_acl::check(room_id, request.node_id))
|
||||
throw m::ACCESS_DENIED
|
||||
{
|
||||
"You are not permitted by the room's server access control list."
|
||||
};
|
||||
|
||||
m::event::id::buf event_id
|
||||
{
|
||||
request.query["v"]?
|
||||
url::decode(event_id, request.query.at("v")):
|
||||
m::head(room_id)
|
||||
};
|
||||
|
||||
const m::room room
|
||||
{
|
||||
room_id, event_id
|
||||
};
|
||||
|
||||
if(!visible(room, request.node_id))
|
||||
throw m::ACCESS_DENIED
|
||||
{
|
||||
"You are not permitted to view the room at this event"
|
||||
};
|
||||
|
||||
const size_t limit
|
||||
{
|
||||
calc_limit(request)
|
||||
};
|
||||
|
||||
m::room::events it
|
||||
{
|
||||
room
|
||||
};
|
||||
|
||||
m::resource::response::chunked response
|
||||
{
|
||||
client, http::OK
|
||||
};
|
||||
|
||||
json::stack out
|
||||
{
|
||||
response.buf, response.flusher()
|
||||
};
|
||||
|
||||
json::stack::object top{out};
|
||||
json::stack::array pdus
|
||||
{
|
||||
top, "pdu_ids"
|
||||
};
|
||||
|
||||
size_t count{0};
|
||||
for(; it && count < limit; ++count, --it)
|
||||
{
|
||||
const auto event_id
|
||||
{
|
||||
m::event_id(it.event_idx())
|
||||
};
|
||||
|
||||
pdus.append(event_id);
|
||||
}
|
||||
|
||||
return std::move(response);
|
||||
}
|
||||
|
||||
m::resource::method
|
||||
method_get
|
||||
{
|
||||
backfill_ids_resource, "GET", get__backfill_ids,
|
||||
{
|
||||
method_get.VERIFY_ORIGIN
|
||||
}
|
||||
};
|
Loading…
Add table
Reference in a new issue