Fix default-allowed clippy lints
This commit is contained in:
parent
509283d947
commit
56bf45c023
@ -55,9 +55,9 @@ fn resolution_shallow_auth_chain(c: &mut Criterion) {
|
|||||||
let (state_at_bob, state_at_charlie, _) = store.set_up();
|
let (state_at_bob, state_at_charlie, _) = store.set_up();
|
||||||
|
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
let mut ev_map: state_res::EventMap<Arc<event::StateEvent>> = store.0.clone();
|
let mut ev_map: state_res::EventMap<Arc<StateEvent>> = store.0.clone();
|
||||||
let state_sets = vec![state_at_bob.clone(), state_at_charlie.clone()];
|
let state_sets = vec![state_at_bob.clone(), state_at_charlie.clone()];
|
||||||
let _ = match StateResolution::resolve::<event::StateEvent>(
|
let _ = match StateResolution::resolve::<StateEvent>(
|
||||||
&room_id(),
|
&room_id(),
|
||||||
&RoomVersionId::Version2,
|
&RoomVersionId::Version2,
|
||||||
&state_sets,
|
&state_sets,
|
||||||
@ -115,7 +115,7 @@ fn resolve_deeper_event_set(c: &mut Criterion) {
|
|||||||
|
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
let state_sets = vec![state_set_a.clone(), state_set_b.clone()];
|
let state_sets = vec![state_set_a.clone(), state_set_b.clone()];
|
||||||
let _ = match StateResolution::resolve::<event::StateEvent>(
|
let _ = match StateResolution::resolve::<StateEvent>(
|
||||||
&room_id(),
|
&room_id(),
|
||||||
&RoomVersionId::Version2,
|
&RoomVersionId::Version2,
|
||||||
&state_sets,
|
&state_sets,
|
||||||
@ -216,7 +216,7 @@ impl<E: Event> TestStore<E> {
|
|||||||
Ok(chains
|
Ok(chains
|
||||||
.iter()
|
.iter()
|
||||||
.flatten()
|
.flatten()
|
||||||
.filter(|id| !common.contains(&id))
|
.filter(|id| !common.contains(id))
|
||||||
.cloned()
|
.cloned()
|
||||||
.collect::<BTreeSet<_>>()
|
.collect::<BTreeSet<_>>()
|
||||||
.into_iter()
|
.into_iter()
|
||||||
@ -227,7 +227,7 @@ impl<E: Event> TestStore<E> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TestStore<event::StateEvent> {
|
impl TestStore<StateEvent> {
|
||||||
pub fn set_up(&mut self) -> (StateMap<EventId>, StateMap<EventId>, StateMap<EventId>) {
|
pub fn set_up(&mut self) -> (StateMap<EventId>, StateMap<EventId>, StateMap<EventId>) {
|
||||||
let create_event = to_pdu_event::<EventId>(
|
let create_event = to_pdu_event::<EventId>(
|
||||||
"CREATE",
|
"CREATE",
|
||||||
@ -420,7 +420,7 @@ where
|
|||||||
|
|
||||||
// all graphs start with these input events
|
// all graphs start with these input events
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
fn INITIAL_EVENTS() -> BTreeMap<EventId, Arc<event::StateEvent>> {
|
fn INITIAL_EVENTS() -> BTreeMap<EventId, Arc<StateEvent>> {
|
||||||
vec![
|
vec![
|
||||||
to_pdu_event::<EventId>(
|
to_pdu_event::<EventId>(
|
||||||
"CREATE",
|
"CREATE",
|
||||||
@ -502,7 +502,7 @@ fn INITIAL_EVENTS() -> BTreeMap<EventId, Arc<event::StateEvent>> {
|
|||||||
|
|
||||||
// all graphs start with these input events
|
// all graphs start with these input events
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
fn BAN_STATE_SET() -> BTreeMap<EventId, Arc<event::StateEvent>> {
|
fn BAN_STATE_SET() -> BTreeMap<EventId, Arc<StateEvent>> {
|
||||||
vec![
|
vec![
|
||||||
to_pdu_event(
|
to_pdu_event(
|
||||||
"PA",
|
"PA",
|
||||||
@ -765,7 +765,7 @@ pub mod event {
|
|||||||
|
|
||||||
pub fn signatures(
|
pub fn signatures(
|
||||||
&self,
|
&self,
|
||||||
) -> BTreeMap<Box<ServerName>, BTreeMap<ruma::ServerSigningKeyId, String>> {
|
) -> BTreeMap<Box<ServerName>, BTreeMap<ServerSigningKeyId, String>> {
|
||||||
match &self.rest {
|
match &self.rest {
|
||||||
Pdu::RoomV1Pdu(_) => maplit::btreemap! {},
|
Pdu::RoomV1Pdu(_) => maplit::btreemap! {},
|
||||||
Pdu::RoomV3Pdu(ev) => ev.signatures.clone(),
|
Pdu::RoomV3Pdu(ev) => ev.signatures.clone(),
|
||||||
|
@ -220,7 +220,7 @@ pub fn auth_check<E: Event>(
|
|||||||
incoming_event.content(),
|
incoming_event.content(),
|
||||||
prev_event,
|
prev_event,
|
||||||
current_third_party_invite,
|
current_third_party_invite,
|
||||||
&auth_events,
|
auth_events,
|
||||||
)? {
|
)? {
|
||||||
return Ok(false);
|
return Ok(false);
|
||||||
}
|
}
|
||||||
@ -230,7 +230,7 @@ pub fn auth_check<E: Event>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If the sender's current membership state is not join, reject
|
// If the sender's current membership state is not join, reject
|
||||||
match check_event_sender_in_room(&incoming_event.sender(), &auth_events) {
|
match check_event_sender_in_room(incoming_event.sender(), auth_events) {
|
||||||
Some(true) => {} // sender in room
|
Some(true) => {} // sender in room
|
||||||
Some(false) => {
|
Some(false) => {
|
||||||
log::warn!("sender's membership is not join");
|
log::warn!("sender's membership is not join");
|
||||||
@ -245,7 +245,7 @@ pub fn auth_check<E: Event>(
|
|||||||
// Allow if and only if sender's current power level is greater than
|
// Allow if and only if sender's current power level is greater than
|
||||||
// or equal to the invite level
|
// or equal to the invite level
|
||||||
if incoming_event.kind() == EventType::RoomThirdPartyInvite
|
if incoming_event.kind() == EventType::RoomThirdPartyInvite
|
||||||
&& !can_send_invite(incoming_event, &auth_events)?
|
&& !can_send_invite(incoming_event, auth_events)?
|
||||||
{
|
{
|
||||||
log::warn!("sender's cannot send invites in this room");
|
log::warn!("sender's cannot send invites in this room");
|
||||||
return Ok(false);
|
return Ok(false);
|
||||||
@ -253,7 +253,7 @@ pub fn auth_check<E: Event>(
|
|||||||
|
|
||||||
// If the event type's required power level is greater than the sender's power level, reject
|
// If the event type's required power level is greater than the sender's power level, reject
|
||||||
// If the event has a state_key that starts with an @ and does not match the sender, reject.
|
// If the event has a state_key that starts with an @ and does not match the sender, reject.
|
||||||
if !can_send_event(&incoming_event, &auth_events) {
|
if !can_send_event(incoming_event, auth_events) {
|
||||||
log::warn!("user cannot send event");
|
log::warn!("user cannot send event");
|
||||||
return Ok(false);
|
return Ok(false);
|
||||||
}
|
}
|
||||||
@ -262,7 +262,7 @@ pub fn auth_check<E: Event>(
|
|||||||
log::info!("starting m.room.power_levels check");
|
log::info!("starting m.room.power_levels check");
|
||||||
|
|
||||||
if let Some(required_pwr_lvl) =
|
if let Some(required_pwr_lvl) =
|
||||||
check_power_levels(room_version, &incoming_event, &auth_events)
|
check_power_levels(room_version, incoming_event, auth_events)
|
||||||
{
|
{
|
||||||
if !required_pwr_lvl {
|
if !required_pwr_lvl {
|
||||||
log::warn!("power level was not allowed");
|
log::warn!("power level was not allowed");
|
||||||
@ -283,7 +283,7 @@ pub fn auth_check<E: Event>(
|
|||||||
|
|
||||||
if room_version.extra_redaction_checks
|
if room_version.extra_redaction_checks
|
||||||
&& incoming_event.kind() == EventType::RoomRedaction
|
&& incoming_event.kind() == EventType::RoomRedaction
|
||||||
&& !check_redaction(room_version, incoming_event, &auth_events)?
|
&& !check_redaction(room_version, incoming_event, auth_events)?
|
||||||
{
|
{
|
||||||
return Ok(false);
|
return Ok(false);
|
||||||
}
|
}
|
||||||
@ -405,7 +405,7 @@ pub fn valid_membership_change<E: Event>(
|
|||||||
|| join_rules == JoinRule::Public;
|
|| join_rules == JoinRule::Public;
|
||||||
|
|
||||||
if !allow {
|
if !allow {
|
||||||
warn!("Can't join if join rules is not public and user is not invited/joined")
|
warn!("Can't join if join rules is not public and user is not invited/joined");
|
||||||
}
|
}
|
||||||
allow
|
allow
|
||||||
}
|
}
|
||||||
@ -508,7 +508,7 @@ pub fn can_send_event<E: Event>(event: &Arc<E>, auth_events: &StateMap<Arc<E>>)
|
|||||||
let ple = auth_events.get(&(EventType::RoomPowerLevels, "".into()));
|
let ple = auth_events.get(&(EventType::RoomPowerLevels, "".into()));
|
||||||
|
|
||||||
let event_type_power_level = get_send_level(&event.kind(), event.state_key(), ple);
|
let event_type_power_level = get_send_level(&event.kind(), event.state_key(), ple);
|
||||||
let user_level = get_user_power_level(&event.sender(), auth_events);
|
let user_level = get_user_power_level(event.sender(), auth_events);
|
||||||
|
|
||||||
log::debug!(
|
log::debug!(
|
||||||
"{} ev_type {} usr {}",
|
"{} ev_type {} usr {}",
|
||||||
@ -561,7 +561,7 @@ pub fn check_power_levels<E: Event>(
|
|||||||
// validation of users is done in Ruma, synapse for loops validating user_ids and integers here
|
// validation of users is done in Ruma, synapse for loops validating user_ids and integers here
|
||||||
log::info!("validation of power event finished");
|
log::info!("validation of power event finished");
|
||||||
|
|
||||||
let user_level = get_user_power_level(&power_event.sender(), auth_events);
|
let user_level = get_user_power_level(power_event.sender(), auth_events);
|
||||||
|
|
||||||
let mut user_levels_to_check = btreeset![];
|
let mut user_levels_to_check = btreeset![];
|
||||||
let old_list = ¤t_content.users;
|
let old_list = ¤t_content.users;
|
||||||
@ -690,7 +690,7 @@ pub fn check_redaction<E: Event>(
|
|||||||
redaction_event: &Arc<E>,
|
redaction_event: &Arc<E>,
|
||||||
auth_events: &StateMap<Arc<E>>,
|
auth_events: &StateMap<Arc<E>>,
|
||||||
) -> Result<bool> {
|
) -> Result<bool> {
|
||||||
let user_level = get_user_power_level(&redaction_event.sender(), auth_events);
|
let user_level = get_user_power_level(redaction_event.sender(), auth_events);
|
||||||
let redact_level = get_named_level(auth_events, "redact", 50);
|
let redact_level = get_named_level(auth_events, "redact", 50);
|
||||||
|
|
||||||
if user_level >= redact_level {
|
if user_level >= redact_level {
|
||||||
@ -806,7 +806,7 @@ pub fn get_send_level<E: Event>(
|
|||||||
.and_then(|ple| {
|
.and_then(|ple| {
|
||||||
serde_json::from_value::<PowerLevelsEventContent>(ple.content())
|
serde_json::from_value::<PowerLevelsEventContent>(ple.content())
|
||||||
.map(|content| {
|
.map(|content| {
|
||||||
content.events.get(&e_type).cloned().unwrap_or_else(|| {
|
content.events.get(e_type).copied().unwrap_or_else(|| {
|
||||||
if state_key.is_some() {
|
if state_key.is_some() {
|
||||||
content.state_default
|
content.state_default
|
||||||
} else {
|
} else {
|
||||||
@ -822,7 +822,7 @@ pub fn get_send_level<E: Event>(
|
|||||||
|
|
||||||
/// Check user can send invite.
|
/// Check user can send invite.
|
||||||
pub fn can_send_invite<E: Event>(event: &Arc<E>, auth_events: &StateMap<Arc<E>>) -> Result<bool> {
|
pub fn can_send_invite<E: Event>(event: &Arc<E>, auth_events: &StateMap<Arc<E>>) -> Result<bool> {
|
||||||
let user_level = get_user_power_level(&event.sender(), auth_events);
|
let user_level = get_user_power_level(event.sender(), auth_events);
|
||||||
let key = (EventType::RoomPowerLevels, "".into());
|
let key = (EventType::RoomPowerLevels, "".into());
|
||||||
let invite_level = auth_events
|
let invite_level = auth_events
|
||||||
.get(&key)
|
.get(&key)
|
||||||
|
31
src/lib.rs
31
src/lib.rs
@ -59,7 +59,7 @@ impl StateResolution {
|
|||||||
log::info!("State resolution starting");
|
log::info!("State resolution starting");
|
||||||
|
|
||||||
// split non-conflicting and conflicting state
|
// split non-conflicting and conflicting state
|
||||||
let (clean, conflicting) = StateResolution::separate(&state_sets);
|
let (clean, conflicting) = StateResolution::separate(state_sets);
|
||||||
|
|
||||||
log::info!("non conflicting {:?}", clean.len());
|
log::info!("non conflicting {:?}", clean.len());
|
||||||
|
|
||||||
@ -96,7 +96,7 @@ impl StateResolution {
|
|||||||
// get only the control events with a state_key: "" or ban/kick event (sender != state_key)
|
// get only the control events with a state_key: "" or ban/kick event (sender != state_key)
|
||||||
let control_events = all_conflicted
|
let control_events = all_conflicted
|
||||||
.iter()
|
.iter()
|
||||||
.filter(|id| is_power_event_id(id, &event_map))
|
.filter(|id| is_power_event_id(id, event_map))
|
||||||
.cloned()
|
.cloned()
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
@ -281,7 +281,7 @@ impl StateResolution {
|
|||||||
// this is used in the `key_fn` passed to the lexico_topo_sort fn
|
// this is used in the `key_fn` passed to the lexico_topo_sort fn
|
||||||
let mut event_to_pl = BTreeMap::new();
|
let mut event_to_pl = BTreeMap::new();
|
||||||
for event_id in graph.keys() {
|
for event_id in graph.keys() {
|
||||||
let pl = StateResolution::get_power_level_for_sender(room_id, &event_id, event_map);
|
let pl = StateResolution::get_power_level_for_sender(room_id, event_id, event_map);
|
||||||
log::info!("{} power level {}", event_id.to_string(), pl);
|
log::info!("{} power level {}", event_id.to_string(), pl);
|
||||||
|
|
||||||
event_to_pl.insert(event_id.clone(), pl);
|
event_to_pl.insert(event_id.clone(), pl);
|
||||||
@ -408,12 +408,11 @@ impl StateResolution {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(content) = pl
|
if let Some(content) =
|
||||||
.map(|pl| serde_json::from_value::<PowerLevelsEventContent>(pl.content()).ok())
|
pl.and_then(|pl| serde_json::from_value::<PowerLevelsEventContent>(pl.content()).ok())
|
||||||
.flatten()
|
|
||||||
{
|
{
|
||||||
if let Ok(ev) = event {
|
if let Ok(ev) = event {
|
||||||
if let Some(user) = content.users.get(&ev.sender()) {
|
if let Some(user) = content.users.get(ev.sender()) {
|
||||||
log::debug!("found {} at power_level {}", ev.sender().as_str(), user);
|
log::debug!("found {} at power_level {}", ev.sender().as_str(), user);
|
||||||
return (*user).into();
|
return (*user).into();
|
||||||
}
|
}
|
||||||
@ -461,7 +460,7 @@ impl StateResolution {
|
|||||||
|
|
||||||
let mut auth_events = BTreeMap::new();
|
let mut auth_events = BTreeMap::new();
|
||||||
for aid in &event.auth_events() {
|
for aid in &event.auth_events() {
|
||||||
if let Ok(ev) = StateResolution::get_or_load_event(room_id, &aid, event_map) {
|
if let Ok(ev) = StateResolution::get_or_load_event(room_id, aid, event_map) {
|
||||||
// TODO synapse check "rejected_reason", I'm guessing this is redacted_because in ruma ??
|
// TODO synapse check "rejected_reason", I'm guessing this is redacted_because in ruma ??
|
||||||
auth_events.insert(
|
auth_events.insert(
|
||||||
(
|
(
|
||||||
@ -477,9 +476,9 @@ impl StateResolution {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for key in event_auth::auth_types_for_event(
|
for key in auth_types_for_event(
|
||||||
&event.kind(),
|
&event.kind(),
|
||||||
&event.sender(),
|
event.sender(),
|
||||||
Some(state_key.clone()),
|
Some(state_key.clone()),
|
||||||
event.content(),
|
event.content(),
|
||||||
) {
|
) {
|
||||||
@ -510,7 +509,7 @@ impl StateResolution {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if event_auth::auth_check(
|
if auth_check(
|
||||||
room_version,
|
room_version,
|
||||||
&event,
|
&event,
|
||||||
most_recent_prev_event,
|
most_recent_prev_event,
|
||||||
@ -563,7 +562,7 @@ impl StateResolution {
|
|||||||
let auth_events = &event.auth_events();
|
let auth_events = &event.auth_events();
|
||||||
pl = None;
|
pl = None;
|
||||||
for aid in auth_events {
|
for aid in auth_events {
|
||||||
let ev = StateResolution::get_or_load_event(room_id, &aid, event_map).unwrap();
|
let ev = StateResolution::get_or_load_event(room_id, aid, event_map).unwrap();
|
||||||
if is_type_and_key(&ev, EventType::RoomPowerLevels, "") {
|
if is_type_and_key(&ev, EventType::RoomPowerLevels, "") {
|
||||||
pl = Some(aid.clone());
|
pl = Some(aid.clone());
|
||||||
break;
|
break;
|
||||||
@ -625,7 +624,7 @@ impl StateResolution {
|
|||||||
while let Some(sort_ev) = event {
|
while let Some(sort_ev) = event {
|
||||||
log::debug!("mainline event_id {}", sort_ev.event_id().to_string());
|
log::debug!("mainline event_id {}", sort_ev.event_id().to_string());
|
||||||
let id = &sort_ev.event_id();
|
let id = &sort_ev.event_id();
|
||||||
if let Some(depth) = mainline_map.get(&id) {
|
if let Some(depth) = mainline_map.get(id) {
|
||||||
return Ok(*depth);
|
return Ok(*depth);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -634,7 +633,7 @@ impl StateResolution {
|
|||||||
event = None;
|
event = None;
|
||||||
for aid in auth_events {
|
for aid in auth_events {
|
||||||
// dbg!(&aid);
|
// dbg!(&aid);
|
||||||
let aev = StateResolution::get_or_load_event(room_id, &aid, event_map)?;
|
let aev = StateResolution::get_or_load_event(room_id, aid, event_map)?;
|
||||||
if is_type_and_key(&aev, EventType::RoomPowerLevels, "") {
|
if is_type_and_key(&aev, EventType::RoomPowerLevels, "") {
|
||||||
event = Some(aev);
|
event = Some(aev);
|
||||||
break;
|
break;
|
||||||
@ -663,8 +662,8 @@ impl StateResolution {
|
|||||||
.unwrap()
|
.unwrap()
|
||||||
.auth_events()
|
.auth_events()
|
||||||
{
|
{
|
||||||
if auth_diff.contains(&aid) {
|
if auth_diff.contains(aid) {
|
||||||
if !graph.contains_key(&aid) {
|
if !graph.contains_key(aid) {
|
||||||
state.push(aid.clone());
|
state.push(aid.clone());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,13 +1,9 @@
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
#[rustfmt::skip] // this deletes the comments for some reason yay!
|
use state_res::{event_auth::valid_membership_change, StateMap};
|
||||||
use state_res::{
|
// use state_res::event_auth:::{
|
||||||
event_auth::{
|
// auth_check, auth_types_for_event, can_federate, check_power_levels, check_redaction,
|
||||||
// auth_check, auth_types_for_event, can_federate, check_power_levels, check_redaction,
|
// };
|
||||||
valid_membership_change,
|
|
||||||
},
|
|
||||||
StateMap
|
|
||||||
};
|
|
||||||
|
|
||||||
mod utils;
|
mod utils;
|
||||||
use utils::{alice, charlie, event_id, member_content_ban, to_pdu_event, INITIAL_EVENTS};
|
use utils::{alice, charlie, event_id, member_content_ban, to_pdu_event, INITIAL_EVENTS};
|
||||||
|
@ -28,7 +28,7 @@ fn test_event_sort() {
|
|||||||
|
|
||||||
let power_events = event_map
|
let power_events = event_map
|
||||||
.values()
|
.values()
|
||||||
.filter(|pdu| is_power_event(&pdu))
|
.filter(|pdu| is_power_event(pdu))
|
||||||
.map(|pdu| pdu.event_id().clone())
|
.map(|pdu| pdu.event_id().clone())
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ fn test_event_sort() {
|
|||||||
&room_id(),
|
&room_id(),
|
||||||
&power_events,
|
&power_events,
|
||||||
&mut events,
|
&mut events,
|
||||||
&auth_chain,
|
auth_chain,
|
||||||
);
|
);
|
||||||
|
|
||||||
// This is a TODO in conduit
|
// This is a TODO in conduit
|
||||||
|
Loading…
x
Reference in New Issue
Block a user