You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
2.5 KiB
114 lines
2.5 KiB
mod handlers; |
|
mod db; |
|
mod errors; |
|
|
|
use warp::{ |
|
Filter, |
|
Rejection, |
|
Reply, |
|
body |
|
}; |
|
|
|
#[macro_use] |
|
extern crate log; |
|
use env_logger; |
|
|
|
use u_lib::{ |
|
MASTER_PORT, |
|
api::Paths, |
|
models::* |
|
}; |
|
use db::*; |
|
use serde::{ |
|
de::DeserializeOwned |
|
}; |
|
|
|
fn get_content<M>() |
|
-> impl Filter<Extract = (Message<'static, M>,), |
|
Error = Rejection> + Clone |
|
where |
|
M: ToMsg + Sync + Send + DeserializeOwned + 'static |
|
{ |
|
body::content_length_limit(1024*64) |
|
.and(body::json::<Message<M>>()) |
|
} |
|
|
|
|
|
#[tokio::main] |
|
async fn main() { |
|
env_logger::init(); |
|
|
|
let base_db = UDB::new().unwrap(); |
|
let db = warp::any().map(move || base_db.clone()); |
|
|
|
let new_client = warp::post() |
|
.and(warp::path(Paths::init)) |
|
.and(get_content::<IAgent>()) |
|
.and(db.clone()) |
|
.and_then(handlers::add_agent); |
|
|
|
let get_agents = warp::get() |
|
.and(warp::path(Paths::ls)) |
|
.and(db.clone()) |
|
.and_then(handlers::get_agents); |
|
|
|
let upload_job = warp::post() |
|
.and(warp::path(Paths::upload_job)) |
|
.and(db.clone()) |
|
.and_then(handlers::upload_job); |
|
/* |
|
let get_jobs = warp::get() |
|
.and(warp::path(Paths::get_jobs)) |
|
.and(db.clone()) |
|
.and_then(handlers::get_jobs); |
|
|
|
let set_jobs = warp::post() |
|
.and(warp::path(Paths::set_jobs)) |
|
.and(warp::path::param::<Uuid>().map(Some)) |
|
.and(get_content::<JobMetaStorage>()) |
|
.and(db.clone()) |
|
.and_then(handlers::set_jobs); |
|
|
|
let get_job_results = warp::get() |
|
.and(warp::path(Paths::get_job_results)) |
|
.and(warp::path::param::<Uuid>()) |
|
.and(db.clone()) |
|
.and_then(handlers::get_job_results); |
|
|
|
let report = warp::post() |
|
.and(warp::path(Paths::report)) |
|
.and(get_content::<Vec<JobResult>>()) |
|
.and(db.clone()) |
|
.and_then(handlers::report); |
|
*/ |
|
let auth_token = warp::header::exact("authorization", "Bearer 123qwe"); |
|
|
|
let agent_zone = new_client |
|
// .or(get_jobs) |
|
// .or(report) |
|
; |
|
|
|
let auth_zone = auth_token |
|
.and(get_agents |
|
.or(upload_job) |
|
// .or(set_jobs) |
|
// .or(get_job_results) |
|
) |
|
; |
|
|
|
let routes = auth_zone |
|
.or(agent_zone); |
|
warp::serve(routes.with(warp::log("warp"))) |
|
.run(([0,0,0,0], MASTER_PORT)).await; |
|
} |
|
|
|
|
|
#[cfg(test)] |
|
mod tests { |
|
use super::*; |
|
/* |
|
#[tokio::test] |
|
async fn test_gather() { |
|
} |
|
*/ |
|
}
|
|
|