tuwunel_api/client/rendezvous/
get.rs1use axum::{
2 body::Body,
3 extract::{Path, State},
4 response::Response,
5};
6use http::{HeaderMap, StatusCode, header::IF_NONE_MATCH};
7use tuwunel_core::{Err, Result};
8use tuwunel_service::rendezvous::Get;
9
10use super::{TEXT_PLAIN, ensure_enabled, session_response};
11
12#[tracing::instrument(level = "debug", skip_all)]
13pub(crate) async fn get_rendezvous_route(
14 State(services): State<crate::State>,
15 Path(id): Path<String>,
16 headers: HeaderMap,
17) -> Result<Response> {
18 ensure_enabled(&services)?;
19
20 let if_none_match = headers
21 .get(IF_NONE_MATCH)
22 .and_then(|value| value.to_str().ok());
23
24 match services.rendezvous.get(&id, if_none_match) {
25 | Get::NotFound => Err!(Request(NotFound("Rendezvous session not found"))),
26 | Get::NotModified(meta) =>
27 session_response(StatusCode::NOT_MODIFIED, Body::empty(), None, &meta),
28 | Get::Data { data, meta } =>
29 session_response(StatusCode::OK, Body::from(data), Some(TEXT_PLAIN), &meta),
30 }
31}