Skip to main content

tuwunel_api/client/admin/federation/
destination.rs

1use axum::extract::State;
2use synapse_admin_api::federation::destination::v1::{Request, Response};
3use tuwunel_core::{Err, Result};
4
5use super::destination_from_backoff;
6use crate::{Ruma, client::admin::require_admin};
7
8/// # `GET /_synapse/admin/v1/federation/destinations/{destination}`
9pub(crate) async fn admin_destination_details_route(
10	State(services): State<crate::State>,
11	body: Ruma<Request>,
12) -> Result<Response> {
13	require_admin(&services, body.sender_user()).await?;
14
15	if services.globals.server_is_ours(&body.destination) {
16		return Err!(Request(NotFound("Unknown destination")));
17	}
18
19	let backoff = services
20		.federation
21		.peer_backoff(&body.destination)
22		.await;
23
24	if backoff.is_none()
25		&& !services
26			.state_cache
27			.server_shares_room(&body.destination)
28			.await
29	{
30		return Err!(Request(NotFound("Unknown destination")));
31	}
32
33	let destination = destination_from_backoff(body.body.destination, backoff);
34
35	Ok(Response { destination })
36}