tuwunel_api/client/rendezvous/msc4388/
get.rs1use axum::extract::State;
2use http::HeaderMap;
3use ruma::api::client::rendezvous::get_rendezvous_session::unstable::{Request, Response};
4use tuwunel_core::Err;
5use tuwunel_service::rendezvous::Get;
6
7use super::{Result, data_to_string, ensure_available, ensure_safe_get};
8use crate::{ClientIp, Ruma};
9
10#[tracing::instrument(level = "debug", skip_all)]
11pub(crate) async fn get_msc4388_route(
12 State(services): State<crate::State>,
13 ClientIp(client): ClientIp,
14 headers: HeaderMap,
15 body: Ruma<Request>,
16) -> Result<Response> {
17 ensure_available(&services, client)?;
18 ensure_safe_get(&headers)?;
19
20 match services.rendezvous.get(&body.id, None) {
21 | Get::NotFound =>
22 Err!(Request(NotFound("Rendezvous session not found"))).map_err(Into::into),
23 | Get::NotModified(_) =>
24 Err!(Request(Unknown("Unconditional rendezvous read was not modified")))
25 .map_err(Into::into),
26 | Get::Data { data, meta } => Ok(Response {
27 data: data_to_string(&data)?,
28 sequence_token: meta.sequence_token().to_owned(),
29 expires_in: meta.expires_in(),
30 }),
31 }
32}