use clap::Subcommand; use ruma::{events::room::message::RoomMessageEventContent, RoomId, ServerName}; use self::federation_commands::{disable_room, enable_room, fetch_support_well_known, incoming_federeation}; use crate::Result; pub(crate) mod federation_commands; #[cfg_attr(test, derive(Debug))] #[derive(Subcommand)] pub(crate) enum FederationCommand { /// - List all rooms we are currently handling an incoming pdu from IncomingFederation, /// - Disables incoming federation handling for a room. DisableRoom { room_id: Box, }, /// - Enables incoming federation handling for a room again. EnableRoom { room_id: Box, }, /// - Fetch `/.well-known/matrix/support` from the specified server /// /// Despite the name, this is not a federation endpoint and does not go /// through the federation / server resolution process as per-spec this is /// supposed to be served at the server_name. /// /// Respecting homeservers put this file here for listing administration, /// moderation, and security inquiries. This command provides a way to /// easily fetch that information. FetchSupportWellKnown { server_name: Box, }, } pub(crate) async fn process(command: FederationCommand, body: Vec<&str>) -> Result { Ok(match command { FederationCommand::DisableRoom { room_id, } => disable_room(body, room_id).await?, FederationCommand::EnableRoom { room_id, } => enable_room(body, room_id).await?, FederationCommand::IncomingFederation => incoming_federeation(body).await?, FederationCommand::FetchSupportWellKnown { server_name, } => fetch_support_well_known(body, server_name).await?, }) }