Implement filtering invites if sender is ignored by receiver
This commit is contained in:
parent
100e3d6d6d
commit
f2fab27d81
2 changed files with 61 additions and 0 deletions
|
@ -487,6 +487,7 @@ pub fn deactivate_route(
|
||||||
redacts: None,
|
redacts: None,
|
||||||
},
|
},
|
||||||
&db.globals,
|
&db.globals,
|
||||||
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -695,6 +696,7 @@ pub fn set_displayname_route(
|
||||||
redacts: None,
|
redacts: None,
|
||||||
},
|
},
|
||||||
&db.globals,
|
&db.globals,
|
||||||
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
// Presence update
|
// Presence update
|
||||||
|
@ -797,6 +799,7 @@ pub fn set_avatar_url_route(
|
||||||
redacts: None,
|
redacts: None,
|
||||||
},
|
},
|
||||||
&db.globals,
|
&db.globals,
|
||||||
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
// Presence update
|
// Presence update
|
||||||
|
@ -1318,6 +1321,7 @@ pub fn create_room_route(
|
||||||
redacts: None,
|
redacts: None,
|
||||||
},
|
},
|
||||||
&db.globals,
|
&db.globals,
|
||||||
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
// 2. Let the room creator join
|
// 2. Let the room creator join
|
||||||
|
@ -1339,6 +1343,7 @@ pub fn create_room_route(
|
||||||
redacts: None,
|
redacts: None,
|
||||||
},
|
},
|
||||||
&db.globals,
|
&db.globals,
|
||||||
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
// Figure out preset. We need it for power levels and preset specific events
|
// Figure out preset. We need it for power levels and preset specific events
|
||||||
|
@ -1387,6 +1392,7 @@ pub fn create_room_route(
|
||||||
redacts: None,
|
redacts: None,
|
||||||
},
|
},
|
||||||
&db.globals,
|
&db.globals,
|
||||||
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
// 4. Events set by preset
|
// 4. Events set by preset
|
||||||
|
@ -1412,6 +1418,7 @@ pub fn create_room_route(
|
||||||
redacts: None,
|
redacts: None,
|
||||||
},
|
},
|
||||||
&db.globals,
|
&db.globals,
|
||||||
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
// 4.2 History Visibility
|
// 4.2 History Visibility
|
||||||
|
@ -1429,6 +1436,7 @@ pub fn create_room_route(
|
||||||
redacts: None,
|
redacts: None,
|
||||||
},
|
},
|
||||||
&db.globals,
|
&db.globals,
|
||||||
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
// 4.3 Guest Access
|
// 4.3 Guest Access
|
||||||
|
@ -1454,6 +1462,7 @@ pub fn create_room_route(
|
||||||
redacts: None,
|
redacts: None,
|
||||||
},
|
},
|
||||||
&db.globals,
|
&db.globals,
|
||||||
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
// 5. Events listed in initial_state
|
// 5. Events listed in initial_state
|
||||||
|
@ -1481,6 +1490,7 @@ pub fn create_room_route(
|
||||||
redacts: None,
|
redacts: None,
|
||||||
},
|
},
|
||||||
&db.globals,
|
&db.globals,
|
||||||
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1502,6 +1512,7 @@ pub fn create_room_route(
|
||||||
redacts: None,
|
redacts: None,
|
||||||
},
|
},
|
||||||
&db.globals,
|
&db.globals,
|
||||||
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1520,6 +1531,7 @@ pub fn create_room_route(
|
||||||
redacts: None,
|
redacts: None,
|
||||||
},
|
},
|
||||||
&db.globals,
|
&db.globals,
|
||||||
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1543,6 +1555,7 @@ pub fn create_room_route(
|
||||||
redacts: None,
|
redacts: None,
|
||||||
},
|
},
|
||||||
&db.globals,
|
&db.globals,
|
||||||
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1602,6 +1615,7 @@ pub fn redact_event_route(
|
||||||
redacts: Some(body.event_id.clone()),
|
redacts: Some(body.event_id.clone()),
|
||||||
},
|
},
|
||||||
&db.globals,
|
&db.globals,
|
||||||
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
Ok(redact_event::Response { event_id }.into())
|
Ok(redact_event::Response { event_id }.into())
|
||||||
|
@ -1696,6 +1710,7 @@ pub fn join_room_by_id_route(
|
||||||
redacts: None,
|
redacts: None,
|
||||||
},
|
},
|
||||||
&db.globals,
|
&db.globals,
|
||||||
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
Ok(join_room_by_id::Response {
|
Ok(join_room_by_id::Response {
|
||||||
|
@ -1775,6 +1790,7 @@ pub fn leave_room_route(
|
||||||
redacts: None,
|
redacts: None,
|
||||||
},
|
},
|
||||||
&db.globals,
|
&db.globals,
|
||||||
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
Ok(leave_room::Response.into())
|
Ok(leave_room::Response.into())
|
||||||
|
@ -1821,6 +1837,7 @@ pub fn kick_user_route(
|
||||||
redacts: None,
|
redacts: None,
|
||||||
},
|
},
|
||||||
&db.globals,
|
&db.globals,
|
||||||
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
Ok(kick_user::Response.into())
|
Ok(kick_user::Response.into())
|
||||||
|
@ -1913,6 +1930,7 @@ pub fn ban_user_route(
|
||||||
redacts: None,
|
redacts: None,
|
||||||
},
|
},
|
||||||
&db.globals,
|
&db.globals,
|
||||||
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
Ok(ban_user::Response.into())
|
Ok(ban_user::Response.into())
|
||||||
|
@ -1958,6 +1976,7 @@ pub fn unban_user_route(
|
||||||
redacts: None,
|
redacts: None,
|
||||||
},
|
},
|
||||||
&db.globals,
|
&db.globals,
|
||||||
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
Ok(unban_user::Response.into())
|
Ok(unban_user::Response.into())
|
||||||
|
@ -2007,6 +2026,7 @@ pub fn invite_user_route(
|
||||||
redacts: None,
|
redacts: None,
|
||||||
},
|
},
|
||||||
&db.globals,
|
&db.globals,
|
||||||
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
Ok(invite_user::Response.into())
|
Ok(invite_user::Response.into())
|
||||||
|
@ -2396,6 +2416,7 @@ pub fn create_message_event_route(
|
||||||
redacts: None,
|
redacts: None,
|
||||||
},
|
},
|
||||||
&db.globals,
|
&db.globals,
|
||||||
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
Ok(create_message_event::Response { event_id }.into())
|
Ok(create_message_event::Response { event_id }.into())
|
||||||
|
@ -2461,6 +2482,7 @@ pub fn create_state_event_for_key_route(
|
||||||
redacts: None,
|
redacts: None,
|
||||||
},
|
},
|
||||||
&db.globals,
|
&db.globals,
|
||||||
|
&db.account_data,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
Ok(create_state_event_for_key::Response { event_id }.into())
|
Ok(create_state_event_for_key::Response { event_id }.into())
|
||||||
|
|
|
@ -7,6 +7,7 @@ use log::error;
|
||||||
use ruma::{
|
use ruma::{
|
||||||
api::client::error::ErrorKind,
|
api::client::error::ErrorKind,
|
||||||
events::{
|
events::{
|
||||||
|
ignored_user_list,
|
||||||
room::{
|
room::{
|
||||||
join_rules, member,
|
join_rules, member,
|
||||||
power_levels::{self, PowerLevelsEventContent},
|
power_levels::{self, PowerLevelsEventContent},
|
||||||
|
@ -255,6 +256,7 @@ impl Rooms {
|
||||||
&self,
|
&self,
|
||||||
pdu_builder: PduBuilder,
|
pdu_builder: PduBuilder,
|
||||||
globals: &super::globals::Globals,
|
globals: &super::globals::Globals,
|
||||||
|
account_data: &super::account_data::AccountData,
|
||||||
) -> Result<EventId> {
|
) -> Result<EventId> {
|
||||||
let PduBuilder {
|
let PduBuilder {
|
||||||
room_id,
|
room_id,
|
||||||
|
@ -411,6 +413,43 @@ impl Rooms {
|
||||||
|| join_rules == join_rules::JoinRule::Public
|
|| join_rules == join_rules::JoinRule::Public
|
||||||
}
|
}
|
||||||
} else if target_membership == member::MembershipState::Invite {
|
} else if target_membership == member::MembershipState::Invite {
|
||||||
|
// we want to know if the sender is ignored by the receiver
|
||||||
|
let is_ignored = if let Ok(Some(ignored)) =
|
||||||
|
account_data.get::<ignored_user_list::IgnoredUserListEventContent>(
|
||||||
|
None, // we cannot use the provided room_id it's the invite room
|
||||||
|
&target_user_id, // receiver
|
||||||
|
EventType::IgnoredUserList,
|
||||||
|
) {
|
||||||
|
ignored.ignored_users.contains(&sender)
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
};
|
||||||
|
|
||||||
|
if is_ignored {
|
||||||
|
let mut event =
|
||||||
|
serde_json::from_value::<Raw<member::MemberEventContent>>(content)
|
||||||
|
.expect("from_value::<Raw<..>> cannot fail")
|
||||||
|
.deserialize()
|
||||||
|
.map_err(|_| {
|
||||||
|
Error::bad_database("Invalid member event in database.")
|
||||||
|
})?;
|
||||||
|
|
||||||
|
event.membership = member::MembershipState::Leave;
|
||||||
|
|
||||||
|
return self.append_pdu(
|
||||||
|
room_id,
|
||||||
|
target_user_id.clone(),
|
||||||
|
EventType::RoomMember,
|
||||||
|
serde_json::to_value(event)
|
||||||
|
.expect("event is valid, we just created it"),
|
||||||
|
None,
|
||||||
|
Some(target_user_id.to_string()),
|
||||||
|
None,
|
||||||
|
globals,
|
||||||
|
account_data,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(third_party_invite_json) = content.get("third_party_invite") {
|
if let Some(third_party_invite_json) = content.get("third_party_invite") {
|
||||||
if current_membership == member::MembershipState::Ban {
|
if current_membership == member::MembershipState::Ban {
|
||||||
false
|
false
|
||||||
|
|
Loading…
Add table
Reference in a new issue