mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2025-09-12 17:33:57 +02:00
feat(hydra): Initial public commit for v12 support
# Conflicts: # src/core/info/room_version.rs # src/service/rooms/timeline/create.rs # Conflicts: # Cargo.lock # src/core/matrix/state_res/event_auth.rs
This commit is contained in:
parent
9c147b182f
commit
a7944a5e58
57 changed files with 951 additions and 386 deletions
|
@ -49,7 +49,7 @@ pub(crate) async fn ban_user_route(
|
|||
..current_member_content
|
||||
}),
|
||||
sender_user,
|
||||
&body.room_id,
|
||||
Some(&body.room_id),
|
||||
&state_lock,
|
||||
)
|
||||
.await?;
|
||||
|
|
|
@ -128,12 +128,12 @@ pub(crate) async fn invite_helper(
|
|||
.create_hash_and_sign_event(
|
||||
PduBuilder::state(user_id.to_string(), &content),
|
||||
sender_user,
|
||||
room_id,
|
||||
Some(room_id),
|
||||
&state_lock,
|
||||
)
|
||||
.await?;
|
||||
|
||||
let invite_room_state = services.rooms.state.summary_stripped(&pdu).await;
|
||||
let invite_room_state = services.rooms.state.summary_stripped(&pdu, room_id).await;
|
||||
|
||||
drop(state_lock);
|
||||
|
||||
|
@ -227,7 +227,7 @@ pub(crate) async fn invite_helper(
|
|||
.build_and_append_pdu(
|
||||
PduBuilder::state(user_id.to_string(), &content),
|
||||
sender_user,
|
||||
room_id,
|
||||
Some(room_id),
|
||||
&state_lock,
|
||||
)
|
||||
.await?;
|
||||
|
|
|
@ -18,7 +18,7 @@ use conduwuit::{
|
|||
},
|
||||
warn,
|
||||
};
|
||||
use futures::{FutureExt, StreamExt};
|
||||
use futures::{FutureExt, StreamExt, TryFutureExt};
|
||||
use ruma::{
|
||||
CanonicalJsonObject, CanonicalJsonValue, OwnedRoomId, OwnedServerName, OwnedUserId, RoomId,
|
||||
RoomVersionId, UserId,
|
||||
|
@ -553,12 +553,20 @@ 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:?}"
|
||||
);
|
||||
})
|
||||
.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) => {
|
||||
|
@ -566,9 +574,10 @@ 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
|
||||
|
@ -577,7 +586,7 @@ async fn join_room_by_id_helper_remote(
|
|||
|
||||
state.insert(shortstatekey, pdu.event_id.clone());
|
||||
}
|
||||
|
||||
debug!("Completed send_join response");
|
||||
state
|
||||
})
|
||||
.await;
|
||||
|
@ -618,6 +627,9 @@ async fn join_room_by_id_helper_remote(
|
|||
&parsed_join_pdu,
|
||||
None, // TODO: third party invite
|
||||
|k, s| state_fetch(k.clone(), s.into()),
|
||||
&state_fetch(StateEventType::RoomCreate, "".into())
|
||||
.await
|
||||
.expect("create event is missing from send_join auth"),
|
||||
)
|
||||
.await
|
||||
.map_err(|e| err!(Request(Forbidden(warn!("Auth check failed: {e:?}")))))?;
|
||||
|
@ -665,7 +677,7 @@ async fn join_room_by_id_helper_remote(
|
|||
let statehash_after_join = services
|
||||
.rooms
|
||||
.state
|
||||
.append_to_state(&parsed_join_pdu)
|
||||
.append_to_state(&parsed_join_pdu, room_id)
|
||||
.await?;
|
||||
|
||||
info!("Appending new room join event");
|
||||
|
@ -677,6 +689,7 @@ async fn join_room_by_id_helper_remote(
|
|||
join_event,
|
||||
once(parsed_join_pdu.event_id.borrow()),
|
||||
&state_lock,
|
||||
room_id,
|
||||
)
|
||||
.await?;
|
||||
|
||||
|
@ -776,7 +789,7 @@ async fn join_room_by_id_helper_local(
|
|||
.build_and_append_pdu(
|
||||
PduBuilder::state(sender_user.to_string(), &content),
|
||||
sender_user,
|
||||
room_id,
|
||||
Some(room_id),
|
||||
&state_lock,
|
||||
)
|
||||
.await
|
||||
|
|
|
@ -54,7 +54,7 @@ pub(crate) async fn kick_user_route(
|
|||
..event
|
||||
}),
|
||||
sender_user,
|
||||
&body.room_id,
|
||||
Some(&body.room_id),
|
||||
&state_lock,
|
||||
)
|
||||
.await?;
|
||||
|
|
|
@ -373,7 +373,7 @@ async fn knock_room_helper_local(
|
|||
.build_and_append_pdu(
|
||||
PduBuilder::state(sender_user.to_string(), &content),
|
||||
sender_user,
|
||||
room_id,
|
||||
Some(room_id),
|
||||
&state_lock,
|
||||
)
|
||||
.await
|
||||
|
@ -502,6 +502,7 @@ async fn knock_room_helper_local(
|
|||
knock_event,
|
||||
once(parsed_knock_pdu.event_id.borrow()),
|
||||
&state_lock,
|
||||
room_id,
|
||||
)
|
||||
.await?;
|
||||
|
||||
|
@ -672,7 +673,7 @@ async fn knock_room_helper_remote(
|
|||
let statehash_after_knock = services
|
||||
.rooms
|
||||
.state
|
||||
.append_to_state(&parsed_knock_pdu)
|
||||
.append_to_state(&parsed_knock_pdu, room_id)
|
||||
.await?;
|
||||
|
||||
info!("Updating membership locally to knock state with provided stripped state events");
|
||||
|
@ -701,6 +702,7 @@ async fn knock_room_helper_remote(
|
|||
knock_event,
|
||||
once(parsed_knock_pdu.event_id.borrow()),
|
||||
&state_lock,
|
||||
room_id,
|
||||
)
|
||||
.await?;
|
||||
|
||||
|
|
|
@ -206,7 +206,7 @@ pub async fn leave_room(
|
|||
..event
|
||||
}),
|
||||
user_id,
|
||||
room_id,
|
||||
Some(room_id),
|
||||
&state_lock,
|
||||
)
|
||||
.await?;
|
||||
|
|
|
@ -70,9 +70,10 @@ pub(crate) async fn banned_room_check(
|
|||
|
||||
if let Some(room_id) = room_id {
|
||||
if services.rooms.metadata.is_banned(room_id).await
|
||||
|| services
|
||||
.moderation
|
||||
.is_remote_server_forbidden(room_id.server_name().expect("legacy room mxid"))
|
||||
|| (room_id.server_name().is_some()
|
||||
&& services
|
||||
.moderation
|
||||
.is_remote_server_forbidden(room_id.server_name().expect("legacy room mxid")))
|
||||
{
|
||||
warn!(
|
||||
"User {user_id} who is not an admin attempted to send an invite for or \
|
||||
|
|
|
@ -47,7 +47,7 @@ pub(crate) async fn unban_user_route(
|
|||
..current_member_content
|
||||
}),
|
||||
sender_user,
|
||||
&body.room_id,
|
||||
Some(&body.room_id),
|
||||
&state_lock,
|
||||
)
|
||||
.await?;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue