mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2026-05-26 20:49:55 +00:00
fix(hydra): Tackle most open code review comments
This commit is contained in:
@@ -553,20 +553,16 @@ async fn join_room_by_id_helper_remote(
|
||||
.iter()
|
||||
.stream()
|
||||
.then(|pdu| {
|
||||
debug!(?pdu, "Validating send_join response room_state event");
|
||||
services
|
||||
.server_keys
|
||||
.validate_and_add_event_id_no_fetch(pdu, &room_version_id)
|
||||
.inspect_err(|e| {
|
||||
debug_warn!(
|
||||
"Could not validate send_join response room_state event: {e:?}"
|
||||
);
|
||||
debug_warn!("Could not validate send_join response room_state event: {e:?}");
|
||||
})
|
||||
.inspect(|_| debug!("Completed validating send_join response room_state event"))
|
||||
})
|
||||
.ready_filter_map(Result::ok)
|
||||
.fold(HashMap::new(), |mut state, (event_id, value)| async move {
|
||||
debug!(?event_id, "Processing send_join response room_state event");
|
||||
let pdu = match PduEvent::from_id_val(&event_id, value.clone()) {
|
||||
| Ok(pdu) => pdu,
|
||||
| Err(e) => {
|
||||
@@ -574,10 +570,8 @@ async fn join_room_by_id_helper_remote(
|
||||
return state;
|
||||
},
|
||||
};
|
||||
debug!(event_id = ?event_id.clone(), "Adding PDU outlier for send_join response room_state event");
|
||||
services.rooms.outlier.add_pdu_outlier(&event_id, &value);
|
||||
if let Some(state_key) = &pdu.state_key {
|
||||
debug!(?state_key, "Creating shortstatekey for state event in send_join response");
|
||||
let shortstatekey = services
|
||||
.rooms
|
||||
.short
|
||||
@@ -586,7 +580,6 @@ async fn join_room_by_id_helper_remote(
|
||||
|
||||
state.insert(shortstatekey, pdu.event_id.clone());
|
||||
}
|
||||
debug!("Completed send_join response");
|
||||
state
|
||||
})
|
||||
.await;
|
||||
|
||||
@@ -69,12 +69,11 @@ pub(crate) async fn banned_room_check(
|
||||
}
|
||||
|
||||
if let Some(room_id) = room_id {
|
||||
if services.rooms.metadata.is_banned(room_id).await
|
||||
|| (room_id.server_name().is_some()
|
||||
&& services
|
||||
.moderation
|
||||
.is_remote_server_forbidden(room_id.server_name().expect("legacy room mxid")))
|
||||
{
|
||||
let room_banned = services.rooms.metadata.is_banned(room_id).await;
|
||||
let server_banned = room_id.server_name().is_some_and(|server_name| {
|
||||
services.moderation.is_remote_server_forbidden(server_name)
|
||||
});
|
||||
if room_banned || server_banned {
|
||||
warn!(
|
||||
"User {user_id} who is not an admin attempted to send an invite for or \
|
||||
attempted to join a banned room or banned room server name: {room_id}"
|
||||
@@ -107,7 +106,6 @@ pub(crate) async fn banned_room_check(
|
||||
.boxed()
|
||||
.await?;
|
||||
}
|
||||
|
||||
return Err!(Request(Forbidden("This room is banned on this homeserver.")));
|
||||
}
|
||||
} else if let Some(server_name) = server_name {
|
||||
|
||||
@@ -4,7 +4,7 @@ use axum::extract::State;
|
||||
use conduwuit::{
|
||||
Err, Result, RoomVersion, debug, debug_info, debug_warn, err, info,
|
||||
matrix::{StateKey, pdu::PduBuilder},
|
||||
warn,
|
||||
trace, warn,
|
||||
};
|
||||
use conduwuit_service::{Services, appservice::RegistrationInfo};
|
||||
use futures::FutureExt;
|
||||
@@ -82,12 +82,13 @@ pub(crate) async fn create_room_route(
|
||||
};
|
||||
let room_features = RoomVersion::new(&room_version)?;
|
||||
|
||||
let room_id: Option<OwnedRoomId> = match room_features.room_ids_as_hashes {
|
||||
| true => None,
|
||||
| false => match &body.room_id {
|
||||
let room_id: Option<OwnedRoomId> = if !room_features.room_ids_as_hashes {
|
||||
match &body.room_id {
|
||||
| Some(custom_room_id) => Some(custom_room_id_check(&services, custom_room_id)?),
|
||||
| None => Some(RoomId::new(services.globals.server_name())),
|
||||
},
|
||||
}
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
// check if room ID doesn't already exist instead of erroring on auth check
|
||||
@@ -179,7 +180,7 @@ pub(crate) async fn create_room_route(
|
||||
| Some(room_id) => services.rooms.state.mutex.lock(&room_id).await,
|
||||
| None => {
|
||||
let temp_room_id = RoomId::new(services.globals.server_name());
|
||||
debug_info!("Locking temporary room state mutex for {temp_room_id}");
|
||||
trace!("Locking temporary room state mutex for {temp_room_id}");
|
||||
services.rooms.state.mutex.lock(&temp_room_id).await
|
||||
},
|
||||
};
|
||||
@@ -202,12 +203,12 @@ pub(crate) async fn create_room_route(
|
||||
)
|
||||
.boxed()
|
||||
.await?;
|
||||
debug!("Created room create event with ID {}", create_event_id);
|
||||
trace!("Created room create event with ID {}", create_event_id);
|
||||
let room_id = match room_id {
|
||||
| Some(room_id) => room_id,
|
||||
| None => {
|
||||
let as_room_id = create_event_id.as_str().replace('$', "!");
|
||||
debug_info!("Creating room with v12 room ID {as_room_id}");
|
||||
trace!("Creating room with v12 room ID {as_room_id}");
|
||||
RoomId::parse(&as_room_id)?.to_owned()
|
||||
},
|
||||
};
|
||||
@@ -260,21 +261,26 @@ pub(crate) async fn create_room_route(
|
||||
}
|
||||
|
||||
let mut creators: Vec<OwnedUserId> = vec![sender_user.to_owned()];
|
||||
if let Some(additional_creators) = create_content.get("additional_creators") {
|
||||
if let Some(additional_creators) = additional_creators.as_array() {
|
||||
for creator in additional_creators {
|
||||
if let Some(creator) = creator.as_str() {
|
||||
if let Ok(creator) = OwnedUserId::parse(creator) {
|
||||
creators.push(creator.clone());
|
||||
users.insert(creator.clone(), int!(100));
|
||||
// Do we care about additional_creators?
|
||||
if room_features.explicitly_privilege_room_creators {
|
||||
// Have they been specified?
|
||||
if let Some(additional_creators) = create_content.get("additional_creators") {
|
||||
// Are they a real array?
|
||||
if let Some(additional_creators) = additional_creators.as_array() {
|
||||
// Iterate through them
|
||||
for creator in additional_creators {
|
||||
// Are they a string?
|
||||
if let Some(creator) = creator.as_str() {
|
||||
// Do they parse into a real user ID?
|
||||
if let Ok(creator) = OwnedUserId::parse(creator) {
|
||||
// Add them to the power levels and creators
|
||||
creators.push(creator.clone());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if !(RoomVersion::new(&room_version)?).explicitly_privilege_room_creators {
|
||||
creators.clear();
|
||||
}
|
||||
|
||||
let power_levels_content = default_power_levels_content(
|
||||
body.power_level_content_override.as_ref(),
|
||||
|
||||
@@ -138,7 +138,6 @@ async fn handle(
|
||||
pdus: impl Stream<Item = Pdu> + Send,
|
||||
edus: impl Stream<Item = Edu> + Send,
|
||||
) -> Result<ResolvedMap> {
|
||||
// TODO(hydra): Does having no room ID break this?
|
||||
// group pdus by room
|
||||
let pdus = pdus
|
||||
.collect()
|
||||
@@ -187,7 +186,6 @@ async fn handle_room(
|
||||
.lock(&room_id)
|
||||
.await;
|
||||
|
||||
// TODO(hydra): We might be missing a room ID
|
||||
let room_id = &room_id;
|
||||
pdus.try_stream()
|
||||
.and_then(|(_, event_id, value)| async move {
|
||||
|
||||
Reference in New Issue
Block a user