mirror of
https://github.com/matrix-construct/construct
synced 2024-11-17 07:20:55 +01:00
ircd:Ⓜ️:fed: Refactor all interfaces using abstract request.
This commit is contained in:
parent
c0a5a7a89e
commit
55ffdddc6a
23 changed files with 627 additions and 945 deletions
|
@ -17,27 +17,28 @@ namespace ircd::m::fed
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::backfill
|
struct ircd::m::fed::backfill
|
||||||
:server::request
|
:request
|
||||||
{
|
{
|
||||||
struct opts;
|
struct opts;
|
||||||
|
|
||||||
explicit operator json::object() const
|
explicit operator json::object() const
|
||||||
{
|
{
|
||||||
return json::object{in.content};
|
return json::object
|
||||||
|
{
|
||||||
|
in.content
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
backfill(const room::id &, const mutable_buffer &, opts);
|
backfill(const room::id &,
|
||||||
|
const mutable_buffer &,
|
||||||
|
opts);
|
||||||
|
|
||||||
backfill() = default;
|
backfill() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::backfill::opts
|
struct ircd::m::fed::backfill::opts
|
||||||
|
:request::opts
|
||||||
{
|
{
|
||||||
net::hostport remote;
|
|
||||||
string_view event_id;
|
string_view event_id;
|
||||||
size_t limit {64};
|
size_t limit {64};
|
||||||
m::request request;
|
|
||||||
server::out out;
|
|
||||||
server::in in;
|
|
||||||
const struct server::request::opts *sopts {nullptr};
|
|
||||||
bool dynamic {true};
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -17,25 +17,16 @@ namespace ircd::m::fed
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::event
|
struct ircd::m::fed::event
|
||||||
:server::request
|
:request
|
||||||
{
|
{
|
||||||
struct opts;
|
|
||||||
|
|
||||||
explicit operator json::object() const;
|
explicit operator json::object() const;
|
||||||
explicit operator m::event() const;
|
explicit operator m::event() const;
|
||||||
|
|
||||||
event(const m::event::id &, const mutable_buffer &, opts);
|
event(const m::event::id &,
|
||||||
event() = default;
|
const mutable_buffer &,
|
||||||
};
|
opts);
|
||||||
|
|
||||||
struct ircd::m::fed::event::opts
|
event() = default;
|
||||||
{
|
|
||||||
net::hostport remote;
|
|
||||||
m::request request;
|
|
||||||
server::out out;
|
|
||||||
server::in in;
|
|
||||||
const struct server::request::opts *sopts {nullptr};
|
|
||||||
bool dynamic {false};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
inline
|
inline
|
||||||
|
|
|
@ -17,7 +17,7 @@ namespace ircd::m::fed
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::event_auth
|
struct ircd::m::fed::event_auth
|
||||||
:server::request
|
:request
|
||||||
{
|
{
|
||||||
struct opts;
|
struct opts;
|
||||||
|
|
||||||
|
@ -31,17 +31,16 @@ struct ircd::m::fed::event_auth
|
||||||
return object["auth_chain"];
|
return object["auth_chain"];
|
||||||
}
|
}
|
||||||
|
|
||||||
event_auth(const m::room::id &, const m::event::id &, const mutable_buffer &, opts);
|
event_auth(const m::room::id &,
|
||||||
|
const m::event::id &,
|
||||||
|
const mutable_buffer &,
|
||||||
|
opts);
|
||||||
|
|
||||||
event_auth() = default;
|
event_auth() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::event_auth::opts
|
struct ircd::m::fed::event_auth::opts
|
||||||
|
:request::opts
|
||||||
{
|
{
|
||||||
net::hostport remote;
|
|
||||||
m::request request;
|
|
||||||
server::out out;
|
|
||||||
server::in in;
|
|
||||||
const struct server::request::opts *sopts {nullptr};
|
|
||||||
bool dynamic {true};
|
|
||||||
bool ids_only {false};
|
bool ids_only {false};
|
||||||
};
|
};
|
||||||
|
|
|
@ -11,14 +11,17 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#define HAVE_IRCD_M_FED_H
|
#define HAVE_IRCD_M_FED_H
|
||||||
|
|
||||||
|
/// Federation Interface
|
||||||
namespace ircd::m::fed
|
namespace ircd::m::fed
|
||||||
{
|
{
|
||||||
net::hostport matrix_service(net::hostport);
|
net::hostport matrix_service(net::hostport);
|
||||||
|
|
||||||
string_view fetch_well_known(const mutable_buffer &out, const string_view &origin);
|
string_view fetch_well_known(const mutable_buffer &out, const string_view &origin);
|
||||||
id::event::buf fetch_head(const id::room &room_id, const string_view &remote, const id::user &);
|
id::event::buf fetch_head(const id::room &room_id, const string_view &remote, const id::user &);
|
||||||
id::event::buf fetch_head(const id::room &room_id, const string_view &remote);
|
id::event::buf fetch_head(const id::room &room_id, const string_view &remote);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "request.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
#include "key.h"
|
#include "key.h"
|
||||||
#include "query.h"
|
#include "query.h"
|
||||||
|
|
|
@ -17,34 +17,41 @@ namespace ircd::m::fed
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::frontfill
|
struct ircd::m::fed::frontfill
|
||||||
:server::request
|
:request
|
||||||
{
|
{
|
||||||
struct opts;
|
struct opts;
|
||||||
using span = std::pair<m::event::id, m::event::id>;
|
using span = std::pair<m::event::id, m::event::id>;
|
||||||
using vector = vector_view<const m::event::id>;
|
using vector = vector_view<const m::event::id>;
|
||||||
using ranges = std::pair<vector, vector>;
|
using ranges = std::pair<vector, vector>;
|
||||||
|
|
||||||
static const_buffer make_content(const mutable_buffer &, const ranges &, const opts &);
|
static const_buffer make_content(const mutable_buffer &, const ranges &, const opts &);
|
||||||
|
|
||||||
explicit operator json::array() const
|
explicit operator json::array() const
|
||||||
{
|
{
|
||||||
const json::object content{in.content};
|
const json::object content
|
||||||
return content.get("events");
|
{
|
||||||
|
in.content
|
||||||
|
};
|
||||||
|
|
||||||
|
return content["events"];
|
||||||
}
|
}
|
||||||
|
|
||||||
frontfill(const room::id &, const ranges &, const mutable_buffer &, opts);
|
frontfill(const room::id &,
|
||||||
frontfill(const room::id &, const span &, const mutable_buffer &, opts);
|
const ranges &,
|
||||||
|
const mutable_buffer &,
|
||||||
|
opts);
|
||||||
|
|
||||||
|
frontfill(const room::id &,
|
||||||
|
const span &,
|
||||||
|
const mutable_buffer &,
|
||||||
|
opts);
|
||||||
|
|
||||||
frontfill() = default;
|
frontfill() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::frontfill::opts
|
struct ircd::m::fed::frontfill::opts
|
||||||
|
:request::opts
|
||||||
{
|
{
|
||||||
net::hostport remote;
|
|
||||||
size_t limit {64};
|
size_t limit {64};
|
||||||
uint64_t min_depth {0};
|
uint64_t min_depth {0};
|
||||||
m::request request;
|
|
||||||
server::out out;
|
|
||||||
server::in in;
|
|
||||||
const struct server::request::opts *sopts {nullptr};
|
|
||||||
bool dynamic {true};
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -17,25 +17,20 @@ namespace ircd::m::fed::groups
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::groups::publicised
|
struct ircd::m::fed::groups::publicised
|
||||||
:server::request
|
:request
|
||||||
{
|
{
|
||||||
struct opts;
|
explicit operator json::object() const
|
||||||
|
|
||||||
operator json::object() const
|
|
||||||
{
|
{
|
||||||
return json::object{in.content};
|
return json::object
|
||||||
|
{
|
||||||
|
in.content
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
publicised(const string_view &, const vector_view<const id::user> &, const mutable_buffer &, opts);
|
publicised(const string_view &,
|
||||||
|
const vector_view<const id::user> &,
|
||||||
|
const mutable_buffer &,
|
||||||
|
opts);
|
||||||
|
|
||||||
publicised() = default;
|
publicised() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::groups::publicised::opts
|
|
||||||
{
|
|
||||||
net::hostport remote;
|
|
||||||
m::request request;
|
|
||||||
server::out out;
|
|
||||||
server::in in;
|
|
||||||
const struct server::request::opts *sopts {nullptr};
|
|
||||||
bool dynamic {false};
|
|
||||||
};
|
|
||||||
|
|
|
@ -17,25 +17,21 @@ namespace ircd::m::fed
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::invite
|
struct ircd::m::fed::invite
|
||||||
:server::request
|
:request
|
||||||
{
|
{
|
||||||
struct opts;
|
|
||||||
|
|
||||||
explicit operator json::array() const
|
explicit operator json::array() const
|
||||||
{
|
{
|
||||||
return json::array{in.content};
|
return json::array
|
||||||
|
{
|
||||||
|
in.content
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
invite(const room::id &, const id::event &, const json::object &, const mutable_buffer &, opts);
|
invite(const room::id &,
|
||||||
|
const id::event &,
|
||||||
|
const json::object &,
|
||||||
|
const mutable_buffer &,
|
||||||
|
opts);
|
||||||
|
|
||||||
invite() = default;
|
invite() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::invite::opts
|
|
||||||
{
|
|
||||||
net::hostport remote;
|
|
||||||
m::request request;
|
|
||||||
server::out out;
|
|
||||||
server::in in;
|
|
||||||
const struct server::request::opts *sopts {nullptr};
|
|
||||||
bool dynamic {false};
|
|
||||||
};
|
|
||||||
|
|
|
@ -17,25 +17,21 @@ namespace ircd::m::fed
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::invite2
|
struct ircd::m::fed::invite2
|
||||||
:server::request
|
:request
|
||||||
{
|
{
|
||||||
struct opts;
|
|
||||||
|
|
||||||
explicit operator json::object() const
|
explicit operator json::object() const
|
||||||
{
|
{
|
||||||
return json::object{in.content};
|
return json::object
|
||||||
|
{
|
||||||
|
in.content
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
invite2(const room::id &, const id::event &, const json::object &, const mutable_buffer &, opts);
|
invite2(const room::id &,
|
||||||
|
const id::event &,
|
||||||
|
const json::object &,
|
||||||
|
const mutable_buffer &,
|
||||||
|
opts);
|
||||||
|
|
||||||
invite2() = default;
|
invite2() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::invite2::opts
|
|
||||||
{
|
|
||||||
net::hostport remote;
|
|
||||||
m::request request;
|
|
||||||
server::out out;
|
|
||||||
server::in in;
|
|
||||||
const struct server::request::opts *sopts {nullptr};
|
|
||||||
bool dynamic {false};
|
|
||||||
};
|
|
||||||
|
|
|
@ -13,50 +13,56 @@
|
||||||
|
|
||||||
namespace ircd::m::fed::key
|
namespace ircd::m::fed::key
|
||||||
{
|
{
|
||||||
struct opts;
|
|
||||||
struct keys;
|
struct keys;
|
||||||
struct query;
|
struct query;
|
||||||
|
|
||||||
|
using opts = request::opts;
|
||||||
using server_key = std::pair<string_view, string_view>; // server_name, key_id
|
using server_key = std::pair<string_view, string_view>; // server_name, key_id
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::key::keys
|
struct ircd::m::fed::key::keys
|
||||||
:server::request
|
:request
|
||||||
{
|
{
|
||||||
using opts = key::opts;
|
|
||||||
|
|
||||||
explicit operator json::object() const
|
explicit operator json::object() const
|
||||||
{
|
{
|
||||||
const json::object object{in.content};
|
return json::object
|
||||||
return object;
|
{
|
||||||
|
in.content
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
keys(const server_key &, const mutable_buffer &, opts);
|
keys(const server_key &,
|
||||||
keys(const string_view &server_name, const mutable_buffer &, opts);
|
const mutable_buffer &,
|
||||||
|
opts);
|
||||||
|
|
||||||
|
keys(const string_view &server_name,
|
||||||
|
const mutable_buffer &,
|
||||||
|
opts);
|
||||||
|
|
||||||
keys() = default;
|
keys() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::key::query
|
struct ircd::m::fed::key::query
|
||||||
:server::request
|
:request
|
||||||
{
|
{
|
||||||
using opts = key::opts;
|
|
||||||
|
|
||||||
explicit operator json::array() const
|
explicit operator json::array() const
|
||||||
{
|
{
|
||||||
const json::object object{in.content};
|
const json::object object
|
||||||
const json::array &server_keys{object.get("server_keys")};
|
{
|
||||||
|
in.content
|
||||||
|
};
|
||||||
|
|
||||||
|
const json::array server_keys
|
||||||
|
{
|
||||||
|
object["server_keys"]
|
||||||
|
};
|
||||||
|
|
||||||
return server_keys;
|
return server_keys;
|
||||||
}
|
}
|
||||||
|
|
||||||
query(const vector_view<const server_key> &, const mutable_buffer &, opts);
|
query(const vector_view<const server_key> &,
|
||||||
|
const mutable_buffer &,
|
||||||
|
opts);
|
||||||
|
|
||||||
query() = default;
|
query() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::key::opts
|
|
||||||
{
|
|
||||||
net::hostport remote;
|
|
||||||
m::request request;
|
|
||||||
server::out out;
|
|
||||||
server::in in;
|
|
||||||
const struct server::request::opts *sopts {nullptr};
|
|
||||||
bool dynamic {false};
|
|
||||||
};
|
|
||||||
|
|
|
@ -17,25 +17,20 @@ namespace ircd::m::fed
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::make_join
|
struct ircd::m::fed::make_join
|
||||||
:server::request
|
:request
|
||||||
{
|
{
|
||||||
struct opts;
|
explicit operator json::object() const
|
||||||
|
|
||||||
operator json::object() const
|
|
||||||
{
|
{
|
||||||
return json::object{in.content};
|
return json::object
|
||||||
|
{
|
||||||
|
in.content
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
make_join(const room::id &, const id::user &, const mutable_buffer &, opts);
|
make_join(const room::id &,
|
||||||
|
const id::user &,
|
||||||
|
const mutable_buffer &,
|
||||||
|
opts);
|
||||||
|
|
||||||
make_join() = default;
|
make_join() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::make_join::opts
|
|
||||||
{
|
|
||||||
net::hostport remote;
|
|
||||||
m::request request;
|
|
||||||
server::out out;
|
|
||||||
server::in in;
|
|
||||||
const struct server::request::opts *sopts {nullptr};
|
|
||||||
bool dynamic {false};
|
|
||||||
};
|
|
||||||
|
|
|
@ -17,29 +17,30 @@ namespace ircd::m::fed
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::public_rooms
|
struct ircd::m::fed::public_rooms
|
||||||
:server::request
|
:request
|
||||||
{
|
{
|
||||||
struct opts;
|
struct opts;
|
||||||
|
|
||||||
explicit operator json::object() const
|
explicit operator json::object() const
|
||||||
{
|
{
|
||||||
return json::object{in.content};
|
return json::object
|
||||||
|
{
|
||||||
|
in.content
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public_rooms(const net::hostport &, const mutable_buffer &, opts);
|
public_rooms(const string_view &remote,
|
||||||
|
const mutable_buffer &,
|
||||||
|
opts);
|
||||||
|
|
||||||
public_rooms() = default;
|
public_rooms() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::public_rooms::opts
|
struct ircd::m::fed::public_rooms::opts
|
||||||
|
:request::opts
|
||||||
{
|
{
|
||||||
net::hostport remote;
|
|
||||||
size_t limit {128};
|
size_t limit {128};
|
||||||
string_view since;
|
string_view since;
|
||||||
string_view third_party_instance_id;
|
string_view third_party_instance_id;
|
||||||
bool include_all_networks {true};
|
bool include_all_networks {true};
|
||||||
m::request request;
|
|
||||||
server::out out;
|
|
||||||
server::in in;
|
|
||||||
const struct server::request::opts *sopts {nullptr};
|
|
||||||
bool dynamic {true};
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -17,9 +17,8 @@ namespace ircd::m::fed
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::query
|
struct ircd::m::fed::query
|
||||||
:server::request
|
:request
|
||||||
{
|
{
|
||||||
struct opts;
|
|
||||||
struct profile;
|
struct profile;
|
||||||
struct directory;
|
struct directory;
|
||||||
struct user_devices;
|
struct user_devices;
|
||||||
|
@ -27,39 +26,41 @@ struct ircd::m::fed::query
|
||||||
|
|
||||||
explicit operator json::object() const
|
explicit operator json::object() const
|
||||||
{
|
{
|
||||||
const json::object object{in.content};
|
return json::object
|
||||||
return object;
|
{
|
||||||
|
in.content
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
query(const string_view &type, const string_view &args, const mutable_buffer &, opts);
|
query(const string_view &type,
|
||||||
|
const string_view &args,
|
||||||
|
const mutable_buffer &,
|
||||||
|
opts);
|
||||||
|
|
||||||
query() = default;
|
query() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::query::opts
|
|
||||||
{
|
|
||||||
net::hostport remote;
|
|
||||||
m::request request;
|
|
||||||
server::out out;
|
|
||||||
server::in in;
|
|
||||||
const struct server::request::opts *sopts {nullptr};
|
|
||||||
bool dynamic {false};
|
|
||||||
|
|
||||||
opts(const net::hostport &remote)
|
|
||||||
:remote{remote}
|
|
||||||
{}
|
|
||||||
|
|
||||||
opts() = default;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ircd::m::fed::query::profile
|
struct ircd::m::fed::query::profile
|
||||||
:query
|
:query
|
||||||
{
|
{
|
||||||
profile(const id::user &user_id, const string_view &field, const mutable_buffer &, opts);
|
profile(const id::user &user_id,
|
||||||
profile(const id::user &user_id, const mutable_buffer &, opts);
|
const string_view &field,
|
||||||
|
const mutable_buffer &,
|
||||||
|
opts);
|
||||||
|
|
||||||
|
profile(const id::user &user_id,
|
||||||
|
const mutable_buffer &,
|
||||||
|
opts);
|
||||||
|
|
||||||
|
profile() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::query::directory
|
struct ircd::m::fed::query::directory
|
||||||
:query
|
:query
|
||||||
{
|
{
|
||||||
directory(const id::room_alias &room_alias, const mutable_buffer &, opts);
|
directory(const id::room_alias &room_alias,
|
||||||
|
const mutable_buffer &,
|
||||||
|
opts);
|
||||||
|
|
||||||
|
directory() = default;
|
||||||
};
|
};
|
||||||
|
|
|
@ -17,13 +17,15 @@ namespace ircd::m::fed
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::query_auth
|
struct ircd::m::fed::query_auth
|
||||||
:server::request
|
:request
|
||||||
{
|
{
|
||||||
struct opts;
|
|
||||||
|
|
||||||
explicit operator json::object() const
|
explicit operator json::object() const
|
||||||
{
|
{
|
||||||
const auto type(json::type(in.content));
|
const auto type
|
||||||
|
{
|
||||||
|
json::type(in.content)
|
||||||
|
};
|
||||||
|
|
||||||
return type == json::ARRAY?
|
return type == json::ARRAY?
|
||||||
json::array{in.content}.at(1): // non-spec [200, {...}]
|
json::array{in.content}.at(1): // non-spec [200, {...}]
|
||||||
json::object{in.content}; // spec {...}
|
json::object{in.content}; // spec {...}
|
||||||
|
@ -37,13 +39,3 @@ struct ircd::m::fed::query_auth
|
||||||
|
|
||||||
query_auth() = default;
|
query_auth() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::query_auth::opts
|
|
||||||
{
|
|
||||||
net::hostport remote;
|
|
||||||
m::request request;
|
|
||||||
server::out out;
|
|
||||||
server::in in;
|
|
||||||
const struct server::request::opts *sopts {nullptr};
|
|
||||||
bool dynamic {true};
|
|
||||||
};
|
|
||||||
|
|
60
include/ircd/m/fed/request.h
Normal file
60
include/ircd/m/fed/request.h
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
// Matrix Construct
|
||||||
|
//
|
||||||
|
// Copyright (C) Matrix Construct Developers, Authors & Contributors
|
||||||
|
// Copyright (C) 2016-2019 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.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#define HAVE_IRCD_M_FED_REQUEST_H
|
||||||
|
|
||||||
|
namespace ircd::m::fed
|
||||||
|
{
|
||||||
|
struct request;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Abstract request; everything goes through here.
|
||||||
|
struct ircd::m::fed::request
|
||||||
|
:server::request
|
||||||
|
{
|
||||||
|
struct opts;
|
||||||
|
|
||||||
|
request(const mutable_buffer &buf,
|
||||||
|
opts &&);
|
||||||
|
|
||||||
|
request() = default;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ircd::m::fed::request::opts
|
||||||
|
{
|
||||||
|
/// The remote server to contact. Must be specified for this request.
|
||||||
|
string_view remote;
|
||||||
|
|
||||||
|
/// The m::request structure which helps compose this request. The fields
|
||||||
|
/// of this object are eventually used to sign the request for [Fed. 12.1]
|
||||||
|
/// Request Authentication. User does not have to fill anything in here;
|
||||||
|
/// anything not provided is derived automatically, but providing these
|
||||||
|
/// fields will override that derivation.
|
||||||
|
m::request request;
|
||||||
|
|
||||||
|
/// The lower-level server::out structure used by server:: when transmitting
|
||||||
|
/// data; providing anything here is optional and will override things.
|
||||||
|
server::out out;
|
||||||
|
|
||||||
|
/// The lower-level server::in structure used by server:: when receiving
|
||||||
|
/// data; providing anything here is optional and will override things.
|
||||||
|
server::in in;
|
||||||
|
|
||||||
|
/// The lower-level server::request::opts configuration to attach to
|
||||||
|
/// this request.
|
||||||
|
const struct server::request::opts *sopts {nullptr};
|
||||||
|
|
||||||
|
/// Whether dynamic content buffering for incoming data will be used.
|
||||||
|
/// if false, the user supplied buffer handles all data sent from the
|
||||||
|
/// remote server; this is faster, but if it runs out the request is
|
||||||
|
/// canceled and an exception is thrown.
|
||||||
|
bool dynamic {true};
|
||||||
|
};
|
|
@ -21,14 +21,16 @@ namespace ircd::m::fed
|
||||||
/// must stay in scope to complete the request until the future is resolved.
|
/// must stay in scope to complete the request until the future is resolved.
|
||||||
///
|
///
|
||||||
struct ircd::m::fed::send
|
struct ircd::m::fed::send
|
||||||
:server::request
|
:request
|
||||||
{
|
{
|
||||||
struct opts;
|
|
||||||
struct response;
|
struct response;
|
||||||
|
|
||||||
operator json::object() const
|
explicit operator json::object() const
|
||||||
{
|
{
|
||||||
return { in.content };
|
return json::object
|
||||||
|
{
|
||||||
|
in.content
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
send(const string_view &txnid, // transaction ID (goes in URL)
|
send(const string_view &txnid, // transaction ID (goes in URL)
|
||||||
|
@ -39,35 +41,6 @@ struct ircd::m::fed::send
|
||||||
send() = default;
|
send() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Options for a federation send request.
|
|
||||||
///
|
|
||||||
struct ircd::m::fed::send::opts
|
|
||||||
{
|
|
||||||
/// The remote server to contact. Must be specified for this request.
|
|
||||||
net::hostport remote;
|
|
||||||
|
|
||||||
/// The m::request structure which helps compose this request. The fields
|
|
||||||
/// of this object are eventually used to sign the request for [Fed. 12.1]
|
|
||||||
/// Request Authentication. User does not have to fill anything in here;
|
|
||||||
/// anything not provided is derived automatically, but providing these
|
|
||||||
/// fields will override that derivation.
|
|
||||||
m::request request;
|
|
||||||
|
|
||||||
/// The lower-level server::out structure used by server:: when transmitting
|
|
||||||
/// data; providing anything here is optional and will override things.
|
|
||||||
server::out out;
|
|
||||||
|
|
||||||
/// The lower-level server::in structure used by server:: when receiving
|
|
||||||
/// data; providing anything here is optional and will override things.
|
|
||||||
server::in in;
|
|
||||||
|
|
||||||
/// The lower-level server::request::opts configuration to attach to
|
|
||||||
/// this request.
|
|
||||||
const struct server::request::opts *sopts {nullptr};
|
|
||||||
|
|
||||||
bool dynamic {false};
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Helper for dealing with response content from a /send/.
|
/// Helper for dealing with response content from a /send/.
|
||||||
struct ircd::m::fed::send::response
|
struct ircd::m::fed::send::response
|
||||||
:json::object
|
:json::object
|
||||||
|
|
|
@ -17,25 +17,21 @@ namespace ircd::m::fed
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::send_join
|
struct ircd::m::fed::send_join
|
||||||
:server::request
|
:request
|
||||||
{
|
{
|
||||||
struct opts;
|
explicit operator json::array() const
|
||||||
|
|
||||||
operator json::array() const
|
|
||||||
{
|
{
|
||||||
return json::array{in.content};
|
return json::array
|
||||||
|
{
|
||||||
|
in.content
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
send_join(const room::id &, const id::event &, const const_buffer &, const mutable_buffer &, opts);
|
send_join(const room::id &,
|
||||||
|
const id::event &,
|
||||||
|
const const_buffer &,
|
||||||
|
const mutable_buffer &,
|
||||||
|
opts);
|
||||||
|
|
||||||
send_join() = default;
|
send_join() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::send_join::opts
|
|
||||||
{
|
|
||||||
net::hostport remote;
|
|
||||||
m::request request;
|
|
||||||
server::out out;
|
|
||||||
server::in in;
|
|
||||||
const struct server::request::opts *sopts {nullptr};
|
|
||||||
bool dynamic {true};
|
|
||||||
};
|
|
||||||
|
|
|
@ -17,27 +17,28 @@ namespace ircd::m::fed
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::state
|
struct ircd::m::fed::state
|
||||||
:server::request
|
:request
|
||||||
{
|
{
|
||||||
struct opts;
|
struct opts;
|
||||||
|
|
||||||
explicit operator json::object() const
|
explicit operator json::object() const
|
||||||
{
|
{
|
||||||
return json::object{in.content};
|
return json::object
|
||||||
|
{
|
||||||
|
in.content
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
state(const room::id &, const mutable_buffer &, opts);
|
state(const room::id &,
|
||||||
|
const mutable_buffer &,
|
||||||
|
opts);
|
||||||
|
|
||||||
state() = default;
|
state() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::state::opts
|
struct ircd::m::fed::state::opts
|
||||||
|
:request::opts
|
||||||
{
|
{
|
||||||
net::hostport remote;
|
|
||||||
string_view event_id;
|
string_view event_id;
|
||||||
bool ids_only {false};
|
bool ids_only {false};
|
||||||
m::request request;
|
|
||||||
server::out out;
|
|
||||||
server::in in;
|
|
||||||
const struct server::request::opts *sopts {nullptr};
|
|
||||||
bool dynamic {true};
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -13,33 +13,25 @@
|
||||||
|
|
||||||
namespace ircd::m::fed::user
|
namespace ircd::m::fed::user
|
||||||
{
|
{
|
||||||
struct opts;
|
|
||||||
struct devices;
|
struct devices;
|
||||||
|
|
||||||
|
using opts = request::opts;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ircd::m::fed::user::devices
|
struct ircd::m::fed::user::devices
|
||||||
:server::request
|
:request
|
||||||
{
|
{
|
||||||
using opts = fed::user::opts;
|
|
||||||
|
|
||||||
explicit operator json::object() const
|
explicit operator json::object() const
|
||||||
{
|
{
|
||||||
const json::object object{in.content};
|
return json::object
|
||||||
return object;
|
{
|
||||||
|
in.content
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
devices(const id::user &user_id, const mutable_buffer &, opts);
|
devices(const id::user &user_id,
|
||||||
|
const mutable_buffer &,
|
||||||
|
opts);
|
||||||
|
|
||||||
devices() = default;
|
devices() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::user::opts
|
|
||||||
{
|
|
||||||
net::hostport remote;
|
|
||||||
m::request request;
|
|
||||||
server::out out;
|
|
||||||
server::in in;
|
|
||||||
const struct server::request::opts *sopts {nullptr};
|
|
||||||
bool dynamic {true};
|
|
||||||
|
|
||||||
opts() = default;
|
|
||||||
};
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ namespace ircd::m::fed::user::keys
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ircd::m::fed::user::keys::query
|
struct ircd::m::fed::user::keys::query
|
||||||
:server::request
|
:request
|
||||||
{
|
{
|
||||||
using opts = fed::user::opts;
|
using opts = fed::user::opts;
|
||||||
using devices = vector_view<const string_view>;
|
using devices = vector_view<const string_view>;
|
||||||
|
@ -31,8 +31,10 @@ struct ircd::m::fed::user::keys::query
|
||||||
|
|
||||||
explicit operator json::object() const
|
explicit operator json::object() const
|
||||||
{
|
{
|
||||||
const json::object object{in.content};
|
return json::object
|
||||||
return object;
|
{
|
||||||
|
in.content
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
explicit
|
explicit
|
||||||
|
@ -65,7 +67,7 @@ struct ircd::m::fed::user::keys::query
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::user::keys::claim
|
struct ircd::m::fed::user::keys::claim
|
||||||
:server::request
|
:request
|
||||||
{
|
{
|
||||||
using opts = fed::user::opts;
|
using opts = fed::user::opts;
|
||||||
using device = std::pair<string_view, string_view>;
|
using device = std::pair<string_view, string_view>;
|
||||||
|
@ -79,8 +81,10 @@ struct ircd::m::fed::user::keys::claim
|
||||||
|
|
||||||
explicit operator json::object() const
|
explicit operator json::object() const
|
||||||
{
|
{
|
||||||
const json::object object{in.content};
|
return json::object
|
||||||
return object;
|
{
|
||||||
|
in.content
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
explicit
|
explicit
|
||||||
|
|
|
@ -17,25 +17,18 @@ namespace ircd::m::fed
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::version
|
struct ircd::m::fed::version
|
||||||
:server::request
|
:request
|
||||||
{
|
{
|
||||||
struct opts;
|
explicit operator json::object() const
|
||||||
|
|
||||||
operator json::object() const
|
|
||||||
{
|
{
|
||||||
return json::object{in.content};
|
return json::object
|
||||||
|
{
|
||||||
|
in.content
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
version(const mutable_buffer &, opts);
|
version(const mutable_buffer &,
|
||||||
|
opts);
|
||||||
|
|
||||||
version() = default;
|
version() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ircd::m::fed::version::opts
|
|
||||||
{
|
|
||||||
net::hostport remote;
|
|
||||||
m::request request;
|
|
||||||
server::out out;
|
|
||||||
server::in in;
|
|
||||||
const struct server::request::opts *sopts {nullptr};
|
|
||||||
bool dynamic {false};
|
|
||||||
};
|
|
||||||
|
|
975
matrix/fed.cc
975
matrix/fed.cc
File diff suppressed because it is too large
Load diff
|
@ -272,7 +272,7 @@ get__initialsync_remote(client &client,
|
||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
const net::hostport remote
|
const auto remote
|
||||||
{
|
{
|
||||||
server?: room.room_id.host()
|
server?: room.room_id.host()
|
||||||
};
|
};
|
||||||
|
|
|
@ -6563,7 +6563,7 @@ console_cmd__stage__send(opt &out, const string_view &line)
|
||||||
"remote", "[id]"
|
"remote", "[id]"
|
||||||
}};
|
}};
|
||||||
|
|
||||||
const net::hostport remote
|
const string_view remote
|
||||||
{
|
{
|
||||||
param.at(0)
|
param.at(0)
|
||||||
};
|
};
|
||||||
|
@ -8926,7 +8926,7 @@ console_cmd__room__alias__cache__fetch(opt &out, const string_view &line)
|
||||||
param["alias"]
|
param["alias"]
|
||||||
};
|
};
|
||||||
|
|
||||||
const net::hostport &remote
|
const auto &remote
|
||||||
{
|
{
|
||||||
param["remote"]?
|
param["remote"]?
|
||||||
param["remote"]:
|
param["remote"]:
|
||||||
|
@ -11559,7 +11559,7 @@ console_cmd__user__profile__fetch(opt &out, const string_view &line)
|
||||||
param["key"]
|
param["key"]
|
||||||
};
|
};
|
||||||
|
|
||||||
const net::hostport &remote
|
const auto &remote
|
||||||
{
|
{
|
||||||
param["remote"]?
|
param["remote"]?
|
||||||
param["remote"]:
|
param["remote"]:
|
||||||
|
@ -12692,7 +12692,7 @@ console_cmd__fed__head(opt &out, const string_view &line)
|
||||||
m::room_id(param.at(0))
|
m::room_id(param.at(0))
|
||||||
};
|
};
|
||||||
|
|
||||||
const net::hostport remote
|
const string_view remote
|
||||||
{
|
{
|
||||||
param.at(1, room_id.host())
|
param.at(1, room_id.host())
|
||||||
};
|
};
|
||||||
|
@ -12782,7 +12782,7 @@ console_cmd__fed__send(opt &out, const string_view &line)
|
||||||
"remote", "event_id",
|
"remote", "event_id",
|
||||||
}};
|
}};
|
||||||
|
|
||||||
const net::hostport remote
|
const string_view remote
|
||||||
{
|
{
|
||||||
param.at(0)
|
param.at(0)
|
||||||
};
|
};
|
||||||
|
@ -12878,7 +12878,7 @@ console_cmd__fed__sync(opt &out, const string_view &line)
|
||||||
m::room_id(param.at(0))
|
m::room_id(param.at(0))
|
||||||
};
|
};
|
||||||
|
|
||||||
const net::hostport remote
|
const string_view remote
|
||||||
{
|
{
|
||||||
param.at(1, room_id.host())
|
param.at(1, room_id.host())
|
||||||
};
|
};
|
||||||
|
@ -13003,7 +13003,7 @@ console_cmd__fed__state(opt &out, const string_view &line)
|
||||||
m::room_id(param.at(0))
|
m::room_id(param.at(0))
|
||||||
};
|
};
|
||||||
|
|
||||||
const net::hostport remote
|
const string_view remote
|
||||||
{
|
{
|
||||||
param.at(1, room_id.host())
|
param.at(1, room_id.host())
|
||||||
};
|
};
|
||||||
|
@ -13114,7 +13114,7 @@ console_cmd__fed__state_ids(opt &out, const string_view &line)
|
||||||
m::room_id(param.at(0))
|
m::room_id(param.at(0))
|
||||||
};
|
};
|
||||||
|
|
||||||
const net::hostport remote
|
const string_view remote
|
||||||
{
|
{
|
||||||
param.at(1, room_id.host())
|
param.at(1, room_id.host())
|
||||||
};
|
};
|
||||||
|
@ -13183,7 +13183,7 @@ console_cmd__fed__backfill(opt &out, const string_view &line)
|
||||||
m::room_id(param.at("room_id"))
|
m::room_id(param.at("room_id"))
|
||||||
};
|
};
|
||||||
|
|
||||||
const net::hostport remote
|
const string_view remote
|
||||||
{
|
{
|
||||||
param["remote"]?
|
param["remote"]?
|
||||||
param["remote"]:
|
param["remote"]:
|
||||||
|
@ -13280,7 +13280,7 @@ console_cmd__fed__frontfill(opt &out, const string_view &line)
|
||||||
m::room_id(param.at(0))
|
m::room_id(param.at(0))
|
||||||
};
|
};
|
||||||
|
|
||||||
const net::hostport remote
|
const string_view remote
|
||||||
{
|
{
|
||||||
param.at(1, room_id.host())
|
param.at(1, room_id.host())
|
||||||
};
|
};
|
||||||
|
@ -13350,7 +13350,7 @@ console_cmd__fed__event(opt &out, const string_view &line)
|
||||||
param.at(0)
|
param.at(0)
|
||||||
};
|
};
|
||||||
|
|
||||||
const net::hostport &remote
|
const auto &remote
|
||||||
{
|
{
|
||||||
param.at(1, event_id.host())
|
param.at(1, event_id.host())
|
||||||
};
|
};
|
||||||
|
@ -13448,7 +13448,7 @@ console_cmd__fed__public_rooms(opt &out, const string_view &line)
|
||||||
"remote", "limit", "all_networks", "3pid"
|
"remote", "limit", "all_networks", "3pid"
|
||||||
}};
|
}};
|
||||||
|
|
||||||
const net::hostport remote
|
const string_view remote
|
||||||
{
|
{
|
||||||
param.at(0)
|
param.at(0)
|
||||||
};
|
};
|
||||||
|
@ -13536,7 +13536,7 @@ console_cmd__fed__auth(opt &out, const string_view &line)
|
||||||
param.at(1)
|
param.at(1)
|
||||||
};
|
};
|
||||||
|
|
||||||
const net::hostport remote
|
const string_view remote
|
||||||
{
|
{
|
||||||
param.at(2, event_id.host())
|
param.at(2, event_id.host())
|
||||||
};
|
};
|
||||||
|
@ -13617,7 +13617,7 @@ console_cmd__fed__query_auth(opt &out, const string_view &line)
|
||||||
param.at(1)
|
param.at(1)
|
||||||
};
|
};
|
||||||
|
|
||||||
const net::hostport remote
|
const string_view remote
|
||||||
{
|
{
|
||||||
param.at(2, event_id.host())
|
param.at(2, event_id.host())
|
||||||
};
|
};
|
||||||
|
@ -13707,7 +13707,7 @@ console_cmd__fed__query__profile(opt &out, const string_view &line)
|
||||||
token(line, ' ', 0)
|
token(line, ' ', 0)
|
||||||
};
|
};
|
||||||
|
|
||||||
const net::hostport remote
|
const string_view remote
|
||||||
{
|
{
|
||||||
token_count(line, ' ') > 1? token(line, ' ', 1) : user_id.host()
|
token_count(line, ' ') > 1? token(line, ' ', 1) : user_id.host()
|
||||||
};
|
};
|
||||||
|
@ -13748,7 +13748,7 @@ console_cmd__fed__query__directory(opt &out, const string_view &line)
|
||||||
token(line, ' ', 0)
|
token(line, ' ', 0)
|
||||||
};
|
};
|
||||||
|
|
||||||
const net::hostport remote
|
const string_view remote
|
||||||
{
|
{
|
||||||
token_count(line, ' ') > 1? token(line, ' ', 1) : room_alias.host()
|
token_count(line, ' ') > 1? token(line, ' ', 1) : room_alias.host()
|
||||||
};
|
};
|
||||||
|
@ -13794,7 +13794,7 @@ console_cmd__fed__user__devices(opt &out, const string_view &line)
|
||||||
param.at("user_id")
|
param.at("user_id")
|
||||||
};
|
};
|
||||||
|
|
||||||
const net::hostport remote
|
const string_view remote
|
||||||
{
|
{
|
||||||
param.at("remote", user_id.host())
|
param.at("remote", user_id.host())
|
||||||
};
|
};
|
||||||
|
@ -13858,7 +13858,7 @@ console_cmd__fed__user__keys__query(opt &out, const string_view &line)
|
||||||
param.at("device_id", string_view{})
|
param.at("device_id", string_view{})
|
||||||
};
|
};
|
||||||
|
|
||||||
const net::hostport remote
|
const string_view remote
|
||||||
{
|
{
|
||||||
param.at("remote", user_id.host())
|
param.at("remote", user_id.host())
|
||||||
};
|
};
|
||||||
|
@ -13944,7 +13944,7 @@ console_cmd__fed__user__keys__claim(opt &out, const string_view &line)
|
||||||
param.at("algorithm")
|
param.at("algorithm")
|
||||||
};
|
};
|
||||||
|
|
||||||
const net::hostport remote
|
const string_view remote
|
||||||
{
|
{
|
||||||
param.at("remote", user_id.host())
|
param.at("remote", user_id.host())
|
||||||
};
|
};
|
||||||
|
@ -14053,10 +14053,7 @@ console_cmd__fed__key__query(opt &out, const string_view &line)
|
||||||
|
|
||||||
m::fed::key::opts opts;
|
m::fed::key::opts opts;
|
||||||
opts.dynamic = true;
|
opts.dynamic = true;
|
||||||
opts.remote = net::hostport
|
opts.remote = param.at("remote");
|
||||||
{
|
|
||||||
param.at(0)
|
|
||||||
};
|
|
||||||
|
|
||||||
const unique_buffer<mutable_buffer> buf{24_KiB};
|
const unique_buffer<mutable_buffer> buf{24_KiB};
|
||||||
m::fed::key::query request
|
m::fed::key::query request
|
||||||
|
|
Loading…
Reference in a new issue