From f1557bee7848fd31da2b749042eba2993b0f7d16 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Fri, 16 Oct 2020 03:38:29 -0700 Subject: [PATCH] modules/widget: Stub GET ui/v1 w/ some params. --- matrix/matrix.cc | 1 + modules/Makefile.am | 2 + modules/widget/ui.cc | 119 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 122 insertions(+) create mode 100644 modules/widget/ui.cc diff --git a/matrix/matrix.cc b/matrix/matrix.cc index 9a0d420ee..579d462af 100644 --- a/matrix/matrix.cc +++ b/matrix/matrix.cc @@ -174,6 +174,7 @@ ircd::m::matrix::module_names "widget_widget", "widget_register", "widget_account", + "widget_ui", "admin_users", "admin_deactivate", diff --git a/modules/Makefile.am b/modules/Makefile.am index 12a3d3f00..0aef06e23 100644 --- a/modules/Makefile.am +++ b/modules/Makefile.am @@ -529,11 +529,13 @@ widget_moduledir = @moduledir@ widget_widget_widget_la_SOURCES = widget/widget.cc widget_widget_register_la_SOURCES = widget/register.cc widget_widget_account_la_SOURCES = widget/account.cc +widget_widget_ui_la_SOURCES = widget/ui.cc widget_module_LTLIBRARIES = \ widget/widget_widget.la \ widget/widget_register.la \ widget/widget_account.la \ + widget/widget_ui.la \ ### ############################################################################### diff --git a/modules/widget/ui.cc b/modules/widget/ui.cc new file mode 100644 index 000000000..2a64212ef --- /dev/null +++ b/modules/widget/ui.cc @@ -0,0 +1,119 @@ +// The Construct +// +// Copyright (C) The Construct Developers, Authors & Contributors +// Copyright (C) 2016-2020 Jason Volk +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice is present in all copies. The +// full license for this software is available in the LICENSE file. + +namespace ircd::m::widget +{ + static resource::response handle_get(client &, const resource::request &); + extern resource::method ui_get; + extern resource ui_resource; +} + +ircd::mapi::header +IRCD_MODULE +{ + "Widget 1.0 :UI", +}; + +decltype(ircd::m::widget::ui_resource) +ircd::m::widget::ui_resource +{ + "/_matrix/widget/ui/v1", + { + "(undocumented) UI v1" + } +}; + +decltype(ircd::m::widget::ui_get) +ircd::m::widget::ui_get +{ + ui_resource, "GET", handle_get, + { + //ui_get.REQUIRES_AUTH + } +}; + +ircd::m::resource::response +ircd::m::widget::handle_get(client &client, + const resource::request &request) +{ + const string_view version + { + request.query["v"] + }; + + const string_view scalar_token + { + request.query["scalar_token"] + }; + + if(!scalar_token) + throw m::error + { + http::UNAUTHORIZED, "M_MISSING_TOKEN", + "Credentials for this method are required but missing." + }; + + const m::room::id::buf tokens + { + "tokens", origin(my()) + }; + + const event::idx event_idx + { + m::room(tokens).get(std::nothrow, "ircd.access_token", scalar_token) + }; + + if(!event_idx) + throw m::error + { + http::UNAUTHORIZED, "M_UNKNOWN_TOKEN", + "Credentials for this method are required but invalid." + }; + + m::user::id::buf user_id_buf; + const string_view user_id + { + m::get(std::nothrow, event_idx, "sender", user_id_buf) + }; + + m::room::id::buf room_id + { + url::decode(room_id, request.query["room_id"]) + }; + + char room_name_buf[256]; + const string_view room_name + { + url::decode(room_name_buf, request.query["room_name"]) + }; + + char theme_buf[64]; + const string_view theme + { + url::decode(theme_buf, request.query["theme"]) + }; + + char integ_id_buf[48]; + const string_view integ_id + { + url::decode(integ_id_buf, request.query["integ_id"]) + }; + + char screen_buf[48]; + const string_view screen + { + url::decode(screen_buf, request.query["screen"]) + }; + + return resource::response + { + client, http::OK + }; +}