Skip to main content

tuwunel_api/client/rendezvous/msc4388/
get.rs

1use 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}