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.
|
||||
13. Support building nix packages without IFD
|
||||
([!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,
|
||||
room::{
|
||||
create::RoomCreateEventContent, encrypted::Relation,
|
||||
member::MembershipState, power_levels::RoomPowerLevelsEventContent,
|
||||
member::MembershipState, message::RoomMessageEventContent,
|
||||
power_levels::RoomPowerLevelsEventContent,
|
||||
redaction::RoomRedactionEventContent,
|
||||
},
|
||||
GlobalAccountDataEventType, StateEventType, TimelineEventType,
|
||||
|
|
@ -448,20 +449,21 @@ impl Service {
|
|||
#[derive(Deserialize)]
|
||||
struct ExtractMembership {
|
||||
membership: MembershipState,
|
||||
reason: Option<String>,
|
||||
}
|
||||
|
||||
// if the state_key fails
|
||||
let target_user_id = UserId::parse(state_key.clone())
|
||||
.expect("This state_key was previously validated");
|
||||
|
||||
let content = serde_json::from_str::<ExtractMembership>(
|
||||
pdu.content.get(),
|
||||
)
|
||||
.map_err(|_| {
|
||||
Error::bad_database("Invalid content in pdu.")
|
||||
})?;
|
||||
let ExtractMembership {
|
||||
membership,
|
||||
reason,
|
||||
} = serde_json::from_str(pdu.content.get()).map_err(
|
||||
|_| Error::bad_database("Invalid content in pdu."),
|
||||
)?;
|
||||
|
||||
let invite_state = match content.membership {
|
||||
let invite_state = match membership {
|
||||
MembershipState::Invite => {
|
||||
let state = services()
|
||||
.rooms
|
||||
|
|
@ -472,13 +474,36 @@ impl Service {
|
|||
_ => 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
|
||||
// is invited and immediately leaves we
|
||||
// need the DB to record the invite event for auth
|
||||
services().rooms.state_cache.update_membership(
|
||||
&pdu.room_id,
|
||||
&target_user_id,
|
||||
content.membership,
|
||||
membership,
|
||||
&pdu.sender,
|
||||
invite_state,
|
||||
true,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue