Refactor v12 support to use new user_level helper from mtxclient
This commit is contained in:
parent
3184ab464c
commit
e3bc058845
18 changed files with 208 additions and 207 deletions
|
|
@ -1453,6 +1453,9 @@ utils::roomVias(const std::string &roomid)
|
|||
auto powerlevels =
|
||||
cache::client()->getStateEvent<mtx::events::state::PowerLevels>(roomid).value_or(
|
||||
mtx::events::StateEvent<mtx::events::state::PowerLevels>{});
|
||||
auto create =
|
||||
cache::client()->getStateEvent<mtx::events::state::Create>(roomid).value_or(
|
||||
mtx::events::StateEvent<mtx::events::state::Create>{});
|
||||
auto acls = cache::client()->getStateEvent<mtx::events::state::ServerAcl>(roomid);
|
||||
|
||||
std::vector<QRegularExpression> allowedServers;
|
||||
|
|
@ -1501,6 +1504,19 @@ utils::roomVias(const std::string &roomid)
|
|||
std::set<std::string> users_with_high_pl_in_room;
|
||||
// we should pick PL > 50, but imo that is broken, so we just pick users who have admins
|
||||
// perm
|
||||
if (create.content.room_version_creators_with_infinite_power()) {
|
||||
{
|
||||
auto user = create.sender;
|
||||
auto host = mtx::identifiers::parse<mtx::identifiers::User>(user).hostname();
|
||||
if (isHostAllowed(host))
|
||||
users_with_high_pl.insert(user);
|
||||
}
|
||||
for (const auto &user : create.content.additional_creators) {
|
||||
auto host = mtx::identifiers::parse<mtx::identifiers::User>(user).hostname();
|
||||
if (isHostAllowed(host))
|
||||
users_with_high_pl.insert(user);
|
||||
}
|
||||
}
|
||||
for (const auto &user : powerlevels.content.users) {
|
||||
if (user.second >= powerlevels.content.events_default &&
|
||||
user.second >= powerlevels.content.state_default) {
|
||||
|
|
@ -1525,12 +1541,13 @@ utils::roomVias(const std::string &roomid)
|
|||
});
|
||||
|
||||
// add the highest powerlevel user
|
||||
auto max_pl_user = std::max_element(
|
||||
users_with_high_pl_in_room.begin(),
|
||||
users_with_high_pl_in_room.end(),
|
||||
[&pl_content = powerlevels.content](const std::string &a, const std::string &b) {
|
||||
return pl_content.user_level(a) < pl_content.user_level(b);
|
||||
});
|
||||
auto max_pl_user = std::max_element(users_with_high_pl_in_room.begin(),
|
||||
users_with_high_pl_in_room.end(),
|
||||
[&pl_content = powerlevels.content, &create](
|
||||
const std::string &a, const std::string &b) {
|
||||
return pl_content.user_level(a, create) <
|
||||
pl_content.user_level(b, create);
|
||||
});
|
||||
if (max_pl_user != users_with_high_pl_in_room.end()) {
|
||||
auto host =
|
||||
mtx::identifiers::parse<mtx::identifiers::User>(*max_pl_user).hostname();
|
||||
|
|
@ -1705,11 +1722,15 @@ utils::updateSpaceVias()
|
|||
|
||||
auto spaceid = roomid.toStdString();
|
||||
|
||||
auto create = cache::client()->getStateEvent<mtx::events::state::Create>(spaceid).value_or(
|
||||
mtx::events::StateEvent<mtx::events::state::Create>{});
|
||||
|
||||
if (auto pl = cache::client()
|
||||
->getStateEvent<mtx::events::state::PowerLevels>(spaceid)
|
||||
.value_or(mtx::events::StateEvent<mtx::events::state::PowerLevels>{})
|
||||
.content;
|
||||
pl.user_level(us) < pl.state_level(to_string(mtx::events::EventType::SpaceChild)))
|
||||
pl.user_level(us, create) <
|
||||
pl.state_level(to_string(mtx::events::EventType::SpaceChild)))
|
||||
continue;
|
||||
|
||||
auto children = cache::client()->getChildRoomIds(spaceid);
|
||||
|
|
@ -1748,12 +1769,16 @@ utils::updateSpaceVias()
|
|||
parent->origin_server_ts < weekAgo &&
|
||||
// ignore unset spaces
|
||||
(parent->content.via && !parent->content.via->empty())) {
|
||||
auto childCreate =
|
||||
cache::client()->getStateEvent<mtx::events::state::Create>(spaceid).value_or(
|
||||
mtx::events::StateEvent<mtx::events::state::Create>{});
|
||||
|
||||
if (auto pl =
|
||||
cache::client()
|
||||
->getStateEvent<mtx::events::state::PowerLevels>(childid)
|
||||
.value_or(mtx::events::StateEvent<mtx::events::state::PowerLevels>{})
|
||||
.content;
|
||||
pl.user_level(us) <
|
||||
pl.user_level(us, childCreate) <
|
||||
pl.state_level(to_string(mtx::events::EventType::SpaceParent)))
|
||||
continue;
|
||||
|
||||
|
|
@ -2041,11 +2066,15 @@ utils::removeExpiredEvents()
|
|||
if (!asus->globalExpiry && !getExpEv(roomid))
|
||||
continue;
|
||||
|
||||
auto create = cache::client()->getStateEvent<mtx::events::state::Create>(roomid).value_or(
|
||||
mtx::events::StateEvent<mtx::events::state::Create>{});
|
||||
|
||||
if (auto pl = cache::client()
|
||||
->getStateEvent<mtx::events::state::PowerLevels>(roomid)
|
||||
.value_or(mtx::events::StateEvent<mtx::events::state::PowerLevels>{})
|
||||
.content;
|
||||
pl.user_level(us) < pl.event_level(to_string(mtx::events::EventType::RoomRedaction))) {
|
||||
pl.user_level(us, create) <
|
||||
pl.event_level(to_string(mtx::events::EventType::RoomRedaction))) {
|
||||
nhlog::net()->warn("Can't react events in {}, not running expiration.", roomid);
|
||||
continue;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue