1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
use std::future::ready;
use std::sync::Arc;
use autoclone::autoclone;
use axum::Router;
use axum::routing::get;
use tracing::Instrument as _;
use tracing::Span;
use super::Server;
impl Server {
/// Configures the Terrazzo Gateway HTTP server.
///
/// By default, the only available routes are
/// - status
/// - issue a new client certificate
/// - connect a WebSocket tunnel
///
/// More routes can be configured using [super::gateway_config::app_config::AppConfig].
#[autoclone]
pub(super) fn make_app(self: &Arc<Self>, span: Span) -> Router {
let server = self.clone();
let router = Router::new()
.route("/status", get(|| ready("UP")))
.route(
"/remote/certificate",
get(move |request| {
autoclone!(server, span);
server.get_certificate(request).instrument(span)
}),
)
.route(
"/remote/tunnel/{client_name}",
get(move |client_id, client_name, web_socket| {
autoclone!(server, span);
server
.tunnel(client_id, client_name, web_socket)
.instrument(span)
}),
);
self.app_config.configure_app(router)
}
}