improvement: preparing for room version 9

This commit is contained in:
Timo Kösters 2022-01-18 16:53:25 +01:00
parent 9e29dc808f
commit d81216cad7
No known key found for this signature in database
GPG key ID: 24DA7517711A2BA4
3 changed files with 59 additions and 4 deletions

View file

@ -21,8 +21,8 @@ use futures_util::{stream::FuturesUnordered, StreamExt};
use lru_cache::LruCache; use lru_cache::LruCache;
use ruma::{ use ruma::{
events::{ events::{
push_rules::PushRulesEventContent, room::message::RoomMessageEventContent, EventType, push_rules::PushRulesEventContent, room::message::RoomMessageEventContent,
GlobalAccountDataEvent, GlobalAccountDataEvent, GlobalAccountDataEventType,
}, },
push::Ruleset, push::Ruleset,
DeviceId, EventId, RoomId, UserId, DeviceId, EventId, RoomId, UserId,
@ -968,7 +968,7 @@ fn set_emergency_access(db: &Database) -> Result<bool> {
db.account_data.update( db.account_data.update(
None, None,
&conduit_user, &conduit_user,
EventType::PushRules, GlobalAccountDataEventType::PushRules.to_string().into(),
&GlobalAccountDataEvent { &GlobalAccountDataEvent {
content: PushRulesEventContent { global: ruleset }, content: PushRulesEventContent { global: ruleset },
}, },

View file

@ -51,7 +51,7 @@ impl PduEvent {
self.unsigned = None; self.unsigned = None;
let allowed: &[&str] = match self.kind { let allowed: &[&str] = match self.kind {
RoomEventType::RoomMember => &["membership"], RoomEventType::RoomMember => &["join_authorised_via_users_server", "membership"],
RoomEventType::RoomCreate => &["creator"], RoomEventType::RoomCreate => &["creator"],
RoomEventType::RoomJoinRules => &["join_rule"], RoomEventType::RoomJoinRules => &["join_rule"],
RoomEventType::RoomPowerLevels => &[ RoomEventType::RoomPowerLevels => &[

View file

@ -42,6 +42,7 @@ use ruma::{
receipt::{ReceiptEvent, ReceiptEventContent}, receipt::{ReceiptEvent, ReceiptEventContent},
room::{ room::{
create::RoomCreateEventContent, create::RoomCreateEventContent,
join_rules::{JoinRule, RoomJoinRulesEventContent},
member::{MembershipState, RoomMemberEventContent}, member::{MembershipState, RoomMemberEventContent},
server_acl::RoomServerAclEventContent, server_acl::RoomServerAclEventContent,
}, },
@ -2590,6 +2591,33 @@ pub async fn create_join_event_template_route(
acl_check(sender_servername, &body.room_id, &db)?; acl_check(sender_servername, &body.room_id, &db)?;
// TODO: Conduit does not implement restricted join rules yet, we always reject
let join_rules_event = db
.rooms
.room_state_get(&body.room_id, &StateEventType::RoomJoinRules, "")?;
let join_rules_event_content: Option<RoomJoinRulesEventContent> = join_rules_event
.as_ref()
.map(|join_rules_event| {
serde_json::from_str(join_rules_event.content.get()).map_err(|e| {
warn!("Invalid join rules event: {}", e);
Error::bad_database("Invalid join rules event in db.")
})
})
.transpose()?;
if let Some(join_rules_event_content) = join_rules_event_content {
if matches!(
join_rules_event_content.join_rule,
JoinRule::Restricted { .. }
) {
return Err(Error::BadRequest(
ErrorKind::Unknown,
"Conduit does not support restricted rooms yet.",
));
}
}
let prev_events: Vec<_> = db let prev_events: Vec<_> = db
.rooms .rooms
.get_pdu_leaves(&body.room_id)? .get_pdu_leaves(&body.room_id)?
@ -2749,6 +2777,33 @@ async fn create_join_event(
acl_check(sender_servername, room_id, db)?; acl_check(sender_servername, room_id, db)?;
// TODO: Conduit does not implement restricted join rules yet, we always reject
let join_rules_event = db
.rooms
.room_state_get(room_id, &StateEventType::RoomJoinRules, "")?;
let join_rules_event_content: Option<RoomJoinRulesEventContent> = join_rules_event
.as_ref()
.map(|join_rules_event| {
serde_json::from_str(join_rules_event.content.get()).map_err(|e| {
warn!("Invalid join rules event: {}", e);
Error::bad_database("Invalid join rules event in db.")
})
})
.transpose()?;
if let Some(join_rules_event_content) = join_rules_event_content {
if matches!(
join_rules_event_content.join_rule,
JoinRule::Restricted { .. }
) {
return Err(Error::BadRequest(
ErrorKind::Unknown,
"Conduit does not support restricted rooms yet.",
));
}
}
// We need to return the state prior to joining, let's keep a reference to that here // We need to return the state prior to joining, let's keep a reference to that here
let shortstatehash = db let shortstatehash = db
.rooms .rooms