diff --git a/src/api/server_server.rs b/src/api/server_server.rs index 8c3d36c9..ad6c8304 100644 --- a/src/api/server_server.rs +++ b/src/api/server_server.rs @@ -63,10 +63,6 @@ use crate::{ pub async fn get_server_version_route( _body: Ruma, ) -> Result { - if !services().globals.allow_federation() { - return Err(Error::bad_config("Federation is disabled.")); - } - let version = match option_env!("CONDUIT_VERSION_EXTRA") { Some(extra) => format!("{} ({})", env!("CARGO_PKG_VERSION"), extra), None => env!("CARGO_PKG_VERSION").to_owned(), @@ -90,10 +86,6 @@ pub async fn get_server_version_route( // Response type for this endpoint is Json because we need to calculate a // signature for the response pub async fn get_server_keys_route() -> Result { - if !services().globals.allow_federation() { - return Err(Error::bad_config("Federation is disabled.")); - } - let mut verify_keys: BTreeMap = BTreeMap::new(); verify_keys.insert( format!("ed25519:{}", services().globals.keypair().version()) @@ -1756,10 +1748,6 @@ pub async fn claim_keys_route(body: Ruma) -> Result) -> Result { - if !services().globals.allow_federation() { - return Err(Error::bad_config("Federation is disabled.")); - } - Ok(discover_homeserver::Response { server: match services().globals.well_known_server() { Some(server_name) => server_name.to_owned(), diff --git a/src/main.rs b/src/main.rs index 9eefca2e..08af119c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -308,7 +308,7 @@ async fn build(server: &Server) -> io::Result Router { - Router::new() +pub fn routes(config: &Config) -> Router { + let router = Router::new() .ruma_route(client_server::get_supported_versions_route) .ruma_route(client_server::get_register_available_route) .ruma_route(client_server::register_route) @@ -181,41 +181,50 @@ pub fn routes() -> Router { .ruma_route(client_server::get_relating_events_with_rel_type_route) .ruma_route(client_server::get_relating_events_route) .ruma_route(client_server::get_hierarchy_route) - .ruma_route(server_server::get_server_version_route) - .route("/_matrix/key/v2/server", get(server_server::get_server_keys_route)) - .route( - "/_matrix/key/v2/server/:key_id", - get(server_server::get_server_keys_deprecated_route), - ) - .ruma_route(server_server::get_public_rooms_route) - .ruma_route(server_server::get_public_rooms_filtered_route) - .ruma_route(server_server::send_transaction_message_route) - .ruma_route(server_server::get_event_route) - .ruma_route(server_server::get_backfill_route) - .ruma_route(server_server::get_missing_events_route) - .ruma_route(server_server::get_event_authorization_route) - .ruma_route(server_server::get_room_state_route) - .ruma_route(server_server::get_room_state_ids_route) - .ruma_route(server_server::create_join_event_template_route) - .ruma_route(server_server::create_join_event_v1_route) - .ruma_route(server_server::create_join_event_v2_route) - .ruma_route(server_server::create_invite_route) - .ruma_route(server_server::get_devices_route) - .ruma_route(server_server::get_room_information_route) - .ruma_route(server_server::get_profile_information_route) - .ruma_route(server_server::get_keys_route) - .ruma_route(server_server::claim_keys_route) - .ruma_route(server_server::get_hierarchy_route) .ruma_route(client_server::get_mutual_rooms_route) .ruma_route(client_server::well_known_support) .ruma_route(client_server::well_known_client) - .ruma_route(server_server::well_known_server) .route("/_conduwuit/server_version", get(client_server::conduwuit_server_version)) .route("/_matrix/client/r0/rooms/:room_id/initialSync", get(initial_sync)) .route("/_matrix/client/v3/rooms/:room_id/initialSync", get(initial_sync)) .route("/client/server.json", get(client_server::syncv3_client_server_json)) .route("/", get(it_works)) - .fallback(not_found) + .fallback(not_found); + + if config.allow_federation { + router + .ruma_route(server_server::get_server_version_route) + .route("/_matrix/key/v2/server", get(server_server::get_server_keys_route)) + .route( + "/_matrix/key/v2/server/:key_id", + get(server_server::get_server_keys_deprecated_route), + ) + .ruma_route(server_server::get_public_rooms_route) + .ruma_route(server_server::get_public_rooms_filtered_route) + .ruma_route(server_server::send_transaction_message_route) + .ruma_route(server_server::get_event_route) + .ruma_route(server_server::get_backfill_route) + .ruma_route(server_server::get_missing_events_route) + .ruma_route(server_server::get_event_authorization_route) + .ruma_route(server_server::get_room_state_route) + .ruma_route(server_server::get_room_state_ids_route) + .ruma_route(server_server::create_join_event_template_route) + .ruma_route(server_server::create_join_event_v1_route) + .ruma_route(server_server::create_join_event_v2_route) + .ruma_route(server_server::create_invite_route) + .ruma_route(server_server::get_devices_route) + .ruma_route(server_server::get_room_information_route) + .ruma_route(server_server::get_profile_information_route) + .ruma_route(server_server::get_keys_route) + .ruma_route(server_server::claim_keys_route) + .ruma_route(server_server::get_hierarchy_route) + .ruma_route(server_server::well_known_server) + } else { + router + .route("/_matrix/federation/*path", any(federation_disabled)) + .route("/.well-known/matrix/server", any(federation_disabled)) + .route("/_matrix/key/*path", any(federation_disabled)) + } } async fn not_found(uri: Uri) -> impl IntoResponse { @@ -234,6 +243,8 @@ async fn initial_sync(_uri: Uri) -> impl IntoResponse { async fn it_works() -> &'static str { "hewwo from conduwuit woof!" } +async fn federation_disabled() -> impl IntoResponse { Error::bad_config("Federation is disabled.") } + trait RouterExt { fn ruma_route(self, handler: H) -> Self where