mirror of
https://github.com/matrix-construct/construct
synced 2024-11-19 16:30:52 +01:00
modules/client: Implement 14.9.3.1 PUT sendToDevice (with limitation).
This commit is contained in:
parent
190662f16d
commit
1ca90d9a3d
1 changed files with 62 additions and 6 deletions
|
@ -37,7 +37,28 @@ send_to_device_resource__unstable
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
send_to_device(const string_view &txnid,
|
||||||
|
const m::user::id &sender,
|
||||||
|
const m::user::id &target,
|
||||||
|
const string_view &type,
|
||||||
|
const json::object &message);
|
||||||
|
|
||||||
static resource::response
|
static resource::response
|
||||||
|
put__send_to_device(client &client,
|
||||||
|
const resource::request &request);
|
||||||
|
|
||||||
|
|
||||||
|
resource::method
|
||||||
|
method_put
|
||||||
|
{
|
||||||
|
send_to_device_resource, "PUT", put__send_to_device,
|
||||||
|
{
|
||||||
|
method_put.REQUIRES_AUTH
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
resource::response
|
||||||
put__send_to_device(client &client,
|
put__send_to_device(client &client,
|
||||||
const resource::request &request)
|
const resource::request &request)
|
||||||
{
|
{
|
||||||
|
@ -70,17 +91,52 @@ put__send_to_device(client &client,
|
||||||
request["messages"]
|
request["messages"]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if(size(messages) > 1)
|
||||||
|
throw m::UNSUPPORTED
|
||||||
|
{
|
||||||
|
"Multiple user targets is not yet supported."
|
||||||
|
};
|
||||||
|
|
||||||
|
for(const auto &[user_id, message] : messages)
|
||||||
|
send_to_device(txnid, request.user_id, user_id, type, messages);
|
||||||
|
|
||||||
return resource::response
|
return resource::response
|
||||||
{
|
{
|
||||||
client, http::OK
|
client, http::OK
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
resource::method
|
void
|
||||||
method_put
|
send_to_device(const string_view &txnid,
|
||||||
|
const m::user::id &sender,
|
||||||
|
const m::user::id &target,
|
||||||
|
const string_view &type,
|
||||||
|
const json::object &message)
|
||||||
{
|
{
|
||||||
send_to_device_resource, "PUT", put__send_to_device,
|
json::iov event, content;
|
||||||
|
const json::iov::push push[]
|
||||||
{
|
{
|
||||||
method_put.REQUIRES_AUTH
|
// The federation sender considers the room_id property of an event
|
||||||
}
|
// as the "destination" and knows what to do if it's actually some
|
||||||
};
|
// some other string like the user::id we're targeting here.
|
||||||
|
{ event, { "room_id", target } },
|
||||||
|
{ event, { "type", "m.direct_to_device" } },
|
||||||
|
{ content, { "type", type } },
|
||||||
|
{ content, { "sender", sender } },
|
||||||
|
{ content, { "message_id", txnid } },
|
||||||
|
{ content, { "messages", message } },
|
||||||
|
};
|
||||||
|
|
||||||
|
m::vm::copts opts;
|
||||||
|
opts.add_hash = false;
|
||||||
|
opts.add_sig = false;
|
||||||
|
opts.add_event_id = false;
|
||||||
|
opts.add_origin = true;
|
||||||
|
opts.add_origin_server_ts = false;
|
||||||
|
opts.conforming = false;
|
||||||
|
opts.notify_clients = false;
|
||||||
|
m::vm::eval
|
||||||
|
{
|
||||||
|
event, content, opts
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue