tuwunel_api/client/admin/federation/
destination.rs1use 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
8pub(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}