#![warn(missing_docs, clippy::missing_docs_in_private_items)] //! Handle requests for `/.well-known/matrix/...` files use http::StatusCode; use ruma::api::{ client::discovery::discover_homeserver as client, federation::discovery::discover_homeserver as server, }; use crate::{Ar, Ra, services}; /// Handler for `/.well-known/matrix/server` pub(crate) async fn server( _: Ar, ) -> Result, StatusCode> { let Some(authority) = services().globals.config.server_discovery.server.authority.clone() else { return Err(StatusCode::NOT_FOUND); }; if authority == services().globals.config.server_name { // Delegation isn't needed in this case return Err(StatusCode::NOT_FOUND); } Ok(Ra(server::Response::new(authority))) } /// Handler for `/.well-known/matrix/client` pub(crate) async fn client(_: Ar) -> Ra { // I wish ruma used an actual URL type instead of `String` let base_url = services().globals.config.server_discovery.client.base_url.to_string(); Ra(client::Response { homeserver: client::HomeserverInfo::new(base_url.clone()), identity_server: None, sliding_sync_proxy: services() .globals .config .server_discovery .client .advertise_sliding_sync .then_some(client::SlidingSyncProxyInfo { url: base_url, }), }) }