0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-09-29 12:18:54 +02:00

modules/s_command: Sketch preliminary handlers with rich responses.

This commit is contained in:
Jason Volk 2019-04-26 02:37:21 -07:00
parent 47247e9f2f
commit 396a218e6a

View file

@ -8,6 +8,8 @@
// copyright notice and this permission notice is present in all copies. The
// full license for this software is available in the LICENSE file.
#include <util/params.h>
using namespace ircd;
mapi::header
@ -99,6 +101,9 @@ try
execute_command(buf, user, room_id, cmd)
};
if(!html && !alt)
return;
m::send(user_room, m::me, "ircd.cmd.result",
{
{ "msgtype", "m.text" },
@ -114,6 +119,24 @@ catch(const std::exception &e)
throw;
}
static std::pair<string_view, string_view>
command__dash(const mutable_buffer &buf,
const m::user &user,
const m::room &room,
const string_view &cmd);
static std::pair<string_view, string_view>
command__read(const mutable_buffer &buf,
const m::user &user,
const m::room &room,
const string_view &cmd);
static std::pair<string_view, string_view>
command__version(const mutable_buffer &buf,
const m::user &user,
const m::room &room,
const string_view &cmd);
std::pair<string_view, string_view>
execute_command(const mutable_buffer &buf,
const m::user &user,
@ -121,6 +144,21 @@ execute_command(const mutable_buffer &buf,
const string_view &cmd)
try
{
switch(hash(token(cmd, ' ', 0)))
{
case "version"_:
return command__version(buf, user, room, cmd);
case "read"_:
return command__read(buf, user, room, cmd);
case "dash"_:
return command__dash(buf, user, room, cmd);
default:
break;
}
const string_view out{fmt::sprintf
{
buf, "unknown command :%s", cmd
@ -128,11 +166,94 @@ try
const string_view alt
{
"no alt text"
out
};
return { out, alt };
}
catch(const m::error &e)
{
const json::object &error
{
e.content
};
log::error
{
m::log, "Server command from %s in %s '%s' :%s :%s :%s",
string_view{room.room_id},
string_view{user.user_id},
cmd,
e.what(),
unquote(error.get("errcode")),
unquote(error.get("error")),
};
std::ostringstream out;
pubsetbuf(out, buf);
const string_view fg[] {"#FCFCFC", "#FFFFFF"};
const string_view bg[] {"#A01810", "#C81810"};
const string_view sp {"&nbsp;"};
out
<< "<h5>"
<< "<font color=\"" << fg[0] << "\" data-mx-bg-color=\"" << bg[0] << "\">"
<< "<b>"
<< sp << sp << e.what() << sp << sp
<< "</b>"
<< "</font> "
<< "<font color=\"" << fg[1] << "\" data-mx-bg-color=\"" << bg[1] << "\">"
<< "<b>"
<< sp << sp << unquote(error.get("errcode")) << sp << sp
<< "</b>"
<< "</font> "
<< "</h5>"
<< "<pre>"
<< unquote(error.get("error"))
<< "</pre>"
;
return
{
view(out, buf), e.what()
};
}
catch(const http::error &e)
{
log::error
{
m::log, "Server command from %s in %s '%s' :%s :%s",
string_view{room.room_id},
string_view{user.user_id},
cmd,
e.what(),
e.content
};
std::ostringstream out;
pubsetbuf(out, buf);
const string_view fg[] {"#FCFCFC"};
const string_view bg[] {"#A01810"};
const string_view sp {"&nbsp;"};
out
<< "<h5>"
<< "<font color=\"" << fg[0] << "\" data-mx-bg-color=\"" << bg[0] << "\">"
<< "<b>"
<< sp << sp << e.what() << sp << sp
<< "</b>"
<< "</font> "
<< "</h5>"
<< "<pre>"
<< e.content
<< "</pre>"
;
return
{
view(out, buf), e.what()
};
}
catch(const std::exception &e)
{
log::error
@ -155,3 +276,95 @@ catch(const std::exception &e)
{ data(buf), len }
};
}
std::pair<string_view, string_view>
command__version(const mutable_buffer &buf,
const m::user &user,
const m::room &room,
const string_view &cmd)
{
std::ostringstream out;
pubsetbuf(out, buf);
const string_view sp {"&nbsp;"};
out
<< "<h1>"
<< info::name
<< "</h1>"
<< "<pre><code>"
<< info::version
<< "</code></pre>"
;
const string_view alt
{
info::version
};
return { view(out, buf), alt };
}
std::pair<string_view, string_view>
command__read(const mutable_buffer &buf,
const m::user &user,
const m::room &room,
const string_view &cmd)
{
const params param{tokens_after(cmd, ' ', 0), " ",
{
"event_id", "[time]"
}};
const m::event::id::buf event_id
{
param["event_id"]?
m::event::id::buf{param["event_id"]}:
m::head(room)
};
const time_t &ms
{
param.at("[time]", ircd::time<milliseconds>())
};
m::receipt::read(room, user, event_id, ms);
return {};
}
std::pair<string_view, string_view>
command__dash(const mutable_buffer &buf,
const m::user &user,
const m::room &room,
const string_view &cmd)
{
std::ostringstream out;
pubsetbuf(out, buf);
const string_view fg[] {"#E8E8E8", "#FFFFFF"};
const string_view bg[] {"#303030", "#008000"};
const string_view sp {"&nbsp;"};
out
<< "<h5>"
<< "<font color=\"" << fg[0] << "\" data-mx-bg-color=\"" << bg[0] << "\">"
<< "<b>"
<< sp << sp << " CONSTRUCT STATUS " << sp << sp
<< "</b>"
<< "</font> "
<< "<font color=\"" << fg[1] << "\" data-mx-bg-color=\"" << bg[1] << "\">"
<< "<b>"
<< sp << sp << " OK " << sp << sp
<< "</b>"
<< "</font> "
<< "</h5>"
<< "<pre>"
<< " "
<< "</pre>"
;
const string_view alt
{
"no alt text"
};
return { view(out, buf), alt };
}