diff --git a/.typos.toml b/.typos.toml index 41c81085..63c4670d 100644 --- a/.typos.toml +++ b/.typos.toml @@ -1,5 +1,19 @@ [files] -extend-exclude = ["*.csr"] +extend-exclude = ["*.csr", "*.lock", "pnpm-lock.yaml"] + +[default] + +extend-ignore-re = [ + "(?Rm)^.*(#|//|)$", # Ignore a line by making it trail with a `spellchecker:disable-line` comment + "^[0-9a-f]{7,}$", # Commit hashes + + # some heuristics for base64 strings + "[A-Za-z0-9+=]{72,}", + "([A-Za-z0-9+=]|\\\\\\s\\*){72,}", + "[0-9+][A-Za-z0-9+]{30,}[a-z0-9+]", + "\\$[A-Z0-9+][A-Za-z0-9+]{6,}[a-z0-9+]", + "\\b[a-z0-9+/=][A-Za-z0-9+/=]{7,}[a-z0-9+/=][A-Z]\\b", +] [default.extend-words] "allocatedp" = "allocatedp" diff --git a/src/service/rooms/event_handler/call_policyserv.rs b/src/service/rooms/event_handler/call_policyserv.rs index 0592186a..96e3f7cc 100644 --- a/src/service/rooms/event_handler/call_policyserv.rs +++ b/src/service/rooms/event_handler/call_policyserv.rs @@ -11,6 +11,10 @@ use ruma::{ #[implement(super::Service)] #[tracing::instrument(skip_all, level = "debug")] pub async fn policyserv_check(&self, pdu: &PduEvent, room_id: &RoomId) -> Result { + if *pdu.event_type() == StateEventType::RoomPolicy.into() { + debug!("Skipping spam check for policy server meta-event in room {room_id}"); + return Ok(()); + } let Ok(policyserver) = self .services .state_accessor @@ -28,6 +32,14 @@ pub async fn policyserv_check(&self, pdu: &PduEvent, room_id: &RoomId) -> Result return Ok(()); }, }; + if via.is_empty() { + debug!("Policy server is empty for room {room_id}, skipping spam check"); + return Ok(()); + } + if !self.services.state_cache.server_in_room(via, room_id).await { + debug!("Policy server {via} is not in the room {room_id}, skipping spam check"); + return Ok(()); + } let outgoing = self .services .sending diff --git a/src/service/rooms/event_handler/mod.rs b/src/service/rooms/event_handler/mod.rs index 5ed25c6e..4e948e95 100644 --- a/src/service/rooms/event_handler/mod.rs +++ b/src/service/rooms/event_handler/mod.rs @@ -43,6 +43,7 @@ struct Services { server_keys: Dep, short: Dep, state: Dep, + state_cache: Dep, state_accessor: Dep, state_compressor: Dep, timeline: Dep, @@ -68,6 +69,7 @@ impl crate::Service for Service { pdu_metadata: args.depend::("rooms::pdu_metadata"), short: args.depend::("rooms::short"), state: args.depend::("rooms::state"), + state_cache: args.depend::("rooms::state_cache"), state_accessor: args .depend::("rooms::state_accessor"), state_compressor: args diff --git a/src/service/rooms/event_handler/upgrade_outlier_pdu.rs b/src/service/rooms/event_handler/upgrade_outlier_pdu.rs index 39e46630..e8e22fe9 100644 --- a/src/service/rooms/event_handler/upgrade_outlier_pdu.rs +++ b/src/service/rooms/event_handler/upgrade_outlier_pdu.rs @@ -55,7 +55,7 @@ where // backwards extremities doing all the checks in this list starting at 1. // These are not timeline events. - debug!("Resolving state at event"); + debug!("Resolving state at event {}", incoming_pdu.event_id); let mut state_at_incoming_event = if incoming_pdu.prev_events().count() == 1 { self.state_at_incoming_degree_one(&incoming_pdu).await? } else {