mirror of
https://github.com/matrix-construct/construct
synced 2024-11-25 08:12:37 +01:00
63 lines
1.6 KiB
C++
63 lines
1.6 KiB
C++
// Matrix Construct
|
|
//
|
|
// Copyright (C) Matrix Construct Developers, Authors & Contributors
|
|
// Copyright (C) 2016-2019 Jason Volk <jason@zemos.net>
|
|
//
|
|
// 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<room::auth::hookdata &> 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."
|
|
};
|
|
}
|