style: Compress should_rescind_invite

This commit is contained in:
timedout
2026-02-15 16:11:19 +00:00
committed by Jade Ellis
parent e2961390ee
commit 81b984b2cc
@@ -35,29 +35,23 @@ async fn should_rescind_invite(
) )
.map_err(|e| err!("invalid PDU: {e}"))?; .map_err(|e| err!("invalid PDU: {e}"))?;
if pdu_event.room_id().is_none_or(|r| r != room_id) { if pdu_event.room_id().is_none_or(|r| r != room_id)
|| pdu_event.sender() != sender
|| pdu_event.event_type() != &TimelineEventType::RoomMember
|| pdu_event.state_key().is_none_or(|v| v == sender.as_str())
{
return Ok(None); return Ok(None);
} }
if pdu_event.sender() != sender {
return Ok(None); let target_user_id = UserId::parse(pdu_event.state_key().unwrap())?;
} if pdu_event
if pdu_event.event_type() != &TimelineEventType::RoomMember { .get_content::<RoomMemberEventContent>()?
return Ok(None); // Not a membership event .membership
} != MembershipState::Leave
if pdu_event.state_key().is_none() { {
return Ok(None);
} else if pdu_event.state_key().unwrap() == sender.as_str() {
return Ok(None); // Can't rescind an invite to yourself
}
let target_user_id = match pdu_event.state_key() {
| None => return Err!(Request(InvalidParam("PDU is missing state_key"))),
| Some(sk) => UserId::parse(sk)
.map_err(|e| err!("invalid state_key for m.room.member event: {e}"))?,
};
let membership_content = pdu_event.get_content::<RoomMemberEventContent>()?;
if membership_content.membership != MembershipState::Leave {
return Ok(None); // Not a leave event return Ok(None); // Not a leave event
} }
// Does the target user have a pending invite? // Does the target user have a pending invite?
let Ok(pending_invite_state) = services let Ok(pending_invite_state) = services
.state_cache .state_cache
@@ -67,30 +61,22 @@ async fn should_rescind_invite(
return Ok(None); // No pending invite, so nothing to rescind return Ok(None); // No pending invite, so nothing to rescind
}; };
for event in pending_invite_state { for event in pending_invite_state {
let Some(evt_type) = event.get_field::<String>("type")? else { if event
continue; .get_field::<String>("type")?
}; .is_none_or(|t| t != "m.room.member")
if evt_type != "m.room.member" { || event
.get_field::<OwnedUserId>("state_key")?
.is_none_or(|s| s != *target_user_id)
|| event
.get_field::<OwnedUserId>("sender")?
.is_none_or(|s| s != *sender)
|| event
.get_field::<RoomMemberEventContent>("content")?
.is_none_or(|c| c.membership != MembershipState::Invite)
{
continue; continue;
} }
let Some(state_key) = event.get_field::<OwnedUserId>("state_key")? else { return Ok(Some(pdu_event)); // Found a pending invite, so this is a rescind
continue;
};
if state_key != target_user_id {
continue;
}
let Some(evt_sender) = event.get_field::<OwnedUserId>("sender")? else {
continue;
};
if sender != evt_sender {
continue;
}
let Some(content) = event.get_field::<RoomMemberEventContent>("content")? else {
continue;
};
if content.membership == MembershipState::Invite {
return Ok(Some(pdu_event)); // Found a pending invite, so this is a rescind
}
} }
Ok(None) Ok(None)