mirror of
https://gitlab.com/famedly/conduit.git
synced 2024-11-02 18:48:53 +01:00
fix: fix kick and ban events over federation
Fix the scenario where a MembershipState change event was not sent to the server of a user kicked/banned from a room on a Conduit instance if there were not any other users from that server in the room.
This commit is contained in:
parent
0066f20bdd
commit
1712e63e06
1 changed files with 15 additions and 3 deletions
|
@ -1957,12 +1957,24 @@ impl Rooms {
|
||||||
// where events in the current room state do not exist
|
// where events in the current room state do not exist
|
||||||
self.set_room_state(room_id, statehashid)?;
|
self.set_room_state(room_id, statehashid)?;
|
||||||
|
|
||||||
let servers = self
|
let mut servers: HashSet<Box<ServerName>> = self
|
||||||
.room_servers(room_id)
|
.room_servers(room_id)
|
||||||
.filter_map(|r| r.ok())
|
.filter_map(|r| r.ok())
|
||||||
.filter(|server| &**server != db.globals.server_name());
|
.filter(|server| &**server != db.globals.server_name())
|
||||||
|
.collect();
|
||||||
|
|
||||||
db.sending.send_pdu(servers, &pdu_id)?;
|
// In case we are kicking or banning a user, we need to inform their server of the change
|
||||||
|
if pdu.kind == EventType::RoomMember {
|
||||||
|
if let Some(state_key_uid) = &pdu
|
||||||
|
.state_key
|
||||||
|
.as_ref()
|
||||||
|
.and_then(|state_key| UserId::parse(state_key.as_str()).ok())
|
||||||
|
{
|
||||||
|
servers.insert(Box::from(state_key_uid.server_name()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
db.sending.send_pdu(servers.into_iter(), &pdu_id)?;
|
||||||
|
|
||||||
for appservice in db.appservice.all()? {
|
for appservice in db.appservice.all()? {
|
||||||
if self.appservice_in_room(room_id, &appservice, db)? {
|
if self.appservice_in_room(room_id, &appservice, db)? {
|
||||||
|
|
Loading…
Reference in a new issue