From 3c8a8d01aa09d728fa5d4e516b624341b89f1275 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Sat, 11 Apr 2020 20:12:42 -0700 Subject: [PATCH] ircd::m::bridge: Add timeout conf item; fix queries; add console cmd. --- include/ircd/m/bridge.h | 4 ++- matrix/bridge.cc | 64 ++++++++++++++++++++++------------------- modules/console.cc | 57 ++++++++++++++++++++++++++++++++++++ 3 files changed, 94 insertions(+), 31 deletions(-) diff --git a/include/ircd/m/bridge.h b/include/ircd/m/bridge.h index 952fb0deb..748414dee 100644 --- a/include/ircd/m/bridge.h +++ b/include/ircd/m/bridge.h @@ -25,10 +25,12 @@ namespace ircd::m::bridge struct ircd::m::bridge::query { + static conf::item 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; diff --git a/matrix/bridge.cc b/matrix/bridge.cc index 311d4f34c..7f925582e 100644 --- a/matrix/bridge.cc +++ b/matrix/bridge.cc @@ -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)) } { } diff --git a/modules/console.cc b/modules/console.cc index 41dceb1d7..caad9cb9a 100644 --- a/modules/console.cc +++ b/modules/console.cc @@ -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; +}