From 6671122997e57deb4e92cdd01a56522a1ce5800d Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Thu, 31 May 2018 04:21:54 -0700 Subject: [PATCH] ircd::m: Rework visibility interface for empty mxid's as part of a public test. --- include/ircd/m/room.h | 3 +- include/ircd/m/visible.h | 9 +++--- ircd/m/m.cc | 44 ++++------------------------ ircd/m/room.cc | 23 ++------------- modules/m_room_history_visibility.cc | 11 ++----- 5 files changed, 17 insertions(+), 73 deletions(-) diff --git a/include/ircd/m/room.h b/include/ircd/m/room.h index fe533423a..87faede11 100644 --- a/include/ircd/m/room.h +++ b/include/ircd/m/room.h @@ -145,8 +145,7 @@ struct ircd::m::room // misc bool membership(const m::id::user &, const string_view &membership = "join") const; string_view membership(const mutable_buffer &out, const m::id::user &) const; - bool visible(const id::user &, const m::event *const & = nullptr) const; - bool visible(const id::node &, const m::event *const & = nullptr) const; + bool visible(const string_view &mxid, const m::event *const & = nullptr) const; room(const id &room_id, const string_view &event_id, diff --git a/include/ircd/m/visible.h b/include/ircd/m/visible.h index 1ead4cd5b..c3d8ccf42 100644 --- a/include/ircd/m/visible.h +++ b/include/ircd/m/visible.h @@ -13,8 +13,9 @@ namespace ircd::m { - bool visible(const event &, const id::user &); - bool visible(const event &, const id::node &); - bool visible(const id::event &, const id::user &); - bool visible(const id::event &, const id::node &); + // The mxid argument is a string_view because it may be empty when no + // authentication is supplied (m::id cannot be empty because that's + // considered an invalid mxid). In that case the test is for public vis. + bool visible(const event &, const string_view &mxid); + bool visible(const id::event &, const string_view &mxid); } diff --git a/ircd/m/m.cc b/ircd/m/m.cc index 99eb4f56b..a67828b9e 100644 --- a/ircd/m/m.cc +++ b/ircd/m/m.cc @@ -931,7 +931,7 @@ ircd::m::keys::init::signing() bool ircd::m::visible(const event::id &event_id, - const node::id &origin) + const string_view &mxid) { m::room::id::buf room_id { @@ -944,53 +944,21 @@ ircd::m::visible(const event::id &event_id, { "room_id", room_id } }; - return visible(event, origin); -} - -bool -ircd::m::visible(const event::id &event_id, - const user::id &user_id) -{ - m::room::id::buf room_id - { - get(event_id, "room_id", room_id) - }; - - const m::event event - { - { "event_id", event_id }, - { "room_id", room_id } - }; - - return visible(event, user_id); + return visible(event, mxid); } bool ircd::m::visible(const event &event, - const node::id &origin) + const string_view &mxid) { - using prototype = bool (const m::event &, const node &); + using prototype = bool (const m::event &, const string_view &); static import function { - "m_room_history_visibility", "visible__node" + "m_room_history_visibility", "visible" }; - return function(event, origin); -} - -bool -ircd::m::visible(const event &event, - const user::id &user_id) -{ - using prototype = bool (const m::event &, const user &); - - static import function - { - "m_room_history_visibility", "visible__user" - }; - - return function(event, user_id); + return function(event, mxid); } /////////////////////////////////////////////////////////////////////////////// diff --git a/ircd/m/room.cc b/ircd/m/room.cc index 830e089a7..b5b0b45f8 100644 --- a/ircd/m/room.cc +++ b/ircd/m/room.cc @@ -162,12 +162,12 @@ ircd::m::my(const room &room) // bool -ircd::m::room::visible(const user::id &user_id, +ircd::m::room::visible(const string_view &mxid, const event *const &event) const { if(event) - return m::visible(*event, user_id); + return m::visible(*event, mxid); const m::event event_ { @@ -175,24 +175,7 @@ const { "room_id", room_id }, }; - return m::visible(event_, user_id); -} - -bool -ircd::m::room::visible(const node::id &node_id, - const event *const &event) -const -{ - if(event) - return m::visible(*event, node_id); - - const m::event event_ - { - { "event_id", event_id }, - { "room_id", room_id }, - }; - - return m::visible(event_, node_id); + return m::visible(event_, mxid); } bool diff --git a/modules/m_room_history_visibility.cc b/modules/m_room_history_visibility.cc index 62e35e65d..20a7bf885 100644 --- a/modules/m_room_history_visibility.cc +++ b/modules/m_room_history_visibility.cc @@ -28,15 +28,8 @@ ircd::m::visible_hook }; extern "C" bool -visible__user(const m::event &event, - const m::user &user) -{ - return true; -} - -extern "C" bool -visible__node(const m::event &event, - const m::node &node) +visible(const m::event &event, + const string_view &mxid) { return true; }