0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-05-23 21:33:44 +02:00

ircd:Ⓜ️:bridge: Add timeout conf item; fix queries; add console cmd.

This commit is contained in:
Jason Volk 2020-04-11 20:12:42 -07:00
parent 926c5914a8
commit 3c8a8d01aa
3 changed files with 94 additions and 31 deletions

View file

@ -25,10 +25,12 @@ namespace ircd::m::bridge
struct ircd::m::bridge::query
{
static conf::item<seconds> timeout;
rfc3986::uri base_url;
unique_mutable_buffer buf;
window_buffer wb;
string_view uri;
window_buffer wb;
http::request hypertext;
server::request request;
http::code code;

View file

@ -24,6 +24,18 @@ ircd::m::bridge::exists(const string_view &id)
// query
//
namespace ircd::m::bridge
{
thread_local char urlencbuf[512];
}
decltype(ircd::m::bridge::query::timeout)
ircd::m::bridge::query::timeout
{
{ "name", "ircd.m.bridge.query.timeout" },
{ "default", 5L },
};
ircd::m::bridge::query::query(const config &config,
const m::room::alias &alias)
:base_url
@ -34,23 +46,19 @@ ircd::m::bridge::query::query(const config &config,
{
8_KiB
}
,wb
{
buf
}
,uri
{
wb([this, &config, &alias](const mutable_buffer &buf)
fmt::sprintf
{
thread_local char urlencbuf[512];
return fmt::sprintf
{
buf, "%s/_matrix/app/v1/rooms/%s?access_token=%s",
base_url.path,
url::encode(urlencbuf, alias),
at<"hs_token"_>(config),
};
})
buf, "%s/_matrix/app/v1/rooms/%s?access_token=%s",
base_url.path,
url::encode(urlencbuf, alias),
at<"hs_token"_>(config),
}
}
,wb
{
buf + size(uri)
}
,hypertext
{
@ -67,7 +75,7 @@ ircd::m::bridge::query::query(const config &config,
}
,code
{
request.get(seconds(10)) //TODO: conf
request.get(seconds(timeout))
}
{
}
@ -82,23 +90,19 @@ ircd::m::bridge::query::query(const config &config,
{
8_KiB
}
,wb
{
buf
}
,uri
{
wb([this, &config, &user_id](const mutable_buffer &buf)
fmt::sprintf
{
thread_local char urlencbuf[512];
return fmt::sprintf
{
buf, "%s/_matrix/app/v1/users/%s?access_token=%s",
base_url.path,
url::encode(urlencbuf, user_id),
at<"hs_token"_>(config),
};
})
buf, "%s/_matrix/app/v1/users/%s?access_token=%s",
base_url.path,
url::encode(urlencbuf, user_id),
at<"hs_token"_>(config),
}
}
,wb
{
buf + size(uri)
}
,hypertext
{
@ -115,7 +119,7 @@ ircd::m::bridge::query::query(const config &config,
}
,code
{
request.get(seconds(10)) //TODO: conf
request.get(seconds(timeout))
}
{
}

View file

@ -15110,3 +15110,60 @@ console_cmd__bridge(opt &out, const string_view &line)
return true;
}
bool
console_cmd__bridge__query(opt &out, const string_view &line)
{
const params param{line, " ",
{
"bridge_id", "mxid"
}};
const string_view &bridge_id
{
param.at("bridge_id")
};
const string_view &mxid
{
param.at("mxid")
};
std::string config;
m::bridge::config::get(bridge_id, [&config]
(const auto &, const auto &object)
{
config = object.source;
});
switch(m::sigil(mxid))
{
case m::id::USER:
{
m::bridge::query
{
m::bridge::config{config}, m::user::id{mxid}
};
break;
}
case m::id::ROOM_ALIAS:
{
m::bridge::query
{
m::bridge::config{config}, m::room::alias{mxid}
};
break;
}
default:
throw error
{
"Invalid MXID argument"
};
}
return true;
}