mirror of
https://gitlab.computer.surgery/matrix/grapevine.git
synced 2025-12-16 15:21:24 +01:00
50 lines
1.5 KiB
Rust
50 lines
1.5 KiB
Rust
#![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<server::Request>,
|
|
) -> Result<Ra<server::Response>, 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<client::Request>) -> Ra<client::Response> {
|
|
// 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,
|
|
}),
|
|
})
|
|
}
|