use std::error::Error; use crate::controllers::routes::Method::{GET, POST}; use crate::controllers::{server_controller, account_controller, user_controller, virtual_directory_controller, conversations_controller}; use crate::data::http_request_handler::HttpRequestHandler; /// Project routes /// /// @author Pierre Hubert #[derive(PartialEq)] pub enum Method { GET, POST, } /// Define types pub type RequestResult = Result<(), Box>; pub type RequestProcess = Box RequestResult>; pub struct Route { /// The Verb used for the request pub method: Method, /// The URI of the request, with the leading "/" pub uri: &'static str, /// If set to true, unauthenticated requests will be rejected pub need_login: bool, /// The function called to process a request pub func: RequestProcess, } impl Route { pub fn get_without_login(uri: &'static str, func: RequestProcess) -> Route { Route { method: GET, need_login: false, uri, func } } pub fn post_without_login(uri: &'static str, func: RequestProcess) -> Route { Route { method: POST, need_login: false, uri, func } } pub fn post(uri: &'static str, func: RequestProcess) -> Route { Route { method: POST, need_login: true, uri, func } } } /// Get the list of routes available pub fn get_routes() -> Vec { vec![ // Server meta routes Route::get_without_login("/", Box::new(server_controller::main_index)), // Account controller Route::post_without_login("/account/login", Box::new(account_controller::login_user)), Route::post_without_login("/user/connectUSER", Box::new(account_controller::login_user)), Route::post("/account/logout", Box::new(account_controller::logout_user)), Route::post("/user/disconnectUSER", Box::new(account_controller::logout_user)), Route::post("/account/id", Box::new(account_controller::user_id)), Route::post("/user/getCurrentUserID", Box::new(account_controller::user_id)), // User controller Route::post_without_login("/user/getInfo", Box::new(user_controller::get_single)), Route::post_without_login("/user/getInfos", Box::new(user_controller::get_single)), Route::post_without_login("/user/getInfoMultiple", Box::new(user_controller::get_multiple)), Route::post_without_login("/user/getInfosMultiple", Box::new(user_controller::get_multiple)), Route::post_without_login("/user/getAdvancedUserInfo", Box::new(user_controller::get_advanced_info)), Route::post_without_login("/user/getAdvancedUserInfos", Box::new(user_controller::get_advanced_info)), // Conversations controller Route::post("/conversations/create", Box::new(conversations_controller::create)), Route::post("/conversations/getList", Box::new(conversations_controller::get_list)), Route::post("/conversations/getInfoOne", Box::new(conversations_controller::get_single)), Route::post("/conversations/getInfosOne", Box::new(conversations_controller::get_single)), Route::post("/conversations/updateSettings", Box::new(conversations_controller::update_settings)), Route::post("/conversations/getPrivate", Box::new(conversations_controller::find_private)), Route::post("/conversations/refresh", Box::new(conversations_controller::refresh_list)), Route::post("/conversations/refresh_single", Box::new(conversations_controller::refresh_single)), Route::post("/conversations/sendMessage", Box::new(conversations_controller::send_message)), // Virtual directory controller Route::post("/user/findbyfolder", Box::new(virtual_directory_controller::find_user)), Route::post("/virtualDirectory/find", Box::new(virtual_directory_controller::find)), ] }