Move routes to their own file for maintainability

This commit is contained in:
Brandon Thomas committed 2021-12-21 12:27:51 -05:00
1 parent 18c3913f8f
commit 5db08c3b83
2 files changed
+390 -307

No files matched your search

+6 -307
View File
@@ -19,6 +19,7 @@ pub const BANNED_SLURS : &'static str = include_str!("../../../../db/banned_slur
pub mod database;
pub mod http_clients;
pub mod http_server;
pub mod routes;
pub mod server_state;
pub mod threads;
pub mod util;
@@ -114,6 +115,7 @@ use sqlx::mysql::MySqlPoolOptions;
use std::sync::Arc;
use std::time::Duration;
use tokio::runtime::Runtime;
use crate::routes::add_routes;
// TODO TODO TODO TODO
// TODO TODO TODO TODO
@@ -315,7 +317,7 @@ pub async fn serve(server_state: ServerState) -> AnyhowResult<()>
// NB: Safe to clone due to internal arc
let ip_banlist = server_state_arc.ip_banlist.clone();
App::new()
let app = App::new()
.app_data(server_state_arc.clone())
.wrap(build_common_cors_config())
.wrap(DefaultHeaders::new()
@@ -324,312 +326,9 @@ pub async fn serve(server_state: ServerState) -> AnyhowResult<()>
.wrap(IpFilter::new(ip_banlist))
.wrap(Logger::new(&log_format)
.exclude("/liveness")
.exclude("/readiness"))
// ==================== ACCOUNT CREATION / SESSION MANAGEMENT ====================
.service(
web::resource("/create_account")
.route(web::post().to(create_account_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/login")
.route(web::post().to(login_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/logout")
.route(web::post().to(logout_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/session")
.route(web::get().to(session_info_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
// ==================== MODERATOR ====================
.service(
web::scope("/moderation")
.service(
web::resource("/staff")
.route(web::get().to(list_staff_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::scope("/ip_bans")
.service(
web::resource("/list")
.route(web::get().to(list_ip_bans_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/add")
.route(web::post().to(add_ip_ban_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/{ip_address}")
.route(web::get().to(get_ip_ban_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/{ip_address}/delete")
.route(web::post().to(delete_ip_ban_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
)
.service(
web::scope("/user")
.service(
web::resource("/list")
.route(web::get().to(list_users_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
)
.service(
web::scope("/user_bans")
.service(
web::resource("/list")
.route(web::get().to(list_banned_users_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/manage_ban")
.route(web::post().to(ban_user_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
)
.service(
web::scope("/roles")
.service(
web::resource("/list")
.route(web::get().to(list_user_roles_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/{username}/edit")
.route(web::post().to(set_user_role_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
)
.service(
web::scope("/jobs")
.service(
web::resource("/tts_inference_queue_stats")
.route(web::get().to(get_tts_inference_queue_count_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/w2l_inference_queue_stats")
.route(web::get().to(get_w2l_inference_queue_count_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
)
.service(
web::scope("/pending")
.service(
web::resource("/w2l_templates")
.route(web::get().to(get_pending_w2l_templates_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/w2l_inference_queue_stats")
.route(web::get().to(get_w2l_inference_queue_count_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
)
.service(
web::scope("/stats")
.service(
web::resource("/tts_voices")
.route(web::get().to(get_voice_count_stats_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
)
)
// ==================== TTS ====================
.service(
web::scope("/tts")
.service(
web::resource("/upload")
.route(web::post().to(upload_tts_model_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/inference")
.route(web::post().to(infer_tts_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/list")
.route(web::get().to(list_tts_models_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/model/{token}")
.route(web::get().to(get_tts_model_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/model/{token}/delete")
.route(web::post().to(delete_tts_model_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/model/{model_token}/count")
.route(web::get().to(get_tts_model_use_count_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/model/{model_token}/edit")
.route(web::post().to(edit_tts_model_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/result/{token}")
.route(web::get().to(get_tts_inference_result_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/result/{token}/edit")
.route(web::post().to(edit_tts_inference_result_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/result/{token}/delete")
.route(web::post().to(delete_tts_inference_result_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/job/{token}")
.route(web::get().to(get_tts_inference_job_status_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/upload_model_job/{token}")
.route(web::get().to(get_tts_upload_model_job_status_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
)
// ==================== WAV2LIP ====================
.service(
web::scope("/w2l")
.service(
web::resource("/upload")
.route(web::post().to(upload_w2l_template_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/inference")
.route(web::post().to(enqueue_infer_w2l_with_uploads))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/list")
.route(web::get().to(list_w2l_templates_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/template/{token}")
.route(web::get().to(get_w2l_template_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/template/{template_token}/count")
.route(web::get().to(get_w2l_template_use_count_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/template/{template_token}/edit")
.route(web::post().to(edit_w2l_template_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/template/{token}/moderate")
.route(web::post().to(set_w2l_template_mod_approval_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/template/{token}/delete")
.route(web::post().to(delete_w2l_template_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/result/{token}")
.route(web::get().to(get_w2l_inference_result_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/result/{token}/edit")
.route(web::post().to(edit_w2l_inference_result_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/result/{token}/delete")
.route(web::post().to(delete_w2l_inference_result_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/job/{token}")
.route(web::get().to(get_w2l_inference_job_status_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/upload_template_job/{token}")
.route(web::get().to(get_w2l_upload_template_job_status_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
)
// ==================== USER DATA ====================
.service(
web::scope("/user")
.service(
web::resource("/{username}/profile")
.route(web::get().to(get_profile_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/{username}/edit_profile")
.route(web::post().to(edit_profile_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/{username}/tts_models")
.route(web::get().to(list_user_tts_models_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/{username}/tts_results")
.route(web::get().to(list_user_tts_inference_results_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/{username}/w2l_templates")
.route(web::get().to(list_user_w2l_templates_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/{username}/w2l_results")
.route(web::get().to(list_user_w2l_inference_results_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
)
.service(
web::resource("/events")
.route(web::get().to(list_events_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/leaderboard")
.route(web::get().to(leaderboard_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(web::resource("/")
.route(web::get().to(get_root_index))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(enable_alpha_handler)
.service(enable_alpha_easy_handler)
.default_service( web::route().to(default_route_404))
.exclude("/readiness"));
add_routes(app)
})
.bind(bind_address)?
.workers(num_workers)
+384
View File
@@ -0,0 +1,384 @@
use actix_web::{App, web, HttpResponse};
use crate::http_server::endpoints::events::list_events::list_events_handler;
use crate::http_server::endpoints::leaderboard::get_leaderboard::leaderboard_handler;
use crate::http_server::endpoints::misc::default_route_404::default_route_404;
use crate::http_server::endpoints::misc::enable_alpha_easy_handler::enable_alpha_easy_handler;
use crate::http_server::endpoints::misc::enable_alpha_handler::enable_alpha_handler;
use crate::http_server::endpoints::misc::root_index::get_root_index;
use crate::http_server::endpoints::moderation::approval::pending_w2l_templates::get_pending_w2l_templates_handler;
use crate::http_server::endpoints::moderation::ip_bans::add_ip_ban::add_ip_ban_handler;
use crate::http_server::endpoints::moderation::ip_bans::delete_ip_ban::delete_ip_ban_handler;
use crate::http_server::endpoints::moderation::ip_bans::get_ip_ban::get_ip_ban_handler;
use crate::http_server::endpoints::moderation::ip_bans::list_ip_bans::list_ip_bans_handler;
use crate::http_server::endpoints::moderation::jobs::get_tts_inference_queue_count::get_tts_inference_queue_count_handler;
use crate::http_server::endpoints::moderation::jobs::get_w2l_inference_queue_count::get_w2l_inference_queue_count_handler;
use crate::http_server::endpoints::moderation::stats::get_voice_count_stats::get_voice_count_stats_handler;
use crate::http_server::endpoints::moderation::user_bans::ban_user::ban_user_handler;
use crate::http_server::endpoints::moderation::user_bans::list_banned_users::list_banned_users_handler;
use crate::http_server::endpoints::moderation::user_roles::list_roles::list_user_roles_handler;
use crate::http_server::endpoints::moderation::user_roles::list_staff::list_staff_handler;
use crate::http_server::endpoints::moderation::user_roles::set_user_role::set_user_role_handler;
use crate::http_server::endpoints::moderation::users::list_users::list_users_handler;
use crate::http_server::endpoints::tts::delete_tts_model::delete_tts_model_handler;
use crate::http_server::endpoints::tts::delete_tts_result::delete_tts_inference_result_handler;
use crate::http_server::endpoints::tts::edit_tts_model::edit_tts_model_handler;
use crate::http_server::endpoints::tts::edit_tts_result::edit_tts_inference_result_handler;
use crate::http_server::endpoints::tts::enqueue_infer_tts::infer_tts_handler;
use crate::http_server::endpoints::tts::enqueue_upload_tts_model::upload_tts_model_handler;
use crate::http_server::endpoints::tts::get_tts_inference_job_status::get_tts_inference_job_status_handler;
use crate::http_server::endpoints::tts::get_tts_model::get_tts_model_handler;
use crate::http_server::endpoints::tts::get_tts_model_use_count::get_tts_model_use_count_handler;
use crate::http_server::endpoints::tts::get_tts_result::get_tts_inference_result_handler;
use crate::http_server::endpoints::tts::get_tts_upload_model_job_status::get_tts_upload_model_job_status_handler;
use crate::http_server::endpoints::tts::list_tts_models::list_tts_models_handler;
use crate::http_server::endpoints::users::create_account::create_account_handler;
use crate::http_server::endpoints::users::edit_profile::edit_profile_handler;
use crate::http_server::endpoints::users::get_profile::get_profile_handler;
use crate::http_server::endpoints::users::list_user_tts_inference_results::list_user_tts_inference_results_handler;
use crate::http_server::endpoints::users::list_user_tts_models::list_user_tts_models_handler;
use crate::http_server::endpoints::users::list_user_w2l_inference_results::list_user_w2l_inference_results_handler;
use crate::http_server::endpoints::users::list_user_w2l_templates::list_user_w2l_templates_handler;
use crate::http_server::endpoints::users::login::login_handler;
use crate::http_server::endpoints::users::logout::logout_handler;
use crate::http_server::endpoints::users::session_info::session_info_handler;
use crate::http_server::endpoints::w2l::delete_w2l_result::delete_w2l_inference_result_handler;
use crate::http_server::endpoints::w2l::delete_w2l_template::delete_w2l_template_handler;
use crate::http_server::endpoints::w2l::edit_w2l_result::edit_w2l_inference_result_handler;
use crate::http_server::endpoints::w2l::edit_w2l_template::edit_w2l_template_handler;
use crate::http_server::endpoints::w2l::enqueue_infer_w2l::infer_w2l_handler;
use crate::http_server::endpoints::w2l::enqueue_infer_w2l_with_uploads::enqueue_infer_w2l_with_uploads;
use crate::http_server::endpoints::w2l::enqueue_upload_w2l_template::upload_w2l_template_handler;
use crate::http_server::endpoints::w2l::get_w2l_inference_job_status::get_w2l_inference_job_status_handler;
use crate::http_server::endpoints::w2l::get_w2l_result::get_w2l_inference_result_handler;
use crate::http_server::endpoints::w2l::get_w2l_template::get_w2l_template_handler;
use crate::http_server::endpoints::w2l::get_w2l_template_use_count::get_w2l_template_use_count_handler;
use crate::http_server::endpoints::w2l::get_w2l_upload_template_job_status::get_w2l_upload_template_job_status_handler;
use crate::http_server::endpoints::w2l::list_w2l_templates::list_w2l_templates_handler;
use crate::http_server::endpoints::w2l::set_w2l_template_mod_approval::set_w2l_template_mod_approval_handler;
use actix_http::body::MessageBody;
use actix_service::ServiceFactory;
use actix_web::dev::{ServiceRequest, ServiceResponse};
use actix_web::error::Error;
pub fn add_routes<T, B> (app: App<T, B>) -> App<T, B>
where
B: MessageBody,
T: ServiceFactory<
ServiceRequest,
Config = (),
Response = ServiceResponse<B>,
Error = Error,
InitError = (),
>,
{
// ==================== ACCOUNT CREATION / SESSION MANAGEMENT ====================
app.service(
web::resource("/create_account")
.route(web::post().to(create_account_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/login")
.route(web::post().to(login_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/logout")
.route(web::post().to(logout_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/session")
.route(web::get().to(session_info_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
// ==================== MODERATOR ====================
.service(
web::scope("/moderation")
.service(
web::resource("/staff")
.route(web::get().to(list_staff_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::scope("/ip_bans")
.service(
web::resource("/list")
.route(web::get().to(list_ip_bans_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/add")
.route(web::post().to(add_ip_ban_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/{ip_address}")
.route(web::get().to(get_ip_ban_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/{ip_address}/delete")
.route(web::post().to(delete_ip_ban_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
)
.service(
web::scope("/user")
.service(
web::resource("/list")
.route(web::get().to(list_users_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
)
.service(
web::scope("/user_bans")
.service(
web::resource("/list")
.route(web::get().to(list_banned_users_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/manage_ban")
.route(web::post().to(ban_user_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
)
.service(
web::scope("/roles")
.service(
web::resource("/list")
.route(web::get().to(list_user_roles_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/{username}/edit")
.route(web::post().to(set_user_role_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
)
.service(
web::scope("/jobs")
.service(
web::resource("/tts_inference_queue_stats")
.route(web::get().to(get_tts_inference_queue_count_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/w2l_inference_queue_stats")
.route(web::get().to(get_w2l_inference_queue_count_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
)
.service(
web::scope("/pending")
.service(
web::resource("/w2l_templates")
.route(web::get().to(get_pending_w2l_templates_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/w2l_inference_queue_stats")
.route(web::get().to(get_w2l_inference_queue_count_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
)
.service(
web::scope("/stats")
.service(
web::resource("/tts_voices")
.route(web::get().to(get_voice_count_stats_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
)
)
// ==================== TTS ====================
.service(
web::scope("/tts")
.service(
web::resource("/upload")
.route(web::post().to(upload_tts_model_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/inference")
.route(web::post().to(infer_tts_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/list")
.route(web::get().to(list_tts_models_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/model/{token}")
.route(web::get().to(get_tts_model_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/model/{token}/delete")
.route(web::post().to(delete_tts_model_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/model/{model_token}/count")
.route(web::get().to(get_tts_model_use_count_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/model/{model_token}/edit")
.route(web::post().to(edit_tts_model_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/result/{token}")
.route(web::get().to(get_tts_inference_result_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/result/{token}/edit")
.route(web::post().to(edit_tts_inference_result_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/result/{token}/delete")
.route(web::post().to(delete_tts_inference_result_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/job/{token}")
.route(web::get().to(get_tts_inference_job_status_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/upload_model_job/{token}")
.route(web::get().to(get_tts_upload_model_job_status_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
)
// ==================== WAV2LIP ====================
.service(
web::scope("/w2l")
.service(
web::resource("/upload")
.route(web::post().to(upload_w2l_template_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/inference")
.route(web::post().to(enqueue_infer_w2l_with_uploads))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/list")
.route(web::get().to(list_w2l_templates_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/template/{token}")
.route(web::get().to(get_w2l_template_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/template/{template_token}/count")
.route(web::get().to(get_w2l_template_use_count_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/template/{template_token}/edit")
.route(web::post().to(edit_w2l_template_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/template/{token}/moderate")
.route(web::post().to(set_w2l_template_mod_approval_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/template/{token}/delete")
.route(web::post().to(delete_w2l_template_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/result/{token}")
.route(web::get().to(get_w2l_inference_result_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/result/{token}/edit")
.route(web::post().to(edit_w2l_inference_result_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/result/{token}/delete")
.route(web::post().to(delete_w2l_inference_result_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/job/{token}")
.route(web::get().to(get_w2l_inference_job_status_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/upload_template_job/{token}")
.route(web::get().to(get_w2l_upload_template_job_status_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
)
// ==================== USER DATA ====================
.service(
web::scope("/user")
.service(
web::resource("/{username}/profile")
.route(web::get().to(get_profile_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/{username}/edit_profile")
.route(web::post().to(edit_profile_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/{username}/tts_models")
.route(web::get().to(list_user_tts_models_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/{username}/tts_results")
.route(web::get().to(list_user_tts_inference_results_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/{username}/w2l_templates")
.route(web::get().to(list_user_w2l_templates_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/{username}/w2l_results")
.route(web::get().to(list_user_w2l_inference_results_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
)
.service(
web::resource("/events")
.route(web::get().to(list_events_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(
web::resource("/leaderboard")
.route(web::get().to(leaderboard_handler))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(web::resource("/")
.route(web::get().to(get_root_index))
.route(web::head().to(|| HttpResponse::Ok()))
)
.service(enable_alpha_handler)
.service(enable_alpha_easy_handler)
.default_service( web::route().to(default_route_404))
}