chain_width to 50

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk
2025-04-22 04:42:26 +00:00
parent 9b658d86b2
commit 76509830e6
190 changed files with 3469 additions and 930 deletions

View File

@@ -58,7 +58,11 @@ fn matches_sender(&self, filter: &RoomEventFilter) -> bool {
#[implement(super::Pdu)]
fn matches_type(&self, filter: &RoomEventFilter) -> bool {
let event_type = &self.kind.to_cow_str();
if filter.not_types.iter().any(is_equal_to!(event_type)) {
if filter
.not_types
.iter()
.any(is_equal_to!(event_type))
{
return false;
}

View File

@@ -97,7 +97,11 @@ impl From<Id> for RawId {
match id.shorteventid {
| Count::Normal(shorteventid) => {
vec.extend(shorteventid.to_be_bytes());
Self::Normal(vec.as_ref().try_into().expect("RawVec into RawId::Normal"))
Self::Normal(
vec.as_ref()
.try_into()
.expect("RawVec into RawId::Normal"),
)
},
| Count::Backfilled(shorteventid) => {
vec.extend(0_u64.to_be_bytes());

View File

@@ -102,7 +102,8 @@ where
#[implement(Pdu)]
#[must_use]
pub fn get_unsigned_as_value(&self) -> JsonValue {
self.get_unsigned::<JsonValue>().unwrap_or_default()
self.get_unsigned::<JsonValue>()
.unwrap_or_default()
}
#[implement(Pdu)]

View File

@@ -104,7 +104,10 @@ pub fn auth_types_for_event(
}
if membership == MembershipState::Invite {
if let Some(Ok(t_id)) = content.third_party_invite.map(|t| t.deserialize()) {
if let Some(Ok(t_id)) = content
.third_party_invite
.map(|t| t.deserialize())
{
let key =
(StateEventType::RoomThirdPartyInvite, t_id.signed.token.into());
if !auth_types.contains(&key) {
@@ -564,9 +567,12 @@ fn valid_membership_change(
}
let power_levels_event_id = power_levels_event.as_ref().map(Event::event_id);
let sender_membership_event_id = sender_membership_event.as_ref().map(Event::event_id);
let target_user_membership_event_id =
target_user_membership_event.as_ref().map(Event::event_id);
let sender_membership_event_id = sender_membership_event
.as_ref()
.map(Event::event_id);
let target_user_membership_event_id = target_user_membership_event
.as_ref()
.map(Event::event_id);
let user_for_join_auth_is_valid = if let Some(user_for_join_auth) = user_for_join_auth {
// Is the authorised user allowed to invite users into this room
@@ -725,7 +731,9 @@ fn valid_membership_change(
allow
} else if !sender_is_joined
|| target_user_current_membership == MembershipState::Ban
&& sender_power.filter(|&p| p < &power_levels.ban).is_some()
&& sender_power
.filter(|&p| p < &power_levels.ban)
.is_some()
{
warn!(
?target_user_membership_event_id,
@@ -734,8 +742,9 @@ fn valid_membership_change(
);
false
} else {
let allow = sender_power.filter(|&p| p >= &power_levels.kick).is_some()
&& target_power < sender_power;
let allow = sender_power
.filter(|&p| p >= &power_levels.kick)
.is_some() && target_power < sender_power;
if !allow {
warn!(
?target_user_membership_event_id,
@@ -750,8 +759,9 @@ fn valid_membership_change(
warn!(?sender_membership_event_id, "Can't ban user if sender is not joined");
false
} else {
let allow = sender_power.filter(|&p| p >= &power_levels.ban).is_some()
&& target_power < sender_power;
let allow = sender_power
.filter(|&p| p >= &power_levels.ban)
.is_some() && target_power < sender_power;
if !allow {
warn!(
?target_user_membership_event_id,
@@ -829,7 +839,9 @@ fn can_send_event(event: impl Event, ple: Option<impl Event>, user_level: Int) -
return false;
}
if event.state_key().is_some_and(|k| k.starts_with('@'))
if event
.state_key()
.is_some_and(|k| k.starts_with('@'))
&& event.state_key() != Some(event.sender().as_str())
{
return false; // permission required to post in this room
@@ -1040,13 +1052,17 @@ fn get_send_level(
.and_then(|ple| {
from_json_str::<RoomPowerLevelsEventContent>(ple.content().get())
.map(|content| {
content.events.get(e_type).copied().unwrap_or_else(|| {
if state_key.is_some() {
content.state_default
} else {
content.events_default
}
})
content
.events
.get(e_type)
.copied()
.unwrap_or_else(|| {
if state_key.is_some() {
content.state_default
} else {
content.events_default
}
})
})
.ok()
})
@@ -1135,13 +1151,21 @@ mod tests {
#[test]
fn test_ban_pass() {
let _ = tracing::subscriber::set_default(
tracing_subscriber::fmt().with_test_writer().finish(),
tracing_subscriber::fmt()
.with_test_writer()
.finish(),
);
let events = INITIAL_EVENTS();
let auth_events = events
.values()
.map(|ev| (ev.event_type().with_state_key(ev.state_key().unwrap()), ev.clone()))
.map(|ev| {
(
ev.event_type()
.with_state_key(ev.state_key().unwrap()),
ev.clone(),
)
})
.collect::<StateMap<_>>();
let requester = to_pdu_event(
@@ -1180,13 +1204,21 @@ mod tests {
#[test]
fn test_join_non_creator() {
let _ = tracing::subscriber::set_default(
tracing_subscriber::fmt().with_test_writer().finish(),
tracing_subscriber::fmt()
.with_test_writer()
.finish(),
);
let events = INITIAL_EVENTS_CREATE_ROOM();
let auth_events = events
.values()
.map(|ev| (ev.event_type().with_state_key(ev.state_key().unwrap()), ev.clone()))
.map(|ev| {
(
ev.event_type()
.with_state_key(ev.state_key().unwrap()),
ev.clone(),
)
})
.collect::<StateMap<_>>();
let requester = to_pdu_event(
@@ -1225,13 +1257,21 @@ mod tests {
#[test]
fn test_join_creator() {
let _ = tracing::subscriber::set_default(
tracing_subscriber::fmt().with_test_writer().finish(),
tracing_subscriber::fmt()
.with_test_writer()
.finish(),
);
let events = INITIAL_EVENTS_CREATE_ROOM();
let auth_events = events
.values()
.map(|ev| (ev.event_type().with_state_key(ev.state_key().unwrap()), ev.clone()))
.map(|ev| {
(
ev.event_type()
.with_state_key(ev.state_key().unwrap()),
ev.clone(),
)
})
.collect::<StateMap<_>>();
let requester = to_pdu_event(
@@ -1270,13 +1310,21 @@ mod tests {
#[test]
fn test_ban_fail() {
let _ = tracing::subscriber::set_default(
tracing_subscriber::fmt().with_test_writer().finish(),
tracing_subscriber::fmt()
.with_test_writer()
.finish(),
);
let events = INITIAL_EVENTS();
let auth_events = events
.values()
.map(|ev| (ev.event_type().with_state_key(ev.state_key().unwrap()), ev.clone()))
.map(|ev| {
(
ev.event_type()
.with_state_key(ev.state_key().unwrap()),
ev.clone(),
)
})
.collect::<StateMap<_>>();
let requester = to_pdu_event(
@@ -1315,7 +1363,9 @@ mod tests {
#[test]
fn test_restricted_join_rule() {
let _ = tracing::subscriber::set_default(
tracing_subscriber::fmt().with_test_writer().finish(),
tracing_subscriber::fmt()
.with_test_writer()
.finish(),
);
let mut events = INITIAL_EVENTS();
*events.get_mut(&event_id("IJR")).unwrap() = to_pdu_event(
@@ -1338,7 +1388,13 @@ mod tests {
let auth_events = events
.values()
.map(|ev| (ev.event_type().with_state_key(ev.state_key().unwrap()), ev.clone()))
.map(|ev| {
(
ev.event_type()
.with_state_key(ev.state_key().unwrap()),
ev.clone(),
)
})
.collect::<StateMap<_>>();
let requester = to_pdu_event(
@@ -1395,7 +1451,9 @@ mod tests {
#[test]
fn test_knock() {
let _ = tracing::subscriber::set_default(
tracing_subscriber::fmt().with_test_writer().finish(),
tracing_subscriber::fmt()
.with_test_writer()
.finish(),
);
let mut events = INITIAL_EVENTS();
*events.get_mut(&event_id("IJR")).unwrap() = to_pdu_event(
@@ -1410,7 +1468,13 @@ mod tests {
let auth_events = events
.values()
.map(|ev| (ev.event_type().with_state_key(ev.state_key().unwrap()), ev.clone()))
.map(|ev| {
(
ev.event_type()
.with_state_key(ev.state_key().unwrap()),
ev.clone(),
)
})
.collect::<StateMap<_>>();
let requester = to_pdu_event(

View File

@@ -429,7 +429,10 @@ where
reverse_graph.entry(node).or_default();
for edge in edges {
reverse_graph.entry(edge).or_default().insert(node);
reverse_graph
.entry(edge)
.or_default()
.insert(node);
}
}
@@ -710,7 +713,9 @@ where
.iter()
.stream()
.broad_filter_map(async |ev_id| {
fetch_event(ev_id.clone()).await.map(|event| (event, ev_id))
fetch_event(ev_id.clone())
.await
.map(|event| (event, ev_id))
})
.broad_filter_map(|(event, ev_id)| {
get_mainline_depth(Some(event.clone()), &mainline_map, fetch_event)
@@ -782,7 +787,11 @@ async fn add_event_and_auth_chain_to_graph<E, F, Fut>(
while let Some(eid) = state.pop() {
graph.entry(eid.clone()).or_default();
let event = fetch_event(eid.clone()).await;
let auth_events = event.as_ref().map(Event::auth_events).into_iter().flatten();
let auth_events = event
.as_ref()
.map(Event::auth_events)
.into_iter()
.flatten();
// Prefer the store to event as the store filters dedups the events
for aid in auth_events {
@@ -792,7 +801,10 @@ async fn add_event_and_auth_chain_to_graph<E, F, Fut>(
}
// We just inserted this at the start of the while loop
graph.get_mut(eid.borrow()).unwrap().insert(aid.to_owned());
graph
.get_mut(eid.borrow())
.unwrap()
.insert(aid.to_owned());
}
}
}
@@ -890,13 +902,21 @@ mod tests {
use futures::future::ready;
let _ = tracing::subscriber::set_default(
tracing_subscriber::fmt().with_test_writer().finish(),
tracing_subscriber::fmt()
.with_test_writer()
.finish(),
);
let events = INITIAL_EVENTS();
let event_map = events
.values()
.map(|ev| (ev.event_type().with_state_key(ev.state_key().unwrap()), ev.clone()))
.map(|ev| {
(
ev.event_type()
.with_state_key(ev.state_key().unwrap()),
ev.clone(),
)
})
.collect::<StateMap<_>>();
let auth_chain: HashSet<OwnedEventId> = HashSet::new();
@@ -965,7 +985,9 @@ mod tests {
#[tokio::test]
async fn ban_vs_power_level() {
let _ = tracing::subscriber::set_default(
tracing_subscriber::fmt().with_test_writer().finish(),
tracing_subscriber::fmt()
.with_test_writer()
.finish(),
);
let events = &[
@@ -1015,7 +1037,9 @@ mod tests {
#[tokio::test]
async fn topic_basic() {
let _ = tracing::subscriber::set_default(
tracing_subscriber::fmt().with_test_writer().finish(),
tracing_subscriber::fmt()
.with_test_writer()
.finish(),
);
let events = &[
@@ -1080,7 +1104,9 @@ mod tests {
#[tokio::test]
async fn topic_reset() {
let _ = tracing::subscriber::set_default(
tracing_subscriber::fmt().with_test_writer().finish(),
tracing_subscriber::fmt()
.with_test_writer()
.finish(),
);
let events = &[
@@ -1130,7 +1156,9 @@ mod tests {
#[tokio::test]
async fn join_rule_evasion() {
let _ = tracing::subscriber::set_default(
tracing_subscriber::fmt().with_test_writer().finish(),
tracing_subscriber::fmt()
.with_test_writer()
.finish(),
);
let events = &[
@@ -1163,7 +1191,9 @@ mod tests {
#[tokio::test]
async fn offtopic_power_level() {
let _ = tracing::subscriber::set_default(
tracing_subscriber::fmt().with_test_writer().finish(),
tracing_subscriber::fmt()
.with_test_writer()
.finish(),
);
let events = &[
@@ -1199,7 +1229,10 @@ mod tests {
.map(|list| list.into_iter().map(event_id).collect::<Vec<_>>())
.collect::<Vec<_>>();
let expected_state_ids = vec!["PC"].into_iter().map(event_id).collect::<Vec<_>>();
let expected_state_ids = vec!["PC"]
.into_iter()
.map(event_id)
.collect::<Vec<_>>();
do_check(events, edges, expected_state_ids).await;
}
@@ -1207,7 +1240,9 @@ mod tests {
#[tokio::test]
async fn topic_setting() {
let _ = tracing::subscriber::set_default(
tracing_subscriber::fmt().with_test_writer().finish(),
tracing_subscriber::fmt()
.with_test_writer()
.finish(),
);
let events = &[
@@ -1289,7 +1324,9 @@ mod tests {
use futures::future::ready;
let _ = tracing::subscriber::set_default(
tracing_subscriber::fmt().with_test_writer().finish(),
tracing_subscriber::fmt()
.with_test_writer()
.finish(),
);
let mut store = TestStore::<PduEvent>(hashmap! {});
@@ -1332,7 +1369,9 @@ mod tests {
#[tokio::test]
async fn test_lexicographical_sort() {
let _ = tracing::subscriber::set_default(
tracing_subscriber::fmt().with_test_writer().finish(),
tracing_subscriber::fmt()
.with_test_writer()
.finish(),
);
let graph = hashmap! {
@@ -1361,7 +1400,9 @@ mod tests {
#[tokio::test]
async fn ban_with_auth_chains() {
let _ = tracing::subscriber::set_default(
tracing_subscriber::fmt().with_test_writer().finish(),
tracing_subscriber::fmt()
.with_test_writer()
.finish(),
);
let ban = BAN_STATE_SET();
@@ -1383,7 +1424,9 @@ mod tests {
use futures::future::ready;
let _ = tracing::subscriber::set_default(
tracing_subscriber::fmt().with_test_writer().finish(),
tracing_subscriber::fmt()
.with_test_writer()
.finish(),
);
let init = INITIAL_EVENTS();
let ban = BAN_STATE_SET();
@@ -1402,7 +1445,13 @@ mod tests {
inner.get(&event_id("PA")).unwrap(),
]
.iter()
.map(|ev| (ev.event_type().with_state_key(ev.state_key().unwrap()), ev.event_id.clone()))
.map(|ev| {
(
ev.event_type()
.with_state_key(ev.state_key().unwrap()),
ev.event_id.clone(),
)
})
.collect::<StateMap<_>>();
let state_set_b = [
@@ -1415,7 +1464,13 @@ mod tests {
inner.get(&event_id("PA")).unwrap(),
]
.iter()
.map(|ev| (ev.event_type().with_state_key(ev.state_key().unwrap()), ev.event_id.clone()))
.map(|ev| {
(
ev.event_type()
.with_state_key(ev.state_key().unwrap()),
ev.event_id.clone(),
)
})
.collect::<StateMap<_>>();
let ev_map = &store.0;
@@ -1479,7 +1534,10 @@ mod tests {
.map(|list| list.into_iter().map(event_id).collect::<Vec<_>>())
.collect::<Vec<_>>();
let expected_state_ids = vec!["JR"].into_iter().map(event_id).collect::<Vec<_>>();
let expected_state_ids = vec!["JR"]
.into_iter()
.map(event_id)
.collect::<Vec<_>>();
do_check(&join_rule.values().cloned().collect::<Vec<_>>(), edges, expected_state_ids)
.await;

View File

@@ -206,12 +206,16 @@ pub(crate) async fn do_check(
)
});
let key = ev.event_type().with_state_key(ev.state_key().unwrap());
let key = ev
.event_type()
.with_state_key(ev.state_key().unwrap());
expected_state.insert(key, node);
}
let start_state = state_at_event.get(event_id!("$START:foo")).unwrap();
let start_state = state_at_event
.get(event_id!("$START:foo"))
.unwrap();
let end_state = state_at_event
.get(event_id!("$END:foo"))
@@ -340,21 +344,33 @@ impl TestStore<PduEvent> {
let state_at_bob = [&create_event, &alice_mem, &join_rules, &bob_mem]
.iter()
.map(|e| {
(e.event_type().with_state_key(e.state_key().unwrap()), e.event_id().to_owned())
(
e.event_type()
.with_state_key(e.state_key().unwrap()),
e.event_id().to_owned(),
)
})
.collect::<StateMap<_>>();
let state_at_charlie = [&create_event, &alice_mem, &join_rules, &charlie_mem]
.iter()
.map(|e| {
(e.event_type().with_state_key(e.state_key().unwrap()), e.event_id().to_owned())
(
e.event_type()
.with_state_key(e.state_key().unwrap()),
e.event_id().to_owned(),
)
})
.collect::<StateMap<_>>();
let expected = [&create_event, &alice_mem, &join_rules, &bob_mem, &charlie_mem]
.iter()
.map(|e| {
(e.event_type().with_state_key(e.state_key().unwrap()), e.event_id().to_owned())
(
e.event_type()
.with_state_key(e.state_key().unwrap()),
e.event_id().to_owned(),
)
})
.collect::<StateMap<_>>();