ordinary_api/server/
console.rs1use askama::Template;
6use axum::Router;
7use axum::http::StatusCode;
8use axum::http::header::{CONTENT_SECURITY_POLICY, CONTENT_TYPE};
9use axum::routing::get;
10use ordinary_builtins::{
11 API_CLIENT_JS, API_FAVICON, API_INDEX_HTML_CSP, API_LOGIN_HTML_CSP, API_REGISTER_HTML_CSP,
12 API_STYLES_CSS, ApiIndexHtml, ApiLoginHtml, ApiRegisterHtml, V1_WASM,
13};
14use ordinary_utils::SERVER;
15use std::future::ready;
16
17pub fn setup_routes<S>(
18 domain: &str,
19 swagger: bool,
20 invite_token_link: &str,
21) -> anyhow::Result<Router<S>>
22where
23 S: Clone + Send + Sync + 'static,
24{
25 tracing::debug!("setting up index.html template");
26 let index_html_template = ApiIndexHtml {
27 domain,
28 server: SERVER,
29 swagger,
30 };
31 let index_html = index_html_template.render()?;
32
33 tracing::debug!("setting up login.html template");
34 let login_html_template = ApiLoginHtml { domain, swagger };
35 let login_html = login_html_template.render()?;
36
37 tracing::debug!("setting up register.html template");
38 let register_html_template = ApiRegisterHtml {
39 domain,
40 swagger,
41 invite_token_link,
42 };
43 let register_html = register_html_template.render()?;
44
45 let router = Router::new()
46 .route(
47 "/favicon.svg",
48 get(|| {
49 ready((
50 StatusCode::OK,
51 [(CONTENT_TYPE, "image/svg+xml")],
52 API_FAVICON,
53 ))
54 }),
55 )
56 .route(
57 "/client.wasm",
58 get(|| {
59 ready((
60 StatusCode::OK,
61 [(CONTENT_TYPE, "application/wasm")],
62 V1_WASM,
63 ))
64 }),
65 )
66 .route(
67 "/client.js",
68 get(|| {
69 ready((
70 StatusCode::OK,
71 [(CONTENT_TYPE, "text/javascript")],
72 API_CLIENT_JS,
73 ))
74 }),
75 )
76 .route(
77 "/styles.css",
78 get(|| ready((StatusCode::OK, [(CONTENT_TYPE, "text/css")], API_STYLES_CSS))),
79 )
80 .route(
81 "/",
82 get(move || {
83 ready((
84 StatusCode::OK,
85 [
86 (CONTENT_TYPE, "text/html"),
87 (CONTENT_SECURITY_POLICY, API_INDEX_HTML_CSP),
88 ],
89 index_html.clone(),
90 ))
91 }),
92 )
93 .route(
94 "/login",
95 get(move || {
96 ready((
97 StatusCode::OK,
98 [
99 (CONTENT_TYPE, "text/html"),
100 (CONTENT_SECURITY_POLICY, API_LOGIN_HTML_CSP),
101 ],
102 login_html.clone(),
103 ))
104 }),
105 )
106 .route(
107 "/register",
108 get(move || {
109 ready((
110 StatusCode::OK,
111 [
112 (CONTENT_TYPE, "text/html"),
113 (CONTENT_SECURITY_POLICY, API_REGISTER_HTML_CSP),
114 ],
115 register_html.clone(),
116 ))
117 }),
118 );
119
120 Ok(router)
121}