0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-05-29 08:13:46 +02:00

ircd:Ⓜ️:fetch: Support v1::event_auth operation with interface.

This commit is contained in:
Jason Volk 2019-08-29 19:29:40 -07:00
parent 9b23b4d907
commit a93f5a54d6
2 changed files with 43 additions and 0 deletions

View file

@ -59,6 +59,7 @@ enum class ircd::m::fetch::op
{
noop,
event,
auth,
};
struct ircd::m::fetch::opts

View file

@ -26,6 +26,7 @@ namespace ircd::m::fetch
static bool timedout(const request &, const system_point &now);
static void _check_event(const request &, const m::event &);
static void check_response__event(const request &, const json::object &);
static void check_response__auth(const request &, const json::object &);
static void check_response(const request &, const json::object &);
static string_view select_origin(request &, const string_view &);
static string_view select_random_origin(request &);
@ -222,6 +223,7 @@ ircd::m::fetch::reflect(const op &op)
{
case op::noop: return "noop";
case op::event: return "event";
case op::auth: return "auth";
}
return "?????";
@ -446,6 +448,22 @@ try
break;
}
case op::auth:
{
v1::event_auth::opts opts;
opts.remote = remote;
opts.dynamic = true;
request.future = std::make_unique<v1::event_auth>
(
request.opts.room_id,
request.opts.event_id,
request.buf,
std::move(opts)
);
break;
}
case op::noop:
break;
}
@ -714,6 +732,9 @@ ircd::m::fetch::check_response(const request &request,
case op::event:
return check_response__event(request, response);
case op::auth:
return check_response__auth(request, response);
case op::noop:
return;
}
@ -725,6 +746,27 @@ ircd::m::fetch::check_response(const request &request,
};
}
void
ircd::m::fetch::check_response__auth(const request &request,
const json::object &response)
{
const json::array &auth_chain
{
response.at("auth_chain")
};
for(const json::object &auth_event : auth_chain)
{
event::id::buf event_id;
const m::event event
{
event_id, auth_event
};
_check_event(request, event);
}
}
void
ircd::m::fetch::check_response__event(const request &request,
const json::object &response)