mirror of
https://gitlab.computer.surgery/matrix/grapevine.git
synced 2025-12-17 07:41:23 +01:00
feat: report local users getting banned
This commit is contained in:
parent
14afa1357e
commit
f03b6cde29
2 changed files with 36 additions and 9 deletions
|
|
@ -202,3 +202,5 @@ This will be the first release of Grapevine since it was forked from Conduit
|
||||||
the logs.
|
the logs.
|
||||||
13. Support building nix packages without IFD
|
13. Support building nix packages without IFD
|
||||||
([!73](https://gitlab.computer.surgery/matrix/grapevine-fork/-/merge_requests/73))
|
([!73](https://gitlab.computer.surgery/matrix/grapevine-fork/-/merge_requests/73))
|
||||||
|
14. Report local users getting banned in the server logs and admin room.
|
||||||
|
([!65](https://gitlab.computer.surgery/matrix/grapevine-fork/-/merge_requests/65))
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,8 @@ use ruma::{
|
||||||
push_rules::PushRulesEvent,
|
push_rules::PushRulesEvent,
|
||||||
room::{
|
room::{
|
||||||
create::RoomCreateEventContent, encrypted::Relation,
|
create::RoomCreateEventContent, encrypted::Relation,
|
||||||
member::MembershipState, power_levels::RoomPowerLevelsEventContent,
|
member::MembershipState, message::RoomMessageEventContent,
|
||||||
|
power_levels::RoomPowerLevelsEventContent,
|
||||||
redaction::RoomRedactionEventContent,
|
redaction::RoomRedactionEventContent,
|
||||||
},
|
},
|
||||||
GlobalAccountDataEventType, StateEventType, TimelineEventType,
|
GlobalAccountDataEventType, StateEventType, TimelineEventType,
|
||||||
|
|
@ -448,20 +449,21 @@ impl Service {
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
struct ExtractMembership {
|
struct ExtractMembership {
|
||||||
membership: MembershipState,
|
membership: MembershipState,
|
||||||
|
reason: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
// if the state_key fails
|
// if the state_key fails
|
||||||
let target_user_id = UserId::parse(state_key.clone())
|
let target_user_id = UserId::parse(state_key.clone())
|
||||||
.expect("This state_key was previously validated");
|
.expect("This state_key was previously validated");
|
||||||
|
|
||||||
let content = serde_json::from_str::<ExtractMembership>(
|
let ExtractMembership {
|
||||||
pdu.content.get(),
|
membership,
|
||||||
)
|
reason,
|
||||||
.map_err(|_| {
|
} = serde_json::from_str(pdu.content.get()).map_err(
|
||||||
Error::bad_database("Invalid content in pdu.")
|
|_| Error::bad_database("Invalid content in pdu."),
|
||||||
})?;
|
)?;
|
||||||
|
|
||||||
let invite_state = match content.membership {
|
let invite_state = match membership {
|
||||||
MembershipState::Invite => {
|
MembershipState::Invite => {
|
||||||
let state = services()
|
let state = services()
|
||||||
.rooms
|
.rooms
|
||||||
|
|
@ -472,13 +474,36 @@ impl Service {
|
||||||
_ => None,
|
_ => None,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if membership == MembershipState::Ban {
|
||||||
|
let (room, user) = (&pdu.room_id, &target_user_id);
|
||||||
|
|
||||||
|
info!(
|
||||||
|
%user,
|
||||||
|
%room,
|
||||||
|
reason,
|
||||||
|
"User has been banned from room"
|
||||||
|
);
|
||||||
|
|
||||||
|
let reason = match reason.filter(|s| !s.is_empty()) {
|
||||||
|
Some(s) => format!(": {s}"),
|
||||||
|
None => String::new(),
|
||||||
|
};
|
||||||
|
|
||||||
|
services().admin.send_message(
|
||||||
|
RoomMessageEventContent::notice_plain(format!(
|
||||||
|
"User {user} has been banned from room \
|
||||||
|
{room}{reason}",
|
||||||
|
)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// Update our membership info, we do this here incase a user
|
// Update our membership info, we do this here incase a user
|
||||||
// is invited and immediately leaves we
|
// is invited and immediately leaves we
|
||||||
// need the DB to record the invite event for auth
|
// need the DB to record the invite event for auth
|
||||||
services().rooms.state_cache.update_membership(
|
services().rooms.state_cache.update_membership(
|
||||||
&pdu.room_id,
|
&pdu.room_id,
|
||||||
&target_user_id,
|
&target_user_id,
|
||||||
content.membership,
|
membership,
|
||||||
&pdu.sender,
|
&pdu.sender,
|
||||||
invite_state,
|
invite_state,
|
||||||
true,
|
true,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue