// Matrix Construct // // Copyright (C) Matrix Construct Developers, Authors & Contributors // Copyright (C) 2016-2019 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 { static void auth_room_third_party_invite(const event &, room::auth::hookdata &); extern hookfn auth_room_third_party_invite_hookfn; } ircd::mapi::header IRCD_MODULE { "Matrix m.room.third_party_invite" }; // // auth handler // decltype(ircd::m::auth_room_third_party_invite_hookfn) ircd::m::auth_room_third_party_invite_hookfn { auth_room_third_party_invite, { { "_site", "room.auth" }, { "type", "m.room.third_party_invite" }, } }; void ircd::m::auth_room_third_party_invite(const event &event, room::auth::hookdata &data) { using FAIL = m::room::auth::FAIL; // 7. If type is m.room.third_party_invite: assert(json::get<"type"_>(event) == "m.room.third_party_invite"); const m::room::power power { data.auth_power? *data.auth_power : m::event{}, *data.auth_create }; // a. Allow if and only if sender's current power level is greater // than or equal to the invite level. if(power(at<"sender"_>(event), "invite")) { data.allow = true; return; } throw FAIL { "sender has power level less than required for invite." }; }