perf: Don't handle expensive requests for rooms we aren't in

Mostly borrowed from dendrite:

https://github.com/element-hq/dendrite/blob/a042861/federationapi/routing/routing.go#L601
This commit is contained in:
timedout
2026-01-27 03:16:49 +00:00
committed by Ellis Git
parent a047199fb4
commit c4a9f7a6d1
8 changed files with 109 additions and 7 deletions
+13 -1
View File
@@ -4,7 +4,7 @@ use std::{borrow::Borrow, time::Instant, vec};
use axum::extract::State;
use conduwuit::{
Err, Event, Result, at, debug, err, info,
Err, Event, Result, at, debug, debug_warn, err, info,
matrix::event::gen_event_id_canonical_json,
trace,
utils::stream::{BroadbandExt, IterStream, TryBroadbandExt},
@@ -36,6 +36,18 @@ async fn create_join_event(
if !services.rooms.metadata.exists(room_id).await {
return Err!(Request(NotFound("Room is unknown to this server.")));
}
if !services
.rooms
.state_cache
.server_in_room(services.globals.server_name(), room_id)
.await
{
debug_warn!(
origin = origin.as_str(),
"Refusing to serve send_join for room we aren't participating in"
);
return Err!(Request(NotFound("This server is not participating in that room.")));
}
// ACL check origin server
services