use askama::Template;
use axum::Router;
use axum::http::StatusCode;
use axum::http::header::{CONTENT_SECURITY_POLICY, CONTENT_TYPE};
use axum::routing::get;
use ordinary_assets::{
API_CLIENT_JS, API_INDEX_HTML_CSP, API_LOGIN_HTML_CSP, API_REGISTER_HTML_CSP, API_STYLES_CSS,
ApiIndexHtml, ApiLoginHtml, ApiRegisterHtml, V1_WASM,
};
use ordinary_utils::SERVER;
pub fn setup_routes<S>(
domain: &str,
swagger: bool,
invite_token_link: &str,
) -> anyhow::Result<Router<S>>
where
S: Clone + Send + Sync + 'static,
{
tracing::debug!("setting up index.html template");
let index_html_template = ApiIndexHtml {
domain,
server: SERVER,
swagger,
};
let index_html = index_html_template.render()?;
tracing::debug!("setting up login.html template");
let login_html_template = ApiLoginHtml { domain, swagger };
let login_html = login_html_template.render()?;
tracing::debug!("setting up register.html template");
let register_html_template = ApiRegisterHtml {
domain,
swagger,
invite_token_link,
};
let register_html = register_html_template.render()?;
let router = Router::new()
.route(
"/client.wasm",
get(|| async move {
(
StatusCode::OK,
[(CONTENT_TYPE, "application/wasm")],
V1_WASM,
)
}),
)
.route(
"/client.js",
get(|| async move {
(
StatusCode::OK,
[(CONTENT_TYPE, "text/javascript")],
API_CLIENT_JS,
)
}),
)
.route(
"/styles.css",
get(|| async move { (StatusCode::OK, [(CONTENT_TYPE, "text/css")], API_STYLES_CSS) }),
)
.route(
"/",
get(|| async move {
(
StatusCode::OK,
[
(CONTENT_TYPE, "text/html"),
(CONTENT_SECURITY_POLICY, API_INDEX_HTML_CSP),
],
index_html.clone(),
)
}),
)
.route(
"/login",
get(|| async move {
(
StatusCode::OK,
[
(CONTENT_TYPE, "text/html"),
(CONTENT_SECURITY_POLICY, API_LOGIN_HTML_CSP),
],
login_html.clone(),
)
}),
)
.route(
"/register",
get(|| async move {
(
StatusCode::OK,
[
(CONTENT_TYPE, "text/html"),
(CONTENT_SECURITY_POLICY, API_REGISTER_HTML_CSP),
],
register_html.clone(),
)
}),
);
Ok(router)
}