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