From 90e3b90775754de4e7964ebc37f1deeaef097a99 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Sat, 3 Mar 2018 02:38:05 -0800 Subject: [PATCH] ircd::m: Hook ctor rewrites local m::id's with my_host(); update affected hooks. --- ircd/m/m.cc | 43 +++++++++++++++++++++++++++++--- modules/client/directory/room.cc | 7 +++--- modules/client/publicrooms.cc | 11 ++++---- modules/client/register.cc | 6 ++--- modules/conf.cc | 12 ++++----- 5 files changed, 57 insertions(+), 22 deletions(-) diff --git a/ircd/m/m.cc b/ircd/m/m.cc index 4712bf6f0..588e66a4c 100644 --- a/ircd/m/m.cc +++ b/ircd/m/m.cc @@ -579,10 +579,47 @@ ircd::m::hook::hook(decltype(function) function, ircd::m::hook::hook(const json::members &members, decltype(function) function) try -:_feature +:_feature{[&members]() -> json::strung { - members -} + const ctx::critical_assertion ca; + std::vector copy + { + begin(members), end(members) + }; + + for(auto &member : copy) switch(hash(member.first)) + { + case hash("room_id"): + { + // Rewrite the room_id if the supplied input has no hostname + if(valid_local_only(id::ROOM, member.second)) + { + assert(my_host()); + thread_local char buf[256]; + member.second = id::room { buf, member.second, my_host() }; + } + + validate(id::ROOM, member.second); + continue; + } + + case hash("sender"): + { + // Rewrite the sender if the supplied input has no hostname + if(valid_local_only(id::USER, member.second)) + { + assert(my_host()); + thread_local char buf[256]; + member.second = id::user { buf, member.second, my_host() }; + } + + validate(id::USER, member.second); + continue; + } + } + + return { copy.data(), copy.data() + copy.size() }; +}()} ,feature { _feature diff --git a/modules/client/directory/room.cc b/modules/client/directory/room.cc index 7e36e35f6..39922487f 100644 --- a/modules/client/directory/room.cc +++ b/modules/client/directory/room.cc @@ -205,11 +205,10 @@ const m::hook _create_alias_room { { - { "_site", "vm notify" }, - { "room_id", "!ircd:zemos.net" }, - { "type", "m.room.create" }, + { "_site", "vm notify" }, + { "room_id", "!ircd" }, + { "type", "m.room.create" }, }, - [](const m::event &) { m::create(alias_room_id, m::me.user_id); diff --git a/modules/client/publicrooms.cc b/modules/client/publicrooms.cc index 4c9f4e479..2cb5221d6 100644 --- a/modules/client/publicrooms.cc +++ b/modules/client/publicrooms.cc @@ -96,11 +96,10 @@ _create_public_room(const m::event &) const m::hook _create_public_hook { + _create_public_room, { - { "_site", "vm notify" }, - { "room_id", "!ircd:zemos.net" }, - { "type", "m.room.create" }, - }, - - _create_public_room + { "_site", "vm notify" }, + { "room_id", "!ircd" }, + { "type", "m.room.create" }, + } }; diff --git a/modules/client/register.cc b/modules/client/register.cc index b44703014..27c8c0325 100644 --- a/modules/client/register.cc +++ b/modules/client/register.cc @@ -308,9 +308,9 @@ _first_user_hook { _first_user_registered, { - { "_site", "vm notify" }, - { "room_id", "!users:zemos.net" }, - { "type", "ircd.user" }, + { "_site", "vm notify" }, + { "room_id", "!users" }, + { "type", "ircd.user" }, }, }; diff --git a/modules/conf.cc b/modules/conf.cc index 2f93e9ef2..ea214ab2e 100644 --- a/modules/conf.cc +++ b/modules/conf.cc @@ -136,9 +136,9 @@ _update_conf_hook { _update_conf, { - { "_site", "vm notify" }, - { "room_id", "!control:zemos.net" }, - { "type", "m.room.message" }, + { "_site", "vm notify" }, + { "room_id", "!control" }, + { "type", "m.room.message" }, { "content", { { "msgtype", "m.text" } @@ -150,9 +150,9 @@ const m::hook _create_conf_hook { { - { "_site", "vm notify" }, - { "room_id", "!ircd:zemos.net" }, - { "type", "m.room.create" }, + { "_site", "vm notify" }, + { "room_id", "!ircd" }, + { "type", "m.room.create" }, }, [](const m::event &) {