mirror of
https://gitlab.com/comunic/comunicapiv3
synced 2024-11-22 05:19:21 +00:00
wip
This commit is contained in:
parent
254b74282e
commit
5abb162233
12
Cargo.lock
generated
12
Cargo.lock
generated
@ -370,6 +370,17 @@ version = "0.10.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341"
|
||||
|
||||
[[package]]
|
||||
name = "async-trait"
|
||||
version = "0.1.52"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "attohttpc"
|
||||
version = "0.15.0"
|
||||
@ -700,6 +711,7 @@ dependencies = [
|
||||
"actix-multipart",
|
||||
"actix-web",
|
||||
"actix-web-actors",
|
||||
"async-trait",
|
||||
"bcrypt",
|
||||
"bytes",
|
||||
"chrono",
|
||||
|
@ -41,4 +41,5 @@ zip = "0.5.10"
|
||||
webpage = "1.2.0"
|
||||
gouth = "0.2.0"
|
||||
webauthn-rs = "0.3.2"
|
||||
url = "2.2.2"
|
||||
url = "2.2.2"
|
||||
async-trait = "0.1.52"
|
@ -14,7 +14,7 @@ server-port: 3000
|
||||
proxy: "127.0.0.1"
|
||||
|
||||
# User data storage
|
||||
storage-url: http://devweb.local/comunic/current/user_data/
|
||||
storage-url: http://devweb.internal/comunic/current/user_data/
|
||||
storage-path: /home/pierre/Documents/projets_web/comunic/current/user_data/
|
||||
|
||||
# Specify whether user data files should be made available under the user_data directory
|
||||
@ -23,8 +23,8 @@ storage-path: /home/pierre/Documents/projets_web/comunic/current/user_data/
|
||||
serve-storage-files: true
|
||||
|
||||
# URL where Comunic Terms of use are available
|
||||
terms-url: http://devweb.local/comunic/current/about.php?cgu
|
||||
privacy-policy-url: http://devweb.local/comunic/current/about.php?cgu&privacy
|
||||
terms-url: http://devweb.internal/comunic/current/about.php?cgu
|
||||
privacy-policy-url: http://devweb.internal/comunic/current/about.php?cgu&privacy
|
||||
|
||||
# Email where the Comunic staff can be contacted
|
||||
contact-email: contact@communiquons.org
|
||||
@ -101,4 +101,4 @@ banner:
|
||||
# This option allows to enable some extra features for these groups
|
||||
#
|
||||
# In most cases you should not have to specify this information
|
||||
forez_groups: 32
|
||||
forez_groups: 32
|
||||
|
@ -8,7 +8,7 @@ use crate::routes::RequestResult;
|
||||
/// @author Pierre Hubert
|
||||
|
||||
/// Root server index
|
||||
pub fn main_index(request: &mut HttpRequestHandler) -> RequestResult {
|
||||
pub async fn main_index(request: &mut HttpRequestHandler) -> RequestResult {
|
||||
request.success("Comunic API server V3. (c) Pierre Hubert 2020")
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,11 @@
|
||||
use std::error::Error;
|
||||
use std::future::Future;
|
||||
use std::pin::Pin;
|
||||
|
||||
use async_trait::async_trait;
|
||||
|
||||
use crate::constants::admin::AdminRole;
|
||||
use crate::controllers::{account_controller, comments_controller, conversations_controller, forez_controller, friends_controller, groups_controller, likes_controller, notifications_controller, posts_controller, push_notifications_controller, search_controller, server_controller, settings_controller, surveys_controller, user_controller, user_ws_controller, virtual_directory_controller, web_app_controller};
|
||||
use crate::controllers::*;
|
||||
use crate::controllers::admin::*;
|
||||
use crate::data::http_request_handler::HttpRequestHandler;
|
||||
use crate::routes::Method::{GET, POST};
|
||||
@ -60,6 +64,19 @@ impl LimitPolicy {
|
||||
}
|
||||
}
|
||||
|
||||
pub trait RouteTrait{
|
||||
fn call(&self, req: &mut HttpRequestHandler) -> Pin<Box<dyn Future<Output=RequestResult>>>;
|
||||
}
|
||||
|
||||
impl<Func, Fut> RouteTrait for Func where Func: 'static + Fn(&mut HttpRequestHandler) -> Fut + Clone ,
|
||||
Fut: 'static +Future<Output=RequestResult> {
|
||||
#[inline]
|
||||
#[allow(non_snake_case)]
|
||||
fn call(&self, req: &mut HttpRequestHandler) -> Pin<Box<dyn Future<Output=RequestResult>>> {
|
||||
Box::pin((self)(req))
|
||||
}
|
||||
}
|
||||
|
||||
/// Define types
|
||||
pub type RequestResult = Result<(), Box<dyn Error>>;
|
||||
pub type RequestProcess = Box<dyn Fn(&mut HttpRequestHandler) -> RequestResult>;
|
||||
@ -78,7 +95,7 @@ pub struct Route {
|
||||
pub need_login: bool,
|
||||
|
||||
/// The function called to process a request
|
||||
pub func: RequestProcess,
|
||||
pub func: Pin<Box<dyn RouteTrait + 'static>>,
|
||||
|
||||
/// Request rate policy
|
||||
pub limit_policy: LimitPolicy,
|
||||
@ -88,19 +105,19 @@ pub struct Route {
|
||||
}
|
||||
|
||||
impl Route {
|
||||
pub fn get_without_login(uri: &'static str, func: RequestProcess) -> Route {
|
||||
pub fn get_without_login<E>(uri: &'static str, func: E) -> Route where E: 'static + RouteTrait {
|
||||
Route {
|
||||
scope: RouteScope::USER,
|
||||
method: GET,
|
||||
need_login: false,
|
||||
uri,
|
||||
func,
|
||||
func: Box::pin(func),
|
||||
limit_policy: LimitPolicy::NONE,
|
||||
admin_role: None,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn post_without_login(uri: &'static str, func: RequestProcess) -> Route {
|
||||
/*pub fn post_without_login(uri: &'static str, func: RequestProcess) -> Route {
|
||||
Route {
|
||||
scope: RouteScope::USER,
|
||||
method: POST,
|
||||
@ -182,15 +199,15 @@ impl Route {
|
||||
limit_policy: LimitPolicy::NONE,
|
||||
admin_role: Some(role),
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
/// Get the list of routes available
|
||||
pub fn get_routes() -> Vec<Route> {
|
||||
vec![
|
||||
// Server meta routes
|
||||
Route::get_without_login("/", Box::new(server_controller::main_index)),
|
||||
Route::post_without_login("/server/config", Box::new(server_controller::get_config)),
|
||||
Route::get_without_login("/", server_controller::main_index),
|
||||
/*Route::post_without_login("/server/config", Box::new(server_controller::get_config)),
|
||||
|
||||
// Main user WebSocket
|
||||
Route::post("/ws/token", Box::new(user_ws_controller::get_token)),
|
||||
@ -399,6 +416,6 @@ pub fn get_routes() -> Vec<Route> {
|
||||
Route::admin_post("/admin/users/search", Box::new(admin_users_controller::search)),
|
||||
Route::admin_post("/admin/users/info", Box::new(admin_users_controller::get_single)),
|
||||
Route::admin_post("/admin/users/change_email_address", Box::new(admin_users_controller::change_email_address)),
|
||||
Route::admin_post("/admin/users/create_password_reset_link", Box::new(admin_users_controller::create_password_reset_link)),
|
||||
Route::admin_post("/admin/users/create_password_reset_link", Box::new(admin_users_controller::create_password_reset_link)),*/
|
||||
]
|
||||
}
|
@ -236,7 +236,8 @@ async fn process_simple_route(route: &Route, req: &mut HttpRequestHandler) -> Re
|
||||
}
|
||||
|
||||
|
||||
let res: RequestResult = (route.func)(req);
|
||||
let res = route.func.call(req).await;
|
||||
|
||||
|
||||
requests_limit_helper::trigger_after(res.is_ok(), req, route)?;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user