diff --git a/modules/client/delete_devices.cc b/modules/client/delete_devices.cc index d532338fe..6026c10fd 100644 --- a/modules/client/delete_devices.cc +++ b/modules/client/delete_devices.cc @@ -10,6 +10,12 @@ using namespace ircd; +static resource::response +post__delete_devices(client &client, + const resource::request &request); + +extern const std::string flows; + mapi::header IRCD_MODULE { @@ -25,20 +31,15 @@ delete_devices_resource } }; -ircd::resource::redirect::permanent +ircd::resource delete_devices_resource__unstable { "/_matrix/client/unstable/delete_devices/", - "/_matrix/client/r0/delete_devices/", { "14.10.1.5 :Device Management (redirect)" } }; -static resource::response -post__delete_devices(client &client, - const resource::request &request); - resource::method method_post { @@ -48,8 +49,14 @@ method_post } }; -extern const std::string -flows; +resource::method +method_post__unstable +{ + delete_devices_resource__unstable, "POST", post__delete_devices, + { + method_post.REQUIRES_AUTH + } +}; resource::response post__delete_devices(client &client, diff --git a/modules/client/devices.cc b/modules/client/devices.cc index 43257fa98..37fcf0a9b 100644 --- a/modules/client/devices.cc +++ b/modules/client/devices.cc @@ -10,6 +10,30 @@ using namespace ircd; +static void +_get_device(json::stack::object &obj, + const m::user &user, + const string_view &device_id); + +static resource::response +get__devices_all(client &client, + const resource::request &request, + const m::room user_room); + +static resource::response +get__devices(client &client, + const resource::request &request); + +static resource::response +put__devices(client &client, + const resource::request &request); + +static resource::response +delete__devices(client &client, + const resource::request &request); + +extern const std::string flows; + mapi::header IRCD_MODULE { @@ -26,90 +50,69 @@ devices_resource } }; -ircd::resource::redirect::permanent +ircd::resource devices_resource__unstable { "/_matrix/client/unstable/devices/", - "/_matrix/client/r0/devices/", { "(11.9) Device Management", resource::DIRECTORY, } }; -static void -_get_device(json::stack::object &obj, - const m::user &user, - const string_view &device_id) +resource::method +method_get { - json::stack::member + devices_resource, "GET", get__devices, { - obj, "device_id", device_id - }; + method_get.REQUIRES_AUTH + } +}; - m::device::get(std::nothrow, user, device_id, "display_name", [&obj] - (const string_view &value) - { - json::stack::member - { - obj, "display_name", unquote(value) - }; - }); - - m::device::get(std::nothrow, user, device_id, "last_seen_ip", [&obj] - (const string_view &value) - { - json::stack::member - { - obj, "last_seen_ip", unquote(value) - }; - }); - - m::device::get(std::nothrow, user, device_id, "last_seen_ts", [&obj] - (const string_view &value) - { - json::stack::member - { - obj, "last_seen_ts", value - }; - }); -} - -static resource::response -get__devices_all(client &client, - const resource::request &request, - const m::room user_room) +resource::method +method_get__unstable { - resource::response::chunked response + devices_resource__unstable, "GET", get__devices, { - client, http::OK - }; + method_get.REQUIRES_AUTH + } +}; - json::stack out +resource::method +method_delete +{ + devices_resource, "DELETE", delete__devices, { - response.buf, response.flusher() - }; + method_delete.REQUIRES_AUTH + } +}; - json::stack::object top +resource::method +method_delete__unstable +{ + devices_resource__unstable, "DELETE", delete__devices, { - out - }; + method_delete.REQUIRES_AUTH + } +}; - json::stack::array devices +resource::method +method_put +{ + devices_resource, "PUT", put__devices, { - top, "devices" - }; + method_put.REQUIRES_AUTH + } +}; - m::device::for_each(request.user_id, [&request, &devices] - (const string_view &device_id) +resource::method +method_put__unstable +{ + devices_resource__unstable, "PUT", put__devices, { - json::stack::object obj{devices}; - _get_device(obj, request.user_id, device_id); - return true; - }); - - return {}; -} + method_put.REQUIRES_AUTH + } +}; resource::response get__devices(client &client, @@ -153,15 +156,6 @@ get__devices(client &client, return {}; } -resource::method -method_get -{ - devices_resource, "GET", get__devices, - { - method_get.REQUIRES_AUTH - } -}; - resource::response put__devices(client &client, const resource::request &request) @@ -188,18 +182,6 @@ put__devices(client &client, }; } -resource::method -method_put -{ - devices_resource, "PUT", put__devices, - { - method_put.REQUIRES_AUTH - } -}; - -extern const std::string -flows; - resource::response delete__devices(client &client, const resource::request &request) @@ -243,14 +225,79 @@ delete__devices(client &client, }; } -resource::method -method_delete +resource::response +get__devices_all(client &client, + const resource::request &request, + const m::room user_room) { - devices_resource, "DELETE", delete__devices, + resource::response::chunked response { - method_delete.REQUIRES_AUTH - } -}; + client, http::OK + }; + + json::stack out + { + response.buf, response.flusher() + }; + + json::stack::object top + { + out + }; + + json::stack::array devices + { + top, "devices" + }; + + m::device::for_each(request.user_id, [&request, &devices] + (const string_view &device_id) + { + json::stack::object obj{devices}; + _get_device(obj, request.user_id, device_id); + return true; + }); + + return {}; +} + +void +_get_device(json::stack::object &obj, + const m::user &user, + const string_view &device_id) +{ + json::stack::member + { + obj, "device_id", device_id + }; + + m::device::get(std::nothrow, user, device_id, "display_name", [&obj] + (const string_view &value) + { + json::stack::member + { + obj, "display_name", unquote(value) + }; + }); + + m::device::get(std::nothrow, user, device_id, "last_seen_ip", [&obj] + (const string_view &value) + { + json::stack::member + { + obj, "last_seen_ip", unquote(value) + }; + }); + + m::device::get(std::nothrow, user, device_id, "last_seen_ts", [&obj] + (const string_view &value) + { + json::stack::member + { + obj, "last_seen_ts", value + }; + }); +} const std::string flows diff --git a/modules/client/keys/changes.cc b/modules/client/keys/changes.cc index a51f4d6c9..741a1ad7d 100644 --- a/modules/client/keys/changes.cc +++ b/modules/client/keys/changes.cc @@ -10,6 +10,10 @@ using namespace ircd; +static resource::response +get__keys_changes(client &client, + const resource::request &request); + mapi::header IRCD_MODULE { @@ -25,16 +29,33 @@ changes_resource } }; -ircd::resource::redirect::permanent +ircd::resource changes_resource__unstable { "/_matrix/client/unstable/keys/changes", - "/_matrix/client/r0/keys/changes", { "(14.11.5.2.4) Keys changes", } }; +resource::method +method_get +{ + changes_resource, "GET", get__keys_changes, + { + method_get.REQUIRES_AUTH + } +}; + +resource::method +method_get__unstable +{ + changes_resource__unstable, "GET", get__keys_changes, + { + method_get.REQUIRES_AUTH + } +}; + resource::response get__keys_changes(client &client, const resource::request &request) @@ -44,12 +65,3 @@ get__keys_changes(client &client, client, http::OK }; } - -resource::method -method_get -{ - changes_resource, "GET", get__keys_changes, - { - method_get.REQUIRES_AUTH - } -}; diff --git a/modules/client/keys/claim.cc b/modules/client/keys/claim.cc index cbc1524e0..e590851a3 100644 --- a/modules/client/keys/claim.cc +++ b/modules/client/keys/claim.cc @@ -67,11 +67,10 @@ claim_resource } }; -ircd::resource::redirect::permanent +ircd::resource claim_resource__unstable { "/_matrix/client/unstable/keys/claim", - "/_matrix/client/r0/keys/claim", { "(14.11.5.2.2) Keys claim", } @@ -86,6 +85,15 @@ method_post } }; +resource::method +method_post__unstable +{ + claim_resource__unstable, "POST", post__keys_claim, + { + method_post.REQUIRES_AUTH + } +}; + conf::item claim_timeout_default { diff --git a/modules/client/keys/query.cc b/modules/client/keys/query.cc index c96eb8bfc..d73c110de 100644 --- a/modules/client/keys/query.cc +++ b/modules/client/keys/query.cc @@ -67,16 +67,33 @@ query_resource } }; -ircd::resource::redirect::permanent +ircd::resource query_resource__unstable { "/_matrix/client/unstable/keys/query", - "/_matrix/client/r0/keys/query", { "(14.11.5.2.2) Keys query", } }; +resource::method +method_post +{ + query_resource, "POST", post__keys_query, + { + method_post.REQUIRES_AUTH + } +}; + +resource::method +method_post__unstable +{ + query_resource__unstable, "POST", post__keys_query, + { + method_post.REQUIRES_AUTH + } +}; + conf::item query_timeout_default { @@ -98,15 +115,6 @@ query_timeout_max { "default", 20000L }, }; -resource::method -method_post -{ - query_resource, "POST", post__keys_query, - { - method_post.REQUIRES_AUTH - } -}; - resource::response post__keys_query(client &client, const resource::request &request) diff --git a/modules/client/keys/upload.cc b/modules/client/keys/upload.cc index 6f4c12d69..ad1b45990 100644 --- a/modules/client/keys/upload.cc +++ b/modules/client/keys/upload.cc @@ -10,6 +10,16 @@ using namespace ircd; +static void +upload_device_keys(client &, + const resource::request &, + const m::device::id &, + const m::device_keys &); + +static resource::response +post__keys_upload(client &client, + const resource::request &request); + mapi::header IRCD_MODULE { @@ -26,22 +36,33 @@ upload_resource } }; -ircd::resource::redirect::permanent +ircd::resource upload_resource__unstable { "/_matrix/client/unstable/keys/upload", - "/_matrix/client/r0/keys/upload", { "(14.11.5.2.1) Keys Upload", resource::DIRECTORY } }; -static void -upload_device_keys(client &, - const resource::request &, - const m::device::id &, - const m::device_keys &); +resource::method +method_post +{ + upload_resource, "POST", post__keys_upload, + { + method_post.REQUIRES_AUTH + } +}; + +resource::method +method_post__unstable +{ + upload_resource__unstable, "POST", post__keys_upload, + { + method_post.REQUIRES_AUTH + } +}; resource::response post__keys_upload(client &client, @@ -157,12 +178,3 @@ upload_device_keys(client &client, json::get<"keys"_>(data) = request["device_keys"]; m::device::set(request.user_id, data); } - -resource::method -method_post -{ - upload_resource, "POST", post__keys_upload, - { - method_post.REQUIRES_AUTH - } -}; diff --git a/modules/client/send_to_device.cc b/modules/client/send_to_device.cc index f2da6c5f8..c72e64e97 100644 --- a/modules/client/send_to_device.cc +++ b/modules/client/send_to_device.cc @@ -10,6 +10,17 @@ using namespace ircd; +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 +put__send_to_device(client &client, + const resource::request &request); + mapi::header IRCD_MODULE { @@ -26,29 +37,16 @@ send_to_device_resource } }; -ircd::resource::redirect::permanent +ircd::resource send_to_device_resource__unstable { "/_matrix/client/unstable/sendToDevice/", - "/_matrix/client/r0/sendToDevice/", { "(14.9.3) Protocol definitions", resource::DIRECTORY, } }; -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 -put__send_to_device(client &client, - const resource::request &request); - - resource::method method_put { @@ -58,6 +56,15 @@ method_put } }; +resource::method +method_put__unstable +{ + send_to_device_resource__unstable, "PUT", put__send_to_device, + { + method_put.REQUIRES_AUTH + } +}; + resource::response put__send_to_device(client &client, const resource::request &request)