torrust_index_backend/web/api/v1/
routes.rs1use std::env;
3use std::sync::Arc;
4
5use axum::routing::get;
6use axum::Router;
7use tower_http::cors::CorsLayer;
8
9use super::contexts::about::handlers::about_page_handler;
10use super::contexts::{about, category, proxy, settings, tag, torrent, user};
11use crate::bootstrap::config::ENV_VAR_CORS_PERMISSIVE;
12use crate::common::AppData;
13
14pub const API_VERSION_URL_PREFIX: &str = "v1";
15
16#[allow(clippy::needless_pass_by_value)]
18pub fn router(app_data: Arc<AppData>) -> Router {
19 let v1_api_routes = Router::new()
23 .route("/", get(about_page_handler).with_state(app_data.clone()))
24 .nest("/user", user::routes::router(app_data.clone()))
25 .nest("/about", about::routes::router(app_data.clone()))
26 .nest("/category", category::routes::router(app_data.clone()))
27 .nest("/tag", tag::routes::router_for_single_resources(app_data.clone()))
28 .nest("/tags", tag::routes::router_for_multiple_resources(app_data.clone()))
29 .nest("/settings", settings::routes::router(app_data.clone()))
30 .nest("/torrent", torrent::routes::router_for_single_resources(app_data.clone()))
31 .nest("/torrents", torrent::routes::router_for_multiple_resources(app_data.clone()))
32 .nest("/proxy", proxy::routes::router(app_data.clone()));
33
34 let router = Router::new()
35 .route("/", get(about_page_handler).with_state(app_data))
36 .nest(&format!("/{API_VERSION_URL_PREFIX}"), v1_api_routes);
37
38 if env::var(ENV_VAR_CORS_PERMISSIVE).is_ok() {
39 router.layer(CorsLayer::permissive())
40 } else {
41 router
42 }
43}