More warnings
This commit is contained in:
parent
e8ebe07609
commit
2ef7730ebb
@ -1,5 +1,6 @@
|
|||||||
use std::{convert::TryFrom, sync::Arc};
|
use std::{convert::TryFrom, sync::Arc};
|
||||||
|
|
||||||
|
use log::warn;
|
||||||
use maplit::btreeset;
|
use maplit::btreeset;
|
||||||
use ruma::{
|
use ruma::{
|
||||||
events::{
|
events::{
|
||||||
@ -87,7 +88,11 @@ pub fn auth_check<E: Event>(
|
|||||||
auth_events: &StateMap<Arc<E>>,
|
auth_events: &StateMap<Arc<E>>,
|
||||||
current_third_party_invite: Option<Arc<E>>,
|
current_third_party_invite: Option<Arc<E>>,
|
||||||
) -> Result<bool> {
|
) -> Result<bool> {
|
||||||
log::info!("auth_check beginning for {}", incoming_event.kind());
|
log::info!(
|
||||||
|
"auth_check beginning for {} ({})",
|
||||||
|
incoming_event.event_id(),
|
||||||
|
incoming_event.kind()
|
||||||
|
);
|
||||||
|
|
||||||
// [synapse] check that all the events are in the same room as `incoming_event`
|
// [synapse] check that all the events are in the same room as `incoming_event`
|
||||||
|
|
||||||
@ -390,59 +395,93 @@ pub fn valid_membership_change<E: Event>(
|
|||||||
|
|
||||||
Ok(if target_membership == MembershipState::Join {
|
Ok(if target_membership == MembershipState::Join {
|
||||||
if user_sender != &target_user_id {
|
if user_sender != &target_user_id {
|
||||||
|
warn!("Can't make other user join");
|
||||||
false
|
false
|
||||||
} else if let MembershipState::Ban = current_membership {
|
} else if let MembershipState::Ban = current_membership {
|
||||||
|
warn!("Banned user can't join");
|
||||||
false
|
false
|
||||||
} else {
|
} else {
|
||||||
join_rules == JoinRule::Invite
|
let allow = join_rules == JoinRule::Invite
|
||||||
&& (current_membership == MembershipState::Join
|
&& (current_membership == MembershipState::Join
|
||||||
|| current_membership == MembershipState::Invite)
|
|| current_membership == MembershipState::Invite)
|
||||||
|| join_rules == JoinRule::Public
|
|| join_rules == JoinRule::Public;
|
||||||
|
|
||||||
|
if !allow {
|
||||||
|
warn!("Can't join if join rules is not public and user is not invited/joined")
|
||||||
|
}
|
||||||
|
allow
|
||||||
}
|
}
|
||||||
} else if target_membership == MembershipState::Invite {
|
} else if target_membership == MembershipState::Invite {
|
||||||
// If content has third_party_invite key
|
// If content has third_party_invite key
|
||||||
if let Some(Ok(tp_id)) = third_party_invite {
|
if let Some(Ok(tp_id)) = third_party_invite {
|
||||||
if current_membership == MembershipState::Ban {
|
if current_membership == MembershipState::Ban {
|
||||||
|
warn!("Can't invite banned user");
|
||||||
false
|
false
|
||||||
} else {
|
} else {
|
||||||
verify_third_party_invite(
|
let allow = verify_third_party_invite(
|
||||||
Some(state_key),
|
Some(state_key),
|
||||||
user_sender,
|
user_sender,
|
||||||
&tp_id,
|
&tp_id,
|
||||||
current_third_party_invite,
|
current_third_party_invite,
|
||||||
)
|
);
|
||||||
|
if !allow {
|
||||||
|
warn!("Third party invite invalid");
|
||||||
|
}
|
||||||
|
allow
|
||||||
}
|
}
|
||||||
} else if sender_membership != MembershipState::Join
|
} else if sender_membership != MembershipState::Join
|
||||||
|| current_membership == MembershipState::Join
|
|| current_membership == MembershipState::Join
|
||||||
|| current_membership == MembershipState::Ban
|
|| current_membership == MembershipState::Ban
|
||||||
{
|
{
|
||||||
|
warn!(
|
||||||
|
"Can't invite user if sender not joined or the user is currently joined or banned"
|
||||||
|
);
|
||||||
false
|
false
|
||||||
} else {
|
} else {
|
||||||
sender_power
|
let allow = sender_power
|
||||||
.filter(|&p| p >= &power_levels.invite)
|
.filter(|&p| p >= &power_levels.invite)
|
||||||
.is_some()
|
.is_some();
|
||||||
|
if !allow {
|
||||||
|
warn!("User does not have enough power to invite");
|
||||||
|
}
|
||||||
|
allow
|
||||||
}
|
}
|
||||||
} else if target_membership == MembershipState::Leave {
|
} else if target_membership == MembershipState::Leave {
|
||||||
if user_sender == &target_user_id {
|
if user_sender == &target_user_id {
|
||||||
current_membership == MembershipState::Join
|
let allow = current_membership == MembershipState::Join
|
||||||
|| current_membership == MembershipState::Invite
|
|| current_membership == MembershipState::Invite;
|
||||||
|
if !allow {
|
||||||
|
warn!("Can't leave if not invited or joined");
|
||||||
|
}
|
||||||
|
allow
|
||||||
} else if sender_membership != MembershipState::Join
|
} else if sender_membership != MembershipState::Join
|
||||||
|| current_membership == MembershipState::Ban
|
|| 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!("Can't kick if sender not joined or user is already banned");
|
||||||
false
|
false
|
||||||
} else {
|
} else {
|
||||||
sender_power.filter(|&p| p >= &power_levels.kick).is_some()
|
let allow = sender_power.filter(|&p| p >= &power_levels.kick).is_some()
|
||||||
&& target_power < sender_power
|
&& target_power < sender_power;
|
||||||
|
if !allow {
|
||||||
|
warn!("User does not have enough power to kick");
|
||||||
|
}
|
||||||
|
allow
|
||||||
}
|
}
|
||||||
} else if target_membership == MembershipState::Ban {
|
} else if target_membership == MembershipState::Ban {
|
||||||
if sender_membership != MembershipState::Join {
|
if sender_membership != MembershipState::Join {
|
||||||
|
warn!("Can't ban user if sender is not joined");
|
||||||
false
|
false
|
||||||
} else {
|
} else {
|
||||||
sender_power.filter(|&p| p >= &power_levels.ban).is_some()
|
let allow = sender_power.filter(|&p| p >= &power_levels.ban).is_some()
|
||||||
&& target_power < sender_power
|
&& target_power < sender_power;
|
||||||
|
if !allow {
|
||||||
|
warn!("User does not have enough power to ban");
|
||||||
|
}
|
||||||
|
allow
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
warn!("Unknown membership transition");
|
||||||
false
|
false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user